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

2022年の変更履歴

ClickHouse リリース 22.12, 2022-12-15

注記

このリリースには不具合のある systemd サービスコメントが含まれており、一部の Linux ディストリビューションではアップグレード時に ClickHouse のインストールが壊れてしまう可能性があります。systemd サービスが /run/systemd ディレクトリの所有者権限を変更してしまい、その結果として以降のすべての systemd 操作が失敗します。このバージョンへのアップグレードはスキップし、代わりにより新しいバージョンの ClickHouse へアップグレードすることを推奨します。

詳細については GitHub 上のこの issue を参照してください: https://github.com/ClickHouse/ClickHouse/issues/48285

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

  • String 引数を取る min, max, any*, argMin, argMax 集約関数の状態の (非)直列化における後方互換性の問題を修正しました。この非互換性は 22.9、22.10、22.11 ブランチに影響します(それぞれ 22.9.6、22.10.4、22.11.2 以降で修正済み)。22.3、22.7、22.8 ブランチの一部のマイナーリリースも影響を受けます: 22.3.13...22.3.14(22.3.15 以降で修正)、22.8.6...22.8.9(22.8.10 以降で修正)、22.7.6 以降(22.7 では修正されません。22.7.* から 22.8.10 以降へのアップグレードを推奨します)。影響のあるバージョンを一度も使用していないユーザーには、このリリースノートは関係しません。非互換なバージョンでは、上記の集約関数の状態を読み取る際に、文字列の末尾に余分な '\0' を付加します。例えば、古いバージョンが anyState('foobar') の状態を state_column に保存していた場合、非互換なバージョンは anyMerge(state_column)'foobar\0' を出力します。また、非互換なバージョンは、末尾の '\0' なしでこれらの集約関数の状態を書き込みます。修正を含む新しいバージョンは、1 つのコーナーケースを除き、非互換バージョンを含むすべてのバージョンが書き込んだデータを正しく読み取ることができます。非互換なバージョンが、実際にヌル文字で終わる文字列を含む状態を保存していた場合、新しいバージョンは、該当する集約関数の状態を読み取る際に末尾の '\0' を削除します。例えば、非互換なバージョンが anyState('abrac\0dabra\0') の状態を state_column に保存していた場合、新しいバージョンは anyMerge(state_column)'abrac\0dabra' を出力します。この問題は、非互換なバージョンが古いバージョンまたは新しいバージョンと同一クラスタ内で動作している場合の分散クエリにも影響します。#43038Alexander Tokmakov, Raúl Marín)。注: すべての公式 ClickHouse ビルドにはすでにパッチが含まれています。非公式なサードパーティビルドについてはそうとは限らないため、使用を避けるべきです。

新機能

  • BSONEachRow 入出力フォーマットを追加しました。このフォーマットでは、ClickHouse は各行を個別の BSON ドキュメントとしてフォーマット/パースし、各カラムはカラム名をキーとする 1 つの BSON フィールドとしてフォーマット/パースします。#42033 (mark-polokhov)。
  • grace_hash JOIN アルゴリズムを追加しました。SET join_algorithm = 'grace_hash' で有効にできます。 #38191 (BigRedEyeVladimir C)。
  • ユーザーの作成および変更時に使用するパスワードの複雑性ルールとチェックを構成できるようにしました。 #43719 (Nikolay Degterinsky).
  • ログ内の機密情報をマスクし、クエリ SHOW CREATE TABLESELECT FROM system.tables の出力に含まれる秘匿すべき部分もマスクします。また、#41418 を解決します。#43227Vitaly Baranov)。
  • GROUP BY ALL 構文を追加しました: #37631. #42265 (刘陶峰).
  • FROM table SELECT column 構文を追加しました。 #41095 (Nikolay Degterinsky).
  • Spark SQL との互換性のため、関数 concatWithSeparator と、そのエイリアスである concat_ws を追加しました。concatAssumeInjective と同様に GROUP BY の最適化を有効にするバリアントとして、関数 concatWithSeparatorAssumeInjective を追加しました。 #43749 (李扬)。
  • 固定精度の 10 進数演算用に multiplyDecimal および divideDecimal 関数を追加しました。 #42438 (Andrey Zvonov).
  • 現在移動中のパーツの一覧を保持する system.moves テーブルを追加しました。 #42660 (Sergei Trifonov)。
  • ClickHouse Keeper 向けの組み込み Prometheus エンドポイントのサポートを追加しました。 #43087 (Antonio Andelic).
  • 数値リテラルでアンダースコア _ を区切り文字として使用できるようにしました(例: 1_000_000)。 #43925 (jh0x).
  • cutURLParameter 関数の第 2 引数として配列を使用できるようにしました。これにより複数のパラメータを削除できます。 #6827 をクローズしました。 #43788Roman Vasin)。
  • system.data_skipping_indices テーブルにインデックス式を格納する列を追加。 #43308 (Guillaume Tassery)。
  • システムテーブル databases に列 engine_full を追加し、ユーザーがシステムテーブルを介してデータベースのエンジン定義全体にアクセスできるようにしました。 #43468 (凌涛).
  • 新しいハッシュ関数 xxh3 が追加されました。また、ライブラリの更新により、ARM アーキテクチャ上での xxHash32xxHash64 のパフォーマンスが向上しました。#43411Nikita Taranov)。
  • MergeTree の設定に対して制約を定義できるようになりました。例えば、ユーザーによる storage_policy の上書きを禁止できます。 #43903 (Sergei Trifonov)。
  • 新しい設定項目 input_format_json_read_objects_as_strings を追加し、すべての JSON 入力形式でネストされた JSON オブジェクトを String としてパースできるようにしました。この設定はデフォルトで無効になっています。 #44052 (Kruglov Pavel).

Experimental Feature

  • 非同期挿入に対する重複排除をサポートしました。この変更以前は、複数の小さな挿入が 1 つの挿入バッチ内に共存していたため、非同期挿入では重複排除がサポートされていませんでした。#38075 を解決しました。#43304Han Fei)。
  • 実験的な Annoy インデックス(ベクトル類似性検索)に対してコサイン距離をサポートしました。#42778Filatenkov Artur)。
  • CREATE / ALTER / DROP NAMED COLLECTION クエリを追加しました。#43252Kseniia Sumarokova)。この機能は開発中であり、バージョン 22.12 の時点ではこれらのクエリはまだ有効ではありません。このチェンジログの項目は、混乱を避けるためだけに追加されています。named collection へのデフォルトのアクセス権を、config で定義されたユーザーのみに制限しました。これらを表示できるようにするには、show_named_collections = 1 を設定する必要があります。#43325Kseniia Sumarokova)。system.named_collections テーブルが導入されました。#43147Kseniia Sumarokova)。

パフォーマンスの改善

  • max_streams_for_merge_tree_readingallow_asynchronous_read_from_io_pool_for_merge_tree の設定を追加しました。max_streams_for_merge_tree_reading は MergeTree テーブルに対する読み取りストリーム数を制限します。allow_asynchronous_read_from_io_pool_for_merge_tree は、MergeTree テーブルから読み取るためのバックグラウンド I/O プールを有効にします。これは、max_streams_to_max_threads_ratio または max_streams_for_merge_tree_reading と併用した場合、I/O ボトルネックとなるクエリのパフォーマンスを向上させる可能性があります。#43260Nikolai Kochetov)。高レイテンシなストレージ、少ない CPU 数、大量のデータパーツといった条件では、最大で 100 倍のパフォーマンス向上が見込めます。
  • 設定 merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem がアダプティブグラニュラリティを考慮していませんでした。幅の広い(列数の多い)行が読み取り行数を減らさず(merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read では行われていたように)、リモートファイルシステム使用時に高いメモリ使用量を引き起こす可能性がありました。#43965Nikolai Kochetov)。
  • マージ対象のパーツを選択する際に ZooKeeper または ClickHouse Keeper への list リクエスト数を最適化しました。以前は状況によっては数千件のリクエストを発行することがありました。#43647 を修正しました。#43675Alexander Tokmakov)。
  • max_size_to_preallocate_for_aggregation の値が小さすぎる場合は、最適化をスキップするようになりました。この設定のデフォルト値は 10^8 に引き上げられました。#43945Nikita Taranov)。
  • 古いデータパーツのクリーンアップを行わないようにして、サーバーのシャットダウンを高速化しました。これは https://github.com/ClickHouse/ClickHouse/pull/41145 以降は不要であるためです。#43760Sema Checherinda)。
  • イニシエーター側でのマージは、enable_memory_bound_merging_of_aggregation_results が設定されている場合、ローカル集約結果のマージと同じメモリ制限付きアプローチを使用するようになりました。#40879Nikita Taranov)。
  • Keeper の改善: レプリケーションと並行してログをディスクへ同期するようになりました。#43450Antonio Andelic)。
  • Keeper の改善: リクエストをより頻繁にバッチングするようになりました。バッチングは新しい設定 max_requests_quick_batch_size で制御できます。#43686Antonio Andelic)。

改善

  • バックアップからの復元時に参照関係の依存性を実装し、それに基づいてテーブルを正しい順序で作成するようにしました。 #43834 (Vitaly Baranov).
  • 起動時の読み込み中の失敗を回避するため、CREATE クエリ内の UDF を置き換えるようにしました。さらに、列の DEFAULT 式として UDF を使用できるようになりました。 #43539 (Antonio Andelic)。
  • 次のクエリにおけるパーツ削除の方法を変更しました:TRUNCATE TABLE、ALTER TABLE DROP PART、ALTER TABLE DROP PARTITION。これらのクエリは、古いパーツを覆う空のパーツを作成するようになりました。これにより、TRUNCATE クエリは追加の排他ロック取得を伴わずに動作し、同時実行中の読み取りがロックされなくなります。また、これらすべてのクエリで耐久性も実現しました。リクエストが成功した場合、その後にパーツが「復活」して現れることはありません。なお、原子性はトランザクションスコープの場合にのみ達成されます。#41145Sema Checherinda)。
  • SET param_x クエリでは、パラメータ値を手動で文字列にシリアライズする必要がなくなりました。たとえば、これまでの SET param_a = '[\'a\', \'b\']' というクエリは、SET param_a = ['a', 'b'] のように記述できるようになりました。 #41874 (Nikolay Degterinsky)。
  • クライアントで STDIN から読み込む際、進行状況表示に読み取った行数を表示するようにしました。#43423 をクローズ。#43442Kseniia Sumarokova)。
  • S3 テーブル関数やエンジンから読み込む際にプログレスバーを表示するようにしました。 #43454 (Kseniia Sumarokova).
  • 進捗バーには読み取り行数と書き込み行数の両方が表示されます。 #43496 (Ilya Yatsishin).
  • filesystemAvailable および関連する関数がディスク名を指定する 1 つのオプション引数をサポートするようになり、filesystemFreefilesystemUnreserved に変更されました。#35076 をクローズ。#42064flynn)。
  • LDAP 連携: search_limit のデフォルト値を 256 に増やし、任意の値に変更できるようにするための LDAP サーバー設定オプションを追加しました。修正: #42276#42461 (Vasily Nemkov)。
  • 例外メッセージからも機密情報を削除できるようにしました(設定ファイル内の query_masking_rules を参照)。#41418 を解決します。#42940filimonov)。
  • MySQL 互換性のために SHOW FULL TABLES ... などのクエリをサポートしました。 #43910 (Filatenkov Artur).
  • Keeper の改良: ノードをリーダーとして手動で指定できる 4lw コマンド rqld を追加。 #43026 (JackyWoo).
  • クエリで指定された接続タイムアウト設定を Distributed async INSERT に適用できるようにしました。 #43156 (Azat Khuzhin).
  • unhex 関数が FixedString 引数をサポートするようになりました。 issue42369#43207 (DR)。
  • TTL ルールに従い、完全に期限切れとなったパーツが優先的に削除されます(#42869 を参照)。#43222zhongyuankai)。
  • clickhouse-client の CPU 負荷インジケータを、より高精度かつ応答性の高いものにしました。 #43307 (Sergei Trifonov).
  • ストレージ S3 およびテーブル関数 s3 で、ParquetArrowORC 形式のネストされた型のサブカラムの読み取りをサポートしました。 #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 を設定してください。#43592Nikolai Kochetov)。
  • trace_type = 'ProfileEvent' のプロファイルイベントを、各インクリメントのたびに、その時点のスタック、プロファイルイベント名、およびインクリメント値とともに system.trace_log に記録できるようにしました。これは設定 trace_profile_events を有効にすることで利用でき、クエリのパフォーマンスの調査に使用できます。 #43639 (Anton Popov).
  • RowBinary フォーマットで使用される文字列のサイズを制限するための新しい設定 input_format_max_binary_string_size を追加しました。 #43842 (Kruglov Pavel).
  • ClickHouse がリモート HTTP サーバーにリクエストを送信し、サーバーがエラーを返した場合、例外メッセージ内に表示される数値の HTTP ステータスコードが正しく表示されていませんでした。 #43919 をクローズ。 #43920Alexey Milovidov)。
  • 複数の JOIN に対する最適化が行われている場合でも、クエリのエラーを正しく報告できるようにしました。 #43583 (Salvatore).

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

バグ修正(公式 stable または prestable リリースにおけるユーザーから見える誤動作)

  • 非同期インサートの使用時にデッドロックが発生する可能性のある不具合を修正しました。 #43233 (Anton Popov).
  • AST レベルの最適化 optimize_normalize_count_variants における一部の誤ったロジックを修正しました。#43873 (Duc Canh Le)。
  • チェックサムがレプリカ間で一致しない場合(例:アップグレードに伴うデータ形式の変更によって発生)、ミューテーションが進行しなくなる問題を修正。 #36877 (nvartolomei).
  • hdfsCluster テーブル関数で機能していなかった skip_unavailable_shards の最適化を修正しました。 #43236 (chen).
  • ? ワイルドカードの S3 対応を修正。#42731 をクローズ。#43253 (chen)。
  • 配列に Nullable 要素が含まれている場合に、arrayFirstOrNullarrayLastOrNull 関数が正しく動作せず null を返してしまう問題を修正しました。 #43274 (Duc Canh Le).
  • Kafka テーブルに関連する UserTimeMicroseconds / SystemTimeMicroseconds の誤った計測を修正。#42791 (Azat Khuzhin).
  • web ディスクで例外を抑制しないように修正しました。web ディスクのリトライ処理を修正しました。 #42800 (Azat Khuzhin).
  • INSERT とマテリアライズドビューの削除の間で発生する(論理的な)レースコンディションを修正しました。レースコンディションは、INSERT と同時にマテリアライズドビューが削除された場合に発生していました。このとき、実行開始時点では INSERT の依存先としてマテリアライズドビューが存在しているものの、insert チェーンがそのテーブルへアクセスしようとする時点ではすでにテーブルが削除されており、その結果として UNKNOWN_TABLE または TABLE_IS_DROPPED 例外が発生し、挿入処理が停止していました。この変更以降は、依存先がなくなっている場合にはこれらの例外を回避し、そのまま INSERT を継続するようにしました。 #43161 (AlfVII)。
  • quantiles 関数における未定義動作を修正しました。この問題は未初期化メモリにつながる可能性があり、fuzzer によって検出されました。この修正により #44066 がクローズされます。#44067Alexey Milovidov)。
  • 非圧縮サイズがゼロの場合の追加チェックが CompressionCodecDelta に追加されました。#43255Nikita Taranov)。
  • Parquet の配列をフラット化して、配列内の不整合なデータによる問題を回避します。これらの不正なファイルは Apache Iceberg によって生成されることがあります。 #43297 (Arthur Passos).
  • ショートサーキット関数実行時に発生していた、LowCardinality カラムからの誤った型キャストを修正。 #43311 (Kruglov Pavel).
  • Merge エンジンを使用するテーブルに対して、SAMPLE BY を含むクエリの PREWHERE 最適化を修正しました。 #43315 (Antonio Andelic).
  • ストレージポリシーが変更された場合でもテーブルを読み込めるように、MergeTreeData 内の format_version ファイルの内容を確認および比較するようにしました。 #43328 (Antonio Andelic)。
  • Buffer テーブルへの INSERT 時に発生し得る(発生する可能性はきわめて低い)"No column to rollback" という論理的なエラーを修正。 #43336 (Azat Khuzhin).
  • allow_function_parameters が設定されている場合に、パーサーが無制限の数の丸括弧を 1 つの関数として解析できてしまうバグを修正。 #43350 (Nikolay Degterinsky).
  • MaterializeMySQL(実験的機能)では DDL:drop table t1, t2 をサポートし、MySQL の DROP DDL のほとんどと互換性があります。 #43366 (zzsmdfj).
  • session_log(実験的機能):設定プロファイルが不整合な状態になっているという、ごくまれなケースにおいて、session_log エントリの作成に失敗するためにログインできない問題を修正しました。 #42641 (Vasily Nemkov)。
  • 関数 if / multiIf で発生する可能性のある Cannot create non-empty column with type Nothing エラーを修正。 #43356 をクローズ。 #43368Kruglov Pavel)。
  • 行レベルフィルタで列のデフォルト値を使用した場合に発生するバグを修正しました。 #43387 (Alexander Gololobov).
  • DISTINCT + LIMIT BY + LIMIT を含むクエリで、期待より少ない行数しか返されない場合がある問題を修正。#43377 を解決。#43410Igor Nikonov)。
  • Nullable(Decimal(...)) に対する sumMap の不具合を修正。 #43414 (Azat Khuzhin).
  • macOS での時/分単位に対する date_diff の動作を修正。#42742 をクローズ。#43466zzsmdfj)。
  • マージ/ミューテーションに起因するメモリ使用量の誤った計上を修正しました。 #43516 (Azat Khuzhin).
  • toString(enum) を含む条件を扱うプライマリキー解析の不具合を修正しました。 #43596 (Nikita Taranov)。この不具合は @tisonkun によって発見されました。
  • パーティションのアタッチ完了後に、Keeper 内のステータスおよび attach_is_doneclickhouse-copier が更新する処理の整合性を確保しました。 #43602 (lzydmxy).
  • Replicated データベース(実験的機能)の失われたレプリカを復旧する際に、2 つのテーブル名をアトミックに入れ替える必要がある状況が発生することがあります(EXCHANGE を使用)。以前は 2 つの RENAME クエリを使用しようとしていましたが、これは明らかにうまくいかず、そのうえデータベースレプリカの復旧プロセス全体を失敗させていました。 #43628 (Nikita Mikhaylov)。
  • s3Cluster 関数が NOT_FOUND_COLUMN_IN_BLOCK エラーをスローしてしまう問題を修正します。#43534 をクローズします。#43629chen)。
  • 同じキー名を持つがネストレベルが異なる配列を含む JSON オブジェクトをパースする際に発生する可能性のある論理エラー Array sizes mismatched を修正。#43569 をクローズ。#43693Kruglov Pavel)。
  • 集約キーの中に ALIAS 列が含まれる分散 GROUP BY で発生する可能性があった例外を修正しました。#43709 (Nikita Taranov)。
  • ゼロコピーレプリケーション(実験的機能)が有効化され使用されている場合に、プロジェクションが破損する可能性のあるバグを修正。 #43764 (alesapin).
  • AWS S3 において、非常に大きなオブジェクトに対してマルチパートアップロードを使用するよう修正しました。 #43824 (ianton-ru).
  • ON CLUSTER と併用した ALTER ... RESET SETTING の問題を修正しました。1 つのレプリカにしか適用されない可能性がありました。#43843 を修正します。#43848Elena Torró)。
  • USING 句を使用している場合に、右辺で Join テーブルエンジンを用いた JOIN に発生する論理エラーを修正。 #43963 (Vladimir C)。Join テーブルエンジンにおけるキー順序が誤っていたバグを修正。 #44012 (Vladimir C)。
  • Keeper 修正: Raft 用のインターサーバーポートがすでに使用中の場合は例外をスローするようにしました。 #43984 (Antonio Andelic).
  • サブクエリで不要なカラムが削除される場合に、ORDER BY 1, 2 のような ORDER BY の位置指定引数が正しく動作するよう修正しました。#43964 をクローズしました。#43987Kseniia Sumarokova)。
  • 副問い合わせに HAVING 句は含まれているものの、実際の集約を含んでいない場合に発生していた例外を修正しました。 #44051 (Nikita Taranov).
  • S3 のマルチパートアップロードにおける競合状態を修正しました。この競合状態により、バックアップからのリストア中に Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR) というエラーが発生する可能性がありました。 #44065 (Vitaly Baranov)。

ClickHouse リリース 22.11, 2022-11-17

後方互換性のない変更

  • JSONExtract ファミリーの関数は、指定された型への変換を試みるようになりました。 #41502 (Márcio Martins)

新機能

  • ClickHouse Keeper とのセッションが失われた場合に、ReplicatedMergeTree への INSERT 実行中のリトライをサポートするようになりました。耐障害性の向上に加え、ユーザーエクスペリエンスの改善、具体的には Keeper が再起動された場合(たとえばアップグレードによる再起動など)でも、INSERT 実行中のユーザーにエラーを返さないことを目的としています。 #42607 (Igor Nikonov)。
  • HudiDeltaLake のテーブルエンジンを追加しました。読み取り専用で、S3 上にあるテーブルにのみ使用できます。 #41054 (Daniil Rubin, Kseniia Sumarokova).
  • テーブル関数 hudideltaLake を追加しました。 #43080 (flynn).
  • 複合時間間隔のサポート。1. Interval に対して加算、減算、符号反転の各演算が利用可能になりました。Interval の型が異なる場合、それらの型の Tuple に変換されます。2. Interval の Tuple を Date/DateTime フィールドに加算または減算できるようになりました。3. 異なる型を含む Interval の解析を追加しました。たとえば INTERVAL '1 HOUR 1 MINUTE 1 SECOND' のような形式です。 #42195Nikolay Degterinsky)。
  • ファイルシステムおよび S3 の再帰的なディレクトリ走査用に ** グロブパターンのサポートを追加しました。#36316 を解決します。#42376SmitaRKulkarni)。
  • write-once-read-many 操作向けの s3_plain ディスクタイプを導入しました。s3_plain ディスク向けに MergeTree テーブルの ATTACH を実装しました。 #42628 (Azat Khuzhin).
  • 適用された行レベルポリシー情報を system.query_log に追加しました。 #39819 (Vladimir Chebotaryov).
  • ClickHouse Keeper でスナップショットを手動作成するための 4 文字コマンド csnp を追加しました。さらに、特定のノードの Raft 情報(例:最後に作成されたスナップショットのインデックス、最後にコミットされたログのインデックス)を取得するための lgif を追加しました。 #41766 (JackyWoo)。
  • Apache Spark と同様の ascii 関数を追加しました: https://spark.apache.org/docs/latest/api/sql/#ascii#42670李扬)。
  • モジュロ演算に基づき常に非負の結果を返す関数 pmod を追加しました。 #42755 (李扬)。
  • 関数 formatReadableDecimalSize を追加。#42774Alejandro)。
  • Apache Spark や Impala の rand 関数と類似した関数 randCanonical を追加しました。この関数は、[0, 1) 区間で一様分布に従う、互いに独立同分布な疑似乱数値を生成します。#43124 (李扬)。
  • 関数 displayName を追加し、#36770 を解決しました。#37681hongbin)。
  • パーティション全体に対してのみ古いパーツを最適化するための min_age_to_force_merge_on_partition_only 設定を追加。 #42659 (Antonio Andelic).
  • 任意の構造化された名前付きコレクション、アクセス型、および system.named_collections に対する汎用実装を追加しました。#43147Kseniia Sumarokova)。

パフォーマンスの改善

  • 文字列プレフィックスに対する条件であれば、match 関数がインデックスを利用できるようになりました。これにより #37333 がクローズされました。#42458clarkcaoliu)。
  • AND および OR 演算子が連続している場合の処理を高速化しました。#42214Zhiguo Zhou)。
  • LineAsString 入力フォーマットに対して並列パースをサポートしました。これによりパフォーマンスがわずかに向上します。これにより #42502 がクローズされました。#42780Kruglov Pavel)。
  • ClickHouse Keeper のパフォーマンス改善: 複数の異なるノードが未コミット状態を持つケースで、コミット処理の性能を向上しました。フォロワーノードが十分な速度で同期に追いつけないケースの改善に役立ちます。#42926Antonio Andelic)。
  • NOT LIKE 'prefix%' のような条件でプライマリインデックスを利用できるようになりました。#42209Duc Canh Le)。

実験的機能

  • 他の型の内部で Object 型をサポートしました(例: Array(JSON))。#36969Anton Popov)。
  • MaterializedMySQL において、MySQL binlog の SAVEPOINT イベントを無視するようにしました。#42931zzsmdfj)。MaterializedMySQL 内での SAVEPOINT クエリも無視するようにしました。#43086Stig Bakken)。

改善

  • 小さな LIMIT を指定した単純なクエリでは、読み取る行数の推定値が正しく算出されるようになり、しきい値が正しくチェックされます。これにより #7071 がクローズされました。#42580Han Fei)。
  • INSERT VALUES クエリでインタラクティブなパラメータをサポートしました。 #43077 (Nikolay Degterinsky).
  • system.table_functions に新しいフィールド allow_readonly を追加し、readonly モードでテーブル関数を使用できるようにしました。 #42414 を解決します。Implementation: * システムテーブル system.table_functions に新しいフィールド allow_readonly を追加しました。 * 新しいフィールド allow_readonly を使用して、readonly モードでテーブル関数を使用できるように更新しました。Testing: * filesystem 向けのテスト tests/queries/0_stateless/02473_functions_in_readonly_mode.sh を追加しました。Documentation: * Table Functions に関する英語ドキュメントを更新しました。 #42708 (SmitaRKulkarni).
  • system.asynchronous_metrics に組み込みドキュメントが追加されました。このドキュメントは Prometheus にもエクスポートされます。cache ディスクに関するメトリクスで発生していたエラーを修正しました ― それらが、すべての cache ディスクではなく、任意の 1 つのキャッシュディスクだけに対して計算されていました。これにより #7644 がクローズされました。 #43194 (Alexey Milovidov)。
  • スロットリングアルゴリズムをトークンバケット方式に変更しました。 #42665 (Sergei Trifonov).
  • system.query_log/var/log/clickhouse-server/*.log の両方およびエラーメッセージ内で、パスワードおよびシークレットキーがマスクされるようになりました。 #42484 (Vitaly Baranov).
  • 取得されたパーツに対して、レプリケーション遅延の増大を防ぐため、他のパーツでカバーされている部分を削除するようにしました。 #39737 (Azat Khuzhin).
  • /dev/tty が利用可能な場合、clickhouse-client および clickhouse-local の進捗は STDERR に書き込まず、端末に直接表示されます。これにより、STDERR がファイルにリダイレクトされている場合でも進捗を確認でき、そのファイルが端末のエスケープシーケンスで汚されることがありません。進捗は --progress false で無効にできます。これにより #32238 がクローズされました。 #42003Alexey Milovidov)。
  • Base64 符号化関数に FixedString 型入力のサポートを追加。 #42285 (ltrk2).
  • system.detached_partsbytes_on_diskpath カラムを追加しました。#42264 をクローズします。#42303chen)。
  • テーブル関数で挿入テーブルの構造を利用する処理を改善しました。use_structure_from_insertion_table_in_table_functions 設定に新しい値 2 が追加され、この値を指定すると ClickHouse が挿入テーブルの構造を利用できるかどうかを自動的に判定するようになりました。#40028 をクローズ。#42320Kruglov Pavel)。
  • INSERT FROM INFILE で進捗が表示されない問題を修正。#42548 をクローズ。#42634 (chen)。
  • 関連する関数で返されるトークン数の上限を指定できるようにするため、関数 tokens をリファクタリング(デフォルトでは無効)。 #42673 (李扬)。
  • formatDateTime 関数および FROM_UNIXTIME 関数で Date32 型の引数を使用できるようにしました。 #42737 (Roman Vasin)
  • tzdata を 2022f に更新。メキシコは、米国国境付近を除き今後はサマータイム(DST)を採用しません: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html。チワワ州は 2022-10-30 から通年で UTC-6 に移行します。フィジーもサマータイムの適用を終了しました。詳細は https://github.com/google/cctz/pull/235 および https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209 を参照してください。 #42796 (Alexey Milovidov)。
  • 非同期挿入用の FailedAsyncInsertQuery イベントメトリクスを追加。 #42814Krzysztof Góralski)。
  • クエリプランにおいて read-in-order 最適化を実装しました。これはデフォルトで有効になっています。以前の AST ベースのバージョンを使用するには、query_plan_read_in_order = 0 を設定してください。#42829 (Nikolai Kochetov)。
  • S3 へのバックアップ時に、S3 のマルチパートアップロードのパート数上限(最大 10 000 個)に達してエラーが発生するのを避けるため、アップロードパートのサイズを指数関数的に大きくするようにしました。 #42833 (Vitaly Baranov).
  • マージタスクが継続的にビジー状態でディスク容量が不足していると、完全に期限切れとなったパーツを選択して削除できず、その結果としてディスク容量が不足したままになります。私の考えでは、パーツ全体が期限切れになった場合、TTL を正常に実行するための前提条件として追加のディスク容量を要求すべきではありません。#42869 (zhongyuankai).
  • oss 関数と OSS テーブルエンジンを追加(ユーザーにとって便利)。oss は S3 と完全に互換性があります。 #43155 (zzsmdfj).
  • system.asynchronous_metrics テーブル用に収集する OS 関連情報のエラー報告を改善しました。 #43192 (Alexey Milovidov).
  • INFORMATION_SCHEMA テーブルを変更し、ClickHouse が MySQL 互換プロトコルを使用して自身に接続できるようにしました。エイリアスではなく列を追加しました(#9769 に関連)。これにより、さまざまな MySQL クライアントとの互換性が向上します。#43198Filatenkov Artur)。
  • Power BI が MySQL プロトコル経由で接続する際の互換性を確保するため、いくつかの関数を追加しました #42612Filatenkov Artur)。
  • 変更時のダッシュボードの使い勝手を向上 #42872 (Vladimir C).

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

  • 各 pull request および master への各 commit ごとに SQLancer を実行するようにしました。SQLancer は、論理バグの自動検出に特化したオープンソースのファジングツールです。#42397 (Ilya Yatsishin).
  • zlib-ng を最新バージョンに更新しました。#42463 (Boris Kuschel).
  • Jepsen を用いた ClickHouse server のテストをサポートしました。ちなみに、すでに ClickHouse Keeper を Jepsen でテストするサポートはありました。この pull request により、そのサポートが Replicated テーブルに拡張されます。#42619 (Antonio Andelic).
  • clang-tidy の結果キャッシュに https://github.com/matus-chochlik/ctcache を使用します。#42913 (Mikhail f. Shiryaev).
  • 修正前は、ユーザー定義の設定ファイルは RPM によって $file.rpmsave として保存されていました。この PR でこの挙動を修正し、パッケージによってユーザーのファイルが置き換えられないようにします。#42936 (Mikhail f. Shiryaev).
  • Ubuntu Docker イメージからいくつかのライブラリを削除しました。#42622 (Alexey Milovidov).

バグ修正(公式の stable または prestable リリースにおけるユーザーから見て分かる誤動作)

  • エイリアスの AST をクローンするように normaliser を更新しました。これにより #42452 が解決しました。実装内容: * 置き換える際にエイリアス AST をクローンするよう、QueryNormalizer を更新しました。以前は同じものを単に代入していたため、同じ親が再度挿入されることになり、LogicalExpressinsOptimizer で例外が発生していました。 * このバグは新しい analyser(allow_experimental_analyzer)では発生しないため、それについての変更はありません。この問題に対するテストを追加しました。#42827 (SmitaRKulkarni).
  • Lazy データベースのテーブルをバックアップする際の競合状態を修正。 #43104 (Vitaly Baranov).
  • skip_unavailable_shards の修正:s3Cluster テーブル関数で動作していなかった問題を修正しました。 #43131 (chen)。
  • s3Cluster におけるスキーマ推論を修正し、hdfsCluster を改善しました。 #41979 (Kruglov Pavel)
  • URL テーブルエンジン / テーブル関数から読み取る際の再試行処理を修正しました(再試行可能なエラーが必要以上に多く再試行される可能性があり、再試行不可能なエラーはコード内のアサーション失敗を引き起こしていました)。 #42224 (Kseniia Sumarokova).
  • DNS および c-ares 関連のセグメンテーションフォルトが報告され、修正されました。 #42234 (Arthur Passos)。
  • PK 解析(単調性チェック)中に発生する可能性のある LOGICAL_ERROR Arguments of 'plus' have incorrect data types を修正しました。最初の引数が定数である単調な二項関数に対する PK 解析の誤りを修正しました。 #42410 (Nikolai Kochetov).
  • Nullable 内に含めることができないキー型に対するキー解析の誤りを修正しました。これにより #42456 が解決されます。#42469Amos Bird)。
  • 設定名のタイプミスを修正し、input_format_csv_use_best_effort_in_schema_inference 設定使用時にスキーマ推論キャッシュが誤って利用されていた問題を修正しました。#41735 をクローズ。#42536Kruglov Pavel)。
  • データ型が LowCardinality の場合に誤ったヘッダーで Set を作成してしまう問題を修正。 #42460 をクローズ。 #42579flynn)。
  • (U)Int128(U)Int256 の値が PREWHERE で正しくチェックされるようになりました。 #42605 (Antonio Andelic).
  • セグメンテーションフォールトを引き起こす可能性のあった functions パーサーのバグを修正。 #42724 (Nikolay Degterinsky)。
  • truncate table におけるロック機構を修正しました。 #42728 (flynn).
  • ファイルが存在しない場合(または、最終的に同じエラーが発生する可能性のある OPTIMIZE TABLE FINAL 実行時)に web ディスクで発生しうるクラッシュを修正しました。 #42767 (Azat Khuzhin).
  • system.session_log における auth_type のマッピングを、列挙値に SSL_CERTIFICATE を含めることで修正しました。 #42782 (Miel Donkers)。
  • ASAN ビルド時に Create User クエリパーサで発生する stack-use-after-return を修正。 #42804 (Nikolay Degterinsky).
  • シンボルが 16 バイト境界をまたいでいた場合の lowerUTF8 / upperUTF8 の動作を修正しました(文字列が 16 バイトより長い場合に非常によく発生するケース)。 #42812 (Azat Khuzhin).
  • 不正な形式の入力が与えられた場合の誤動作を防ぐため、LZ4 伸長ルーチンに追加の境界チェックを導入しました。 #42868 (Nikita Taranov)。
  • クエリキャンセル時にまれに発生する可能性のあったハングを修正。 #42874 (Azat Khuzhin).
  • 複数の OR 条件を含むハッシュ結合での誤った動作を修正し、#42832 をクローズ。 #42876Vladimir C)。
  • 'three table join' に対して select if as を実行するとヌルポインタが生成されます。例えば、次の SQL クエリです: #42883 (zzsmdfj)。
  • Cluster Discovery における MemorySanitizer のレポートを修正し、#42763 をクローズ。#42905Vladimir C)。
  • 空文字列の場合の DateTime スキーマの推論を改善。 #42911 (Kruglov Pavel).
  • Projection を使用できるにもかかわらず、実際には利用可能な projection が存在しない場合にまれに発生していた NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。これにより #42771 が修正されます。このバグは https://github.com/ClickHouse/ClickHouse/pull/25563 にて導入されたものです。#42938Amos Bird)。
  • テーブルに DATETIME 型が含まれている場合の PostgreSQL データベースエンジンでの ATTACH TABLE を修正しました。#42817 をクローズ。#42960Kseniia Sumarokova)。
  • lambda の構文解析を修正。#41848 をクローズ。#42979Nikolay Degterinsky)。
  • NULL 許可キーがハイパー長方形の中間に現れる場合に、キーの解析を誤る問題を修正します。これにより #43111 が修正されます。 #43133 (Amos Bird)。
  • 細工された集約関数状態のデシリアライズ処理における複数のバッファーオーバーリードを修正しました。 #43159 (Raúl Marín).
  • NULL および const Nullable 引数が指定された場合の if 関数の動作を修正。#43069 をクローズ。#43178Kruglov Pavel)。
  • 'best effort' アルゴリズムで DateTime をパースする際に発生する10進数演算のオーバーフローを修正。#43061 をクローズ。#43180Kruglov Pavel)。
  • git-import ツールによって生成される indent フィールドの値が誤って計算されていました。詳しくは https://clickhouse.com/docs/getting-started/example-datasets/github/ を参照してください。 #43191Alexey Milovidov)。
  • サブクエリやキャストと組み合わせた Interval 型での予期しない挙動を修正しました。 #43193 (jh0x).

ClickHouse リリース 22.10, 2022-10-25

後方互換性のない変更

  • キャッシュ関連コマンドの名前を変更しました: show caches -> show filesystem caches, describe cache -> describe filesystem cache#41508 (Kseniia Sumarokova)。
  • LIVE VIEW に対する WITH TIMEOUT セクションのサポートを削除しました。これにより #40557 がクローズされます。 #42173 (Alexey Milovidov)。
  • クライアントのプロンプトにおける {database} マクロのサポートを削除しました。データベースが未指定の場合に正しく表示されず、USE ステートメントでも更新されていませんでした。これにより #25891 がクローズされます。 #42508 (Alexey Milovidov)。

新機能

  • コンポーズ可能なプロトコル設定が追加されました。これにより、プロトコルごとに異なる待ち受けホストを設定できるようになりました。PROXYv1 などのプロトコルラッパーは、他の任意のプロトコル(TCP、TCP secure、MySQL、Postgres)の上に重ねて設定できます。 #41198 (Yakov Olkhovskiy)。
  • バックアップ先の新しい種別として S3 を追加しました。既存のパスおよびデータ構造をそのまま利用する S3 への BACKUP をサポートします。 #42333 (Vitaly Baranov), #42232 (Azat Khuzhin).
  • 指定した分布に従う乱数を生成するための関数(randUniformrandNormalrandLogNormalrandExponentialrandChiSquaredrandStudentTrandFisherFrandBernoullirandBinomialrandNegativeBinomialrandPoisson)を追加しました。これにより #21834 が解決されました。 #42411 (Nikita Mikhaylov)。
  • ClickHouse Keeper の改善点: スナップショットを S3 にアップロードするサポートを追加しました。S3 に関する情報は keeper_server.s3_snapshot 内で定義できます。 #41342 (Antonio Andelic)。
  • 正規分布に従う観測値からなる複数のグループに対して統計的検定を行い、すべてのグループの平均が同じかどうかを判定するための集約関数 analysisOfVariance (anova) を追加しました。元の PR は #37872#42131Nikita Mikhaylov)。
  • 設定 max_temporary_data_on_disk_size_for_user / max_temporary_data_on_disk_size_for_query を使用して、ディスク上に保存される一時データの容量を制限できるようにしました。 #40893 (Vladimir C).
  • JSONObjectEachRow フォーマットでオブジェクト名をカラム値として書き込みおよび解析できるようにする設定 format_json_object_each_row_column_for_object_name を追加しました。#41703Kruglov 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 ヘッダーに、lz4bz2snappy 圧縮方式のサポートを追加。 #42071 (Nikolay Degterinsky).
  • Morton Coding (ZCurve) のエンコード/デコード関数を追加。 #41753 (Constantine Peresypkin).
  • SET setting_name = DEFAULT をサポートするようになりました。 #42187 (Filatenkov Artur).

実験的機能

  • allow_experimental_analyzer 設定のもとで、クエリ解析およびプランニング用の新しいインフラストラクチャを追加しました。#31796Maksim Kita)。
  • Kusto Query Language の初期実装を追加しました。まだ使用しないでください。#37961Yong Wang)。

パフォーマンスの改善

  • 「Too many parts」しきい値を緩和しました。これにより #6551 がクローズされます。平均パートサイズが十分に大きい(少なくとも 10 GiB)場合、ClickHouse は 1 つのパーティション内により多くのパートを許可するようになりました。これにより、ディスクシェルフやオブジェクトストレージを利用することで、単一サーバー上の単一テーブルの単一パーティションにペタバイト単位のデータを保持することが可能になります。#42002Alexey Milovidov)。
  • 必要なスタックサイズを小さくするため、演算子優先順位用の要素パーサーを実装しました。#34892Nikolay Degterinsky)。
  • DISTINCT in order 最適化において、データストリームのソート特性を活用するようにしました。この改善により、該当する場合には DISTINCT に対して順序付き読み取りが可能になります(以前は DISTINCT 内のカラムに対して ORDER BY を指定する必要がありました)。#41014Igor Nikonov)。
  • ColumnVector: UInt8 インデックスを AVX512VBMI で最適化しました。#41247Guo Wangyang)。
  • ThreadGroupStatus::mutex のロック競合を最適化しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上での SSB(Star Schema Benchmark)のパフォーマンス実験では、この変更により、すべてのサブケースにおける QPS の幾何平均が 2.95 倍 向上することが示されました。#41675Zhiguo Zhou)。
  • AArch64 ビルドに ldapr 機能を追加しました。これは Graviton 2+、Azure および GCP インスタンスでサポートされています。clang-15 に 最近 追加されたものです。#41778Daniel Kutenin)。
  • 文字列比較において、一方の引数が空の定数文字列である場合のパフォーマンスを改善しました。#41870Jiebin Sun)。
  • いくつかのケースで Aggregate State を共有できるように、ColumnAggregateFunction の insertFrom を最適化しました。#41960flynn)。
  • azure_blob_storage ディスクへの書き込みを高速化しました(各バッファサイズごとにブロックを書き込むのではなく、max_single_part_upload_size を尊重するようにしました)。この非効率性は #41754 で指摘されていました。#42041Kseniia Sumarokova)。
  • 無駄を避けるため、process list と query_log 内のスレッド ID を一意にしました。#42180Alexey Milovidov)。
  • 要求された読み取り範囲がキャッシュ設定 bypass_cache_threashold で定義されたしきい値を超える場合に、キャッシュを完全にスキップ(キャッシュへのダウンロードおよびキャッシュデータの読み取りの両方を行わない)することをサポートしました(enable_bypass_cache_with_threshold の有効化が必要)。#42418Han Shukai)。これはローカルディスクが遅い場合に有効です。

改善

  • 設定 allow_implicit_no_password を追加しました。allow_no_password と組み合わせることで、IDENTIFIED WITH no_password が明示的に指定されていない限り、パスワードなしのユーザーを作成することを禁止します。 #41341 (Nikolay Degterinsky).
  • Embedded Keeper は常にバックグラウンドで起動するようになり、ClickHouse はクォーラムを達成しなくても起動できるようになります。 #40991 (Antonio Andelic).
  • 以前の接続が期限切れになった場合に、新しい ZooKeeper への接続を再確立する処理を、より即応的になるよう改善しました。以前は、デフォルトで毎分実行されるタスクがあり、そのためテーブルがその間およそ1分間読み取り専用状態になる可能性がありました。 #41092 (Nikita Mikhaylov)。
  • これで、プロジェクションをゼロコピー レプリケーション(zero-copy replication は本番環境向けではない機能です)と併用できるようになりました。 #41147 (alesapin).
  • サブクエリ内での (EXPLAIN SELECT ...) 構文をサポートしました。SELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col) のようなクエリが有効になりました。#40630 (Vladimir C)。
  • async_insert_max_data_size または async_insert_busy_timeout_ms をクエリごとのスコープで変更できるようにしました。たとえば、ユーザーがデータをまれにしか挿入せず、デフォルト設定を調整するためのサーバー設定にアクセスできない場合などに役立ちます。 #40668 (Nikita Mikhaylov).
  • リモートファイルシステムからの読み取り処理を改善し、読み取り/書き込み用のスレッドプールサイズを設定可能にしました。 #41070 をクローズしました。 #41011Kseniia Sumarokova)。
  • WindowTransform/arratReduce*/initializeAggregation/aggregate 関数のバージョン管理において、すべてのコンビネータの組み合わせをサポートしました。以前は、ForEach/Resample/Map のようなコンビネータはこれらの箇所では動作せず、使用すると State function ... inserts results into non-state column のような例外が発生していました。 #41107 (Kruglov Pavel).
  • 復号に失敗した場合(例: 誤ったキーで復号した場合)に例外をスローする代わりに NULL を返す tryDecrypt 関数を追加しました。 #41206 (Duc Canh Le).
  • 各ディスクごとの予約されていない空き容量を確認できるように、system.disks テーブルに unreserved_space カラムを追加しました。 #41254 (filimonov).
  • テーブル関数の引数で S3 の Authorization ヘッダーをサポートしました。 #41261 (Kseniia Sumarokova).
  • Keeper および内部 ZooKeeper クライアントで MultiRead のサポートを追加しました(ZooKeeper プロトコルの拡張であり、ClickHouse Keeper でのみ利用可能です)。 #41410 (Antonio Andelic).
  • IN 演算子で decimal 型と浮動小数点リテラルを比較するためのサポートを追加。 #41544 (liang.huang).
  • キャッシュ設定で、1TB のような人間が読みやすいサイズ指定を許可します。 #41688 (Kseniia Sumarokova)。
  • ClickHouse は、キャッシュが非同期に更新されるまでの一定期間(デフォルトでは 15 秒間)、古い DNS エントリをキャッシュしてしまう可能性がありました。この期間中でも、ClickHouse は接続の確立を試みてエラーを発生させることがありました。この挙動は修正されました。 #41707 (Nikita Mikhaylov)。
  • clickhouse-client/clickhouse-local 向けに、fzfsk のようなユーティリティを用いたインタラクティブな履歴検索を追加しました(動作をさらに細かく設定するには FZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONS を使用できます)。 #41730 (Azat Khuzhin).
  • 無効な証明書を提示するセキュアサーバーへの接続を続行できるクライアントを、'--accept-certificate' フラグを指定した場合にのみ許可するようにしました。 #41743 (Yakov Olkhovskiy).
  • 既存の関数 tryBase64Decode と同様の関数 tryBase58Decode を追加。 #41824 (Robert Schulze).
  • 異なるプライマリキーを持つパーティションを置き換える場合のフィードバックを改善しました。#34798 を修正しました。#41838Salvatore)。
  • 並列パースを修正しました。segmentator が max_block_size を確認するようになりました。これにより、並列パース時かつ LIMIT が小さい場合に発生していたメモリの過剰割り当てが解消されました。 #41852 (Vitaly Baranov)。
  • TABLE_IS_DROPPED 例外が system テーブルに対する SELECT クエリの実行中に発生し、かつ無視された場合には、その例外を system.errors に追加しないようにしました。 #41908 (AlfVII).
  • オプション enable_extended_results_for_datetime_functions を改善し、関数 toStartOfDaytoStartOfHourtoStartOfFifteenMinutestoStartOfTenMinutestoStartOfFiveMinutestoStartOfMinute および timeSlot が戻り値の型として DateTime64 を返すようにしました。 #41910 (Roman Vasin)。
  • テキストフォーマットに対する DateTime 型推論を改善しました。これにより、date_time_input_format 設定が考慮され、数値をタイムスタンプとして扱って日時を推論しようとしなくなりました。 #41389 をクローズしました。 #42206 をクローズしました。 #41912Kruglov Pavel)。
  • perform_ttl_move_on_insert = false のときに挿入を行う際に出ていた紛らわしい警告を削除しました。 #41980 (Vitaly Baranov)。
  • ユーザーが count(*) と同様に countState(*) を書けるようにしました。これにより #9338 がクローズされました。#41983Amos Bird)。
  • rankCorr のサイズのオーバーフローを修正。 #42020 (Duc Canh Le).
  • より使いやすいレポートのために、Sentry の設定で任意の文字列を環境名として指定できるオプションを追加しました。 #42037 (Nikita Mikhaylov)。
  • CSV からの範囲外の Date 値のパース処理を修正。 #42044 (Andrey Zvonov).
  • parseDataTimeBestEffort は、日付と時刻の間にカンマを含む形式をサポートするようになりました。 #42038 をクローズしました。 #42049 (flynn).
  • ReplicatedMergeTree におけるステイル(stale)レプリカの復旧プロセスを改善しました。失われたレプリカが、正常なレプリカには存在しない一部のパーツを保持しているものの、それらのパーツが正常なレプリカのレプリケーションキュー上では将来的に生成される予定になっている場合、失われたレプリカはそれらのパーツを切り離さずに保持するようになりました。 #42134 (Alexander Tokmakov)。
  • date_diff 関数で Date32 型の引数を使用できるようにしました。開始日時が Unix エポックより前で終了日時が Unix エポックより後の場合に DateTime64 型の引数を使用すると発生していた date_diff 関数の不具合を修正しました。 #42308 (Roman Vasin).
  • Minio に大きなパートをアップロードする際、'Complete Multipart Upload' に時間がかかる場合があります。Minio は 10 秒ごとにハートビートを送信します(https://github.com/minio/minio/pull/7198 を参照)。しかし ClickHouse では送信/受信タイムアウトがデフォルトで 5 秒に設定されているため、その前にタイムアウトしてしまいます。#42321filimonov)。
  • Decimal などの複合型を含む集計状態型に対して、ごくまれに不正なキャストが行われる問題を修正しました。これにより #42408 が修正されました。 #42417 (Amos Bird).
  • dateName 関数で Date32 型の引数を使用できるようにしました。 #42554 (Roman Vasin).
  • インデックス解析時に、NULL リテラルを含むフィルタが使用されるようになりました。#34063#41842 (Amos Bird)。
  • 範囲内のすべてのパーツが指定した閾値より古い場合に、それらのパーツをマージします。閾値は min_age_to_force_merge_seconds で設定できます。この変更により #35836 がクローズされます。 #42423Antonio Andelic)。これは、ロジックの大部分を実装した @fastio による #39550i の続きです。
  • allow_experimental_analyzer 設定のもとで利用されるクエリ解析およびプランニング用の新しいインフラストラクチャを追加しました。 #31796 (Maksim Kita).
  • 切断された keeper 接続からの復旧にかかる時間を短縮しました。 #42541 (Raúl Marín).

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

  • テーブル定義用のファザー(fuzzer)を追加しました。#40096Anton Popov)。これは、今年これまでで最大の ClickHouse テストまわりの進展です。
  • ClickHouse Cloud サービスのベータ版をリリースしました:https://console.clickhouse.cloud/。これは ClickHouse を利用する最も簡単な方法です(単一コマンドでのインストールよりもわずかに簡単です)。
  • AST Fuzzer に WHERE 句生成のサポートを追加し、ORDER BY および WHERE 句を追加・削除できるようにしました。#38519Ilya Yatsishin)。
  • Aarch64 バイナリは、2016 年にリリースされた ARMv8.2 以上を必要とするようになりました。特に、ARM LSE、すなわちネイティブなアトミック操作を利用できるようになります。また、古い ARMv8.0 ハードウェア(例:Raspberry Pi 4)向けにバイナリをコンパイルできるようにするため、CMake のビルドオプション "NO_ARMV81_OR_HIGHER" を追加しました。#41610Robert Schulze)。
  • Musl で ClickHouse をビルドできるようにしました(既にサポートしていましたが壊れていた部分を、小規模な変更で修正)。#41987Alexey Milovidov)。
  • インストール時に、存在しないファイルに対して sed コマンドを実行して「ファイルが見つかりません」エラーになることを避けるため、$CLICKHOUSE_CRONFILE ファイルのチェックを追加しました。#42081Chun-Sheng, Li)。
  • 新しいタイムゾーン変更に対応するため、cctz を 2022e に更新しました。パレスチナでの切り替えは、現在は土曜日の 02:00 になりました。ウクライナの 3 つのゾーンを 1 つに簡素化しました。ヨルダンとシリアは +02/+03 と DST の組み合わせから、通年 +03 に切り替えました。(https://data.iana.org/time-zones/tzdb/NEWS)。これにより #42252 がクローズされます。#42327Alexey Milovidov)。#42273Dom Del Nano)。
  • BLAKE3 ハッシュ関数ライブラリを例として、ClickHouse に Rust コードのサポートを追加しました。#33435BoloniniD)。

バグ修正(公式 stable または prestable リリースにおけるユーザーから見える誤動作)

  • 大きな整数型を扱う LowCardinality で正しい集約メソッドを選択するようにした。 #42342 (Duc Canh Le).
  • web ディスクに関する複数の不具合修正。 #41652 (Kseniia Sumarokova).
  • https_port が設定に存在しない場合に docker run コマンドが失敗する不具合を修正します。 #41693 (Yakov Olkhovskiy).
  • サーバーのシャットダウン時や SYSTEM STOP MERGES クエリ実行時にミューテーションが正しくキャンセルされず、キャンセル処理に長時間かかる可能性がありましたが、この問題は修正されました。 #41699 (Alexander Tokmakov).
  • ORDER BY または GROUP BY で、ソートキーのプレフィックスに含まれる列を単調関数でラップし、かつ「read in order」最適化(設定 optimize_read_in_order および optimize_aggregation_in_order)を有効にしている場合に、クエリ結果が誤ったものになる問題を修正しました。 #41701 (Anton Popov).
  • optimize_monotonous_functions_in_order_by 設定が有効な状態で Merge テーブルに対する SELECT を実行した際に発生しうるクラッシュを修正。#41269 を解決。#41740Nikolai Kochetov)。
  • 極めてまれなケースですが、あるパートを破損としてdetachした直後にレプリカが再起動された場合に発生し得る「Part ... intersects part ...」エラーを修正しました。 #41741 (Alexander Tokmakov).
  • 軽量削除で使用するために予約されているカラム名 _row_exists を持つ MergeTree テーブルの作成または変更を許可しないようにしました。#41716 を修正。#41763Jianmei Zhang)。
  • 一部の HTTP レスポンスで CORS ヘッダーが欠落する不具合を修正。 #41792 (Frank Chen).
  • 20.3 以前のバージョンで作成され、一度も ALTER されていない ReplicatedMergeTree テーブルは、22.9 では起動に失敗する可能性がありましたが、この問題は修正されました。#41742 を修正。#41796 (Alexander Tokmakov)。
  • バッチ送信が何らかの理由で失敗すると、自動的に復旧することはできません。適切に処理されない場合はデータが蓄積し、出力されるエラーメッセージがどんどん長くなって、HTTP スレッドがブロックされてしまいます。 #41813 (zhongyuankai).
  • compressed marks 設定を使用している compact parts を修正。 #41783 および #41746 を修正。 #41823alesapin)。
  • 古いバージョンの Replicated データベースには、[Zoo]Keeper 内に特別なマーカーがありません。特別なマークの有無ではなく、そのノードに何らかの不明なデータが含まれているかどうかだけを確認する必要があります。#41875Nikita Mikhaylov)。
  • fs キャッシュで発生する可能性のある例外を修正。 #41884 (Kseniia Sumarokova).
  • S3 テーブル関数の use_environment_credentials を修正。 #41970 (Kseniia Sumarokova).
  • ReplicatedMergeTree テーブルのレプリケーション開始を妨げる可能性があった、壊れたパーツのデタッチ時の「Directory already exists and is not empty」エラーを修正しました。 #40957 を解決します。 #41981 (Alexander Tokmakov)。
  • toDateTime64 は、負の整数および浮動小数点数の引数に対して同一の出力を返すようになりました。 #42025 (Robert Schulze)。
  • azure_blob_storage への書き込みを修正。#41754 を一部解決。#42034Kseniia Sumarokova)。
  • 特定の bzip2 ファイルにおける bzip2 デコード処理の問題を修正。#42046 (Nikolay Degterinsky)。
  • 拡張範囲の開始(1900 年 1 月)において、設定 enable_extended_results_for_datetime_functions = 1 有効時の SQL 関数 toLastDayOfMonth を修正しました。- 拡張範囲の終了(2299 年 12 月)において、設定 "enable_extended_results_for_datetime_functions = 1" 有効時の SQL 関数 "toRelativeWeekNum()" を修正しました。- 不要なインデックス計算を避けることで、SQL 関数 "toISOYear()"、"toFirstDayNumOfISOYearIndex()" および "toYearWeekOfNewyearMode()" のパフォーマンスを改善しました。#42084 (Roman Vasin)。
  • 各テーブルごとのフェッチの最大サイズが誤って 8 に設定されており、プールサイズの方が大きくなる可能性がありました。現在は、テーブルごとのフェッチ最大サイズはプールサイズと同じ値になりました。 #42090 (Nikita Mikhaylov).
  • テーブル間の依存関係を壊さずにテーブルを削除できるかどうかをチェックする前に、テーブルがシャットダウンされ、ディクショナリがデタッチされてしまうことがありましたが、これを修正しました。 #41982 を修正。 #42106 (Alexander Tokmakov)。
  • remote_filesystem_read_method=read とファイルシステムキャッシュ使用時に発生していた重大な非効率性を修正。#42125 をクローズ。#42129 (Kseniia Sumarokova)。
  • use_hedged_requests = 0 の分散クエリで発生し得るタイムアウト例外を修正。 #42130 (Azat Khuzhin).
  • Date32 型と併用した場合における runningDifference 関数内部の軽微なバグを修正しました。以前は Date 型が使用されており、Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>' のような論理エラーを引き起こす可能性がありました。 #42143 (Alfred Xu).
  • ベースバックアップからの 4GB 超ファイルの再利用に関する不具合を修正。#42146 (Azat Khuzhin).
  • ソート順での DISTINCT が、ソートキーの先頭列に関数を含む場合に LOGICAL_ERROR で失敗します。 #42186 (Igor Nikonov).
  • aggregate_functions_null_for_empty 設定に関連するプロジェクションのバグを修正しました。このバグは非常にまれで、サーバーの設定ファイルで aggregate_functions_null_for_empty を有効にした場合にのみ発生します。これにより #41647 が解決されます。#42198Alexey Milovidov)。
  • Buffer テーブルからの降順での読み取り処理を修正。 #42236 (Duc Canh Le).
  • デフォルトプロファイルで background_pool_size 設定が行われている一方で background_merges_mutations_concurrency_ratio が設定されていない場合に、ClickHouse が起動しなくなる不具合を修正。 #42315 (nvartolomei).
  • テーブルスキーマと異なるカラムを持つパーツがアタッチされた状態で、そのパーツに対して ALTER UPDATE を実行すると、ディスク上の columns.txt メタデータが不正な状態になることがありました。そのようなパーツから読み取ろうとすると、エラーで失敗するか、不正なデータが返される可能性がありました。#42161 を修正しました。#42319Nikolai Kochetov)。
  • additional_table_filters の設定が Distributed ストレージに対して適用されていませんでした。#41692 を修正しました。 #42322 (Nikolai Kochetov).
  • クエリの終了/キャンセル処理時のデータレースを修正しました。これにより #42346 がクローズされます。 #42362 (Alexey Milovidov)。
  • これは、日付/時刻関数にリグレッションを導入した #40217 を差し戻します。#42367Alexey Milovidov)。
  • 偽 (falsy) 条件での join における assert cast を修正し、#42380 をクローズしました。#42407 (Vladimir C)。
  • Decimal データ型の処理で発生していたバッファオーバーフローを修正しました。これにより #42451 がクローズされました。 #42465 (Alexey Milovidov).
  • AggregateFunctionQuantile は、UInt128 列に対して正しく動作するようになりました。以前は、分位点の状態が UInt128 列を Int128 として解釈していたため、誤った結果につながる可能性がありました。 #42473 (Antonio Andelic).
  • Float32 以外のカラムに対する Annoy インデックスへの INSERT 時に発生していた bad_cast アサーションを修正。Annoy インデックスは実験的な機能です。 #42485 (Robert Schulze).
  • Date または DateTime 型と 128 または 256 ビット整数との算術演算で、未初期化のメモリ領域が参照されていました。 #42453. #42573 (Alexey Milovidov).
  • サーバーのアップグレード中に、パーティションキーにエイリアス関数名が含まれている場合に発生していた予期しないテーブルのロードエラーを修正。 #36379 (Amos Bird).

ClickHouse リリース 22.9, 2022-09-22

後方互換性のない変更

  • 20.3 以前から 22.9 以降へのアップグレードは、ReplicatedMergeTree テーブルが 1 つでも存在する場合、中間バージョンを経由して実施する必要があります。そうでない場合、新バージョンのサーバーは起動しません。 #40641 (Alexander Tokmakov).
  • 関数 accurate_Cast および accurate_CastOrNull を削除しました(これらは名前にアンダースコアが入る点で accurateCast および accurateCastOrNull と異なり、cast_keep_nullable 設定値の影響も受けません)。これらの関数はドキュメント化されておらず、テストもされておらず、使用もされておらず、必要でもありませんでした。コードの一般化の過程でたまたま残っていたものです。 #40682 (Alexey Milovidov).
  • すべての新しいテーブル関数がドキュメント化されることを保証するテストを追加しました。#40649 を参照してください。テーブル関数 MeiliSearchmeilisearch にリネームしました。 #40709 (Alexey Milovidov).
  • すべての新しい関数がドキュメント化されることを保証するテストを追加しました。#40649 を参照してください。関数 lemmatizesynonymsstem は誤って大文字小文字を区別しない動作になっていました。現在は大文字小文字を区別します。 #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 DISTINCTEXCEPT DISTINCT をサポートしました。 #40792 (Duc Canh Le).
  • 新しい入出力フォーマット JSONObjectEachRow を追加しました。フォーマット JSON/JSONCompact/JSONColumnsWithMetadata のインポートをサポートします。新しい設定 input_format_json_validate_types_from_metadata を追加し、メタデータ中のデータ型がヘッダーのデータ型と一致するかどうかをチェックするかを制御できるようにしました。新しい設定 input_format_json_validate_utf8 を追加しました。これを有効にすると、すべての JSON フォーマットで UTF-8 シーケンスが検証されます(デフォルトでは無効)。この設定は出力フォーマット JSON/JSONCompact/JSONColumnsWithMetadata には影響せず、これらは常に UTF-8 シーケンスを検証します(互換性のための例外です)。新しい設定 input_format_json_read_numbers_as_strings を追加し、String 列内の数値をパースできるようにしました(デフォルトでは無効)。新しい設定 output_format_json_quote_decimals を追加し、10 進数を二重引用符で囲んで出力できるようにしました(デフォルトでは無効)。また、データインポート時に、二重引用符で囲まれた 10 進数をパースできるようにしました。 #40910 (Kruglov Pavel).
  • DESCRIBE TABLE クエリでクエリパラメータの使用をサポートしました。 #40952 (Nikita Taranov).
  • Parquet の Time32/64 を DateTime64 に変換することでサポートしました。Parquet の Time32/64 は真夜中からの経過時間を表し、DateTime32/64 は実際の Unix タイムスタンプを表します。変換は単に 0 からのオフセットを行います。 #41333 (Arthur Passos).
  • Apache Datasketches に対する集合演算を実装しました。 #39919 (Fangyuan Deng). 注意: Apache Datasketches を使用する意味はなく、ClickHouse より劣っています。他システムとの連携用途でのみ意味があります。
  • テキストフォーマット(CSVTSV)読み取り時に、指定したファイルへエラーを記録できるようにしました。 #40516 (zjial).

実験的機能

  • Annoy に基づく ANN(近似最近傍)インデックスを追加しました。 #40818 (Filatenkov Artur). #37215 (VVMak).
  • 新しいストレージエンジン KeeperMap を追加しました。これは ClickHouse Keeper または ZooKeeper をキーバリューストアとして使用します。 #39976 (Antonio Andelic). このストレージエンジンは、少量のメタデータを保存することを目的としています。
  • インメモリデータパーツの改善として、完全に処理された WAL ファイルを削除するようにしました。 #40592 (Azat Khuzhin).

パフォーマンスの向上

  • marks とプライマリキーの圧縮を実装し、#34437 をクローズ。#37693zhongyuankai)。
  • スレッドプールを使用してマークを事前に読み込めるようにしました。load_marks_asynchronously 設定項目(デフォルト値: 0)で制御されます。#40821Kseniia Sumarokova)。
  • S3 上の仮想ファイルシステムは、AWS でのパフォーマンスを向上させるため、オブジェクト名をランダム化し、複数のパスプレフィックスに分散させて使用するようになります。 #40968 (Alexey Milovidov).
  • 単一レベルの集約結果を生成する際に max_block_size の値を考慮するようになりました。これにより、以下のクエリプランのステップをより多くのスレッドで実行できるようになります。 #39138 (Nikita Taranov).
  • ソフトウェア・プリフェッチは、ハッシュテーブルを用いる集計処理での操作を高速化するために使用されます。設定 enable_software_prefetch_in_aggregation で制御されており、デフォルトで有効です。 #39304 (Nikita Taranov)。
  • WHERE 句を適用した後にソートキーの一部のカラムが常に定数となる場合の optimize_read_in_order のサポートを改善しました。例えば、table のストレージ定義が MergeTree ORDER BY (a, b) の場合の SELECT ... FROM table WHERE a = 'x' ORDER BY a, b のようなクエリです。#38715 (Anton Popov)。
  • ソートの前に、full_sorting_join の結合済みストリーム同士を互いの内容に基づいてフィルタリングするようにしました。 #39418 (Vladimir C).
  • 空のリテラルの処理をスキップすることで、LZ4 の展開を最適化しました。 #40142 (Nikita Taranov).
  • 可能な場合は、clickhouse-server のメモリを経由してコピーするのではなく、ネイティブな copy を使用してバックアップ処理を高速化しました。 #40395 (alesapin).
  • 各 INSERT ブロックごとにストレージスナップショットを取得しないようにしました(パフォーマンスがわずかに向上します)。 #40638 (Azat Khuzhin).
  • 複数の Nullable 引数を取る集約関数向けにバッチ処理を実装しました。 #41058 (Raúl Marín)。
  • UniquesHashSet(たとえばディスクからの uniqState の読み取り)を高速化しました。 #41089 (Raúl Marín).
  • 非常に多くの列を持つテーブルで、compact parts の mutation を実行する際の大きなメモリ使用量を修正しました。 #41122 (lthaooo).
  • ARM 上で vectorscan ライブラリを有効化し、正規表現の評価を高速化します。 #41033 (Robert Schulze).
  • vectorscan を 5.4.8 にアップグレードし、正規表現(regexp)評価を高速化する多くのパフォーマンス最適化を取り込みました。 #41270 (Robert Schulze).
  • 非常に高い並列度での動作時に、VFS(S3 など)に対してローカルファイルシステムキャッシュをスキップしてしまっていた誤ったフォールバック動作を修正しました。 #40420 (Kseniia Sumarokova).
  • 行ポリシーのフィルタが常に false の場合、データを一切読み込まずに直ちに空の結果を返します。これにより #24012 が解決されました。#40740Amos Bird)。
  • Float データ型に対する並列ハッシュ JOIN が最適ではない場合がありました。改善しました。 #41183 (Alexey Milovidov).

改善

  • 起動時および ATTACH の呼び出し時には、ReplicatedMergeTree テーブルは ZooKeeper への接続が確立され、セットアップが完了するまで読み取り専用になります。 #40148 (Antonio Andelic)。
  • enable_extended_results_for_datetime_functions オプションを追加しました。このオプションを有効にすると、引数が Date32 または DateTime64 の場合、toStartOfYear、toStartOfISOYear、toStartOfQuarter、toStartOfMonth、toStartOfWeek、toMonday、toLastDayOfMonth 関数の結果を Date 型ではなく Date32 型で返します。それ以外の場合は従来どおり Date 型の結果が返されます。互換性のため、デフォルト値は '0' です。#41214Roman Vasin)。
  • セキュリティおよび安定性の観点から、CatBoost モデルはもはや ClickHouse サーバー内で評価されなくなりました。代わりに、評価は catboost ライブラリを読み込み、HTTP 経由でサーバープロセスと通信する、clickhouse-library-bridge という別プロセス内で行われるようになりました。関数 modelEvaluate()catboostEvaluate() に置き換えられました。 #40897 (Robert Schulze). #39629 (Robert Schulze).
  • ディスク上の一時データ向けメトリクスをさらに追加し、#40206 をクローズ。#40239Vladimir C)。
  • 設定オプション warning_supress_regexp を追加して #40330 をクローズ。#40548Vladimir C)。
  • kafka_num_consumers の制限を無効化できる設定を追加。#40331 をクローズ。#40670Kruglov Pavel)。
  • DELETE ... クエリで SETTINGS をサポートしました。#41533Kseniia Sumarokova)。
  • S3 ObjectStorage 向けに、S3 API コール単位で分割された詳細な S3 プロファイルイベント DiskS3*#41532 (Sergei Trifonov)。
  • system.asynchronous_metricsNumberOfDetachedPartsNumberOfDetachedByUserParts という 2 つの新しいメトリクスを追加。 #40779 (Sema Checherinda).
  • ODBC および JDBC テーブルで CONSTRAINT の利用を許可。 #34551 (Alexey Milovidov).
  • 元のクエリ内に複数回出現していない場合は、クエリのフォーマット時に SETTINGS を複数回出力しないように修正しました。 #38900 (Raúl Marín).
  • スレッド間のトレーシングにおける OpenTelemetry コンテキストの伝播を改善しました。 #39010 (Frank Chen).
  • ClickHouse Keeper: interserver_listen_host が指定されている場合にのみ Keeper にリスナーを追加するようにしました。 #39973 (Antonio Andelic).
  • エラー発生後の Replicated ユーザーアクセスストレージの復旧を改善。 #39977 (Vitaly Baranov).
  • EmbeddedRocksDB に TTL サポートを追加しました。 #39986 (Lloyd-Pottiger)。
  • clickhouse-obfuscator にスキーマ推論を追加し、--structure 引数の指定が不要になりました。 #40120 (Nikolay Degterinsky)。
  • Arrow フォーマットの辞書機能を改善・修正しました。 #40173 (Kruglov Pavel).
  • Date32DateTime64Date をより狭い型により自然に変換。正常な範囲外の値は、上限または下限の正常値に切り詰めて扱います。 #40217 (Andrey Zvonov).
  • View 上の Merge テーブルがインデックスを使用できなかった問題を修正しました。 #40233 (Duc Canh Le).
  • JSON サーバーログ用のカスタムキー名。 #40251 (Mallik Hassan).
  • 関数 throwIf がスローする例外に対して、カスタムエラーコードを設定できるようになりました。 #40319 (Robert Schulze)。
  • スキーマ推論キャッシュを改善し、スキーマが変わりうる format 設定を考慮するようにしました。 #40414 (Kruglov Pavel).
  • DateDateTime および DateTime64 としてパースできるようにしました。#36949 で提案された機能拡張を実装したものです。#40474Alexey Milovidov)。
  • 2022-08-22 01:02:03.456 のような DateTime64 を含む String から Date および Date32 への変換を許可します。2022-08-22 01:02:03 のような DateTime を含む String から Date32 への変換を許可します。これにより #39598 が解決されます。 #40475Alexey Milovidov)。
  • Parquet 形式でのネストされたデータ構造サポートを改善 #40485 (Arthur Passos).
  • Avro からの Array(Record) をフラット化された Nested テーブルとして読み取ることをサポートしました。 #40534 (Kruglov Pavel).
  • EmbeddedRocksDB に読み取り専用モードのサポートを追加。#40543 (Lloyd-Pottiger)。
  • URL テーブルエンジンの圧縮方式パラメータを検証するようにしました。 #40600 (Frank Chen)。
  • ファイル名の後にクエリ文字列が存在する場合の url テーブル関数/エンジンに対するフォーマット検出を改善しました。#40315 をクローズ。#40636Kruglov Pavel)。
  • GROUPING SET が使用されている場合は projection を無効にします。誤った結果が生成される問題がありました。この変更により #40635 が修正されます。#40726Amos Bird)。
  • テーブル定義で使用された場合にメタデータを破損させる可能性があった APPLY カラムトランスフォーマの誤った形式を修正しました。これにより #37590 が解決されました。#40727Amos Bird)。
  • formatDateTime でタイムゾーンオフセットをフォーマットするための %z 記述子をサポートしました。 #40736 (Cory Levy)。
  • clickhouse-client の対話モードで、./ が「直前に実行したコマンドを再実行」として解釈されるようになりました。 #40750 (Robert Schulze).
  • MySQL データベースエンジンおよび MySQL テーブル関数への MySQL タイムアウトの受け渡しに関する問題を修正しました。 #34168 をクローズしました。 #40751Kseniia Sumarokova)。
  • ファイルシステムキャッシュ用のディレクトリにステータスファイルを作成し、キャッシュディレクトリが異なるサーバーやキャッシュ間で共有されないようにします。 #40820 (Kseniia Sumarokova).
  • EmbeddedRocksDB ストレージに DELETE および UPDATE のサポートを追加しました。 #40853 (Antonio Andelic).
  • ClickHouse Keeper:長時間に及ぶコミット処理中のシャットダウンを修正し、許可されるリクエストサイズを拡大。#40941Antonio Andelic)。
  • WriteBufferFromS3 のレースコンディションを修正し、TSA アノテーションを追加。 #40950 (Kseniia Sumarokova).
  • group_by_use_nulls を使用する grouping sets は、キー列のみを Nullable に変換する必要があります。 #40997 (Duc Canh Le).
  • 分散テーブルに対する INSERT の可観測性を改善。#41034Frank Chen)。
  • S3 とのやり取りに関する、より低レベルなメトリクスを追加。 #41039 (mateng915)。
  • HTTP リダイレクト後の Location ヘッダーでの相対パスをサポート。#40985 をクローズ。#41162Kruglov Pavel)。
  • サーバーを再起動することなく、HTTP ハンドラーの変更をその場で適用できるようにしました。 #41177 (Azat Khuzhin).
  • ClickHouse Keeper:シャットダウン時にアクティブなセッションを適切に終了するようにしました。 #41215 (Antonio Andelic)。これにより、「table is read-only」エラーが発生する時間が短縮されます。
  • clickhouse-client/local で SQL クエリを自動的にコメントアウトできる機能を追加 (Alt-#、readline と同様)。 #41224 (Azat Khuzhin).
  • 設定 do_no_evict_index_and_mark_files を 1 と 0 の間で切り替えた際に発生するキャッシュの不整合を修正。 #41330 (Kseniia Sumarokova).
  • ユーザーがサイズ 256 を超える FixedString 型のカラムを作成できないようにする設定 allow_suspicious_fixed_string_types を追加しました。 #41495 (Duc Canh Le).
  • system.partshas_lightweight_delete を追加しました。 #41564 (Kseniia Sumarokova).

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

  • すべての設定にドキュメントの記載を必須化しました。 #40644 (Alexey Milovidov).
  • すべての既存メトリクスに対してドキュメント作成を必須化しました。 #40645 (Alexey Milovidov).
  • すべてのプロファイルイベントカウンタに対してドキュメント作成を必須とし、不足していたものにはドキュメントを追加しました。 #40646 (Alexey Milovidov).
  • 一部の依存関係を修正し、最小構成の clickhouse-local ビルドを可能にしました。 #40460 (Alexey Milovidov)。サイズは 50 MiB 未満です。
  • テストでの SQL 関数カバレッジを計測してレポートします。 #40593. #40647 (Alexey Milovidov).
  • すべての MergeTree 設定についてドキュメント化を義務付けました。 #40648 (Alexey Milovidov).
  • 高レベルな統一サーバーコンポーネント用の組み込みリファレンスドキュメントのプロトタイプ。#40649Alexey Milovidov)。
  • 変更されたパフォーマンステストに含まれるすべてのクエリを確認し、変更されたクエリが漏れなくテストされていることを確認します。 #40322 (Nikita Taranov)。
  • TGZ パッケージを修正。 #40681 (Mikhail f. Shiryaev).
  • デバッグシンボルを修正。 #40873 (Azat Khuzhin).
  • CI 設定を拡張し、x86 SSE2 のみを対象としたビルドを作成するようにしました。古いハードウェアや組み込みハードウェアで有用です。 #40999 (Robert Schulze)。
  • llvm/clang 15 に切り替え。 #41046 (Azat Khuzhin).
  • #40938 の続き。Loggers クラスにおける ODR 違反を修正。#40398#40937 を修正。#41060Dmitry Novik)。
  • GitHub のリリースアセットに macOS バイナリを追加しました。これにより #37718 が修正されました。#41088Mikhail f. Shiryaev)。
  • c-ares ライブラリが ClickHouse のビルドシステムに同梱されるようになりました。#41239 (Robert Schulze)
  • メインの ClickHouse コードから dlopen を削除しました。ただし、dlopen は library-bridge と odbc-bridge には残っています。 #41428 (Alexey Milovidov).
  • dlopen をメインの ClickHouse バイナリでは許可しないでください。有害であり安全ではありません。当社では使用していませんが、一部のライブラリでは「プラグイン」を実装するために使用される場合があります。制御不能で危険なサードパーティ製ライブラリをプロセスのアドレス空間に読み込むという古くからの手法は正気の沙汰ではないため、断固として推奨しません。#41429Alexey Milovidov)。
  • deb パッケージに source フィールドを追加し、nfpm を更新しました。 #41531 (Mikhail f. Shiryaev)
  • 社内開発DWARFパーサーにおけるDWARF-5のサポート。 #40710 (Azat Khuzhin).
  • テスト用のフォールトインジェクションを ZooKeeper クライアントに追加 #30498 (Alexander Tokmakov)。
  • debug および tsan 構成向けに、S3 ストレージを使用した stateless テストを追加 #35262 (Kseniia Sumarokova).
  • S3 上でのストレステストを試行 #36837 (alesapin)。
  • clang-tidyconcurrency-mt-unsafe を有効化 #40224Alexey Milovidov)。

バグ修正

  • AWS SDK のバグ による潜在的なデータ損失を修正しました。このバグは、ClickHouse を S3 上で使用している場合にのみ発生します。#40506alesapin)。このバグは AWS SDK で 5 年間未解決のままでしたが、我々の報告によりクローズされました。
  • Native 形式の悪意のあるデータがクラッシュを引き起こす可能性がありました。 #41441 (Alexey Milovidov)。
  • 集約関数 categorialInformationValue のプロパティ定義に誤りがあり、実行時にヌルポインタのデリファレンスが発生する可能性がありました。これにより #41443 が解決されました。#41449Alexey Milovidov)。
  • Apache ORC フォーマットでデータを書き込むと、バッファーオーバーランが発生するおそれがあります。 #41458 (Alexey Milovidov)。
  • Array of Nullable 型が引数として使用されている場合の encrypt および contingency 関数におけるメモリ安全性の問題を修正しました。これにより #41004 が解決されます。#40195Alexey Milovidov)。
  • 'not_processed' が null でない場合に MergeJoin で発生するバグを修正。 #40335 (liql2007).
  • IN 演算子で小数の精度が失われた場合に誤った結果が返される問題を修正しました。関連: #41125#41130Vladimir C)。
  • 複数階層の Nested 列における欠落列の補完処理を修正しました。 #37152 (Anton Popov).
  • Ordinary(非推奨)データベース向けの SYSTEM UNFREEZE クエリを修正。https://github.com/ClickHouse/ClickHouse/pull/36424 に対する修正。#38262Vadim Volodin)。
  • WITH 句によって導入された未使用の存在しないカラムを修正します。これにより #37812 が修正されます。#39131Amos Bird)。
  • ウィンドウ関数を含むクエリにおける ORDER BY の解析を修正。#38741 および #24892 を修正。#39354Dmitry Novik)。
  • 集約関数を対象とする WINDOW ORDER BY/PARTITION BY 式を計算しようとしたときに発生する Unknown identifier (aggregate-function) 例外を修正しました。 #39762 (Vladimir Chebotaryov).
  • 設定 max_analyze_depth によって、1つのクエリあたりの解析の深さを制限しました。これにより、異常に多くのサブクエリを含むクエリで解析時間が指数関数的に膨れ上がることを防ぎます。 #40334 (Vladimir C).
  • MergeTree エンジンファミリーのカラム TTL に関するまれなバグを修正しました: 縦方向マージが繰り返し行われた場合に、Cannot unlink file ColumnName.bin ... No such file or directory. というエラーが発生することがありました。 #40346 (alesapin)。
  • IPv4 と IPv6 の両方が存在する場合は、それぞれに対して DNS エントリを使用します。 #40353 (Maksim Kita).
  • Hadoop から Snappy で圧縮されたファイルを読み取れるようにしました。 #40482 (Kruglov Pavel).
  • 可変次元の配列を含む Object 型(実験的機能)の値を解析中にクラッシュする問題を修正しました。 #40483 (Duc Canh Le).
  • input_format_tsv_skip_first_lines 設定を修正。 #40491 (mini4).
  • MaterializedPostgreSQL データベース/テーブルエンジンの起動時に発生するバグ(レースコンディション)を修正しました。#40262。relcache_callback_list スロットの上限に達した際に発生するエラーを修正しました。#40511 (Maksim Buren)。
  • DateTime64 の解析中に発生する可能性がある 'Decimal math overflow' エラーを修正。 #40546 (Kruglov Pavel).
  • 軽量な削除行を含むパーツの縦方向マージを修正。 #40559 (Alexander Gololobov).
  • 圧縮を有効にした URL テーブルエンジンへのデータ書き込み時に発生していたセグメンテーションフォルトを修正。 #40565 (Frank Chen).
  • Map と併用した arrayElement 関数で、論理エラー 'Invalid Field get from type UInt64 to type String' が発生する可能性のあった問題を修正。 #40572 (Kruglov Pavel).
  • ファイルシステムキャッシュにおける起こりうるレースコンディションを修正。 #40586 (Kseniia Sumarokova).
  • MergeTree テーブルにおいて、影響を受けないパーティションに対するミューテーションをスキップする処理を削除しました。この機能は元々正しく動作しておらず、完了済みミューテーションが復活してしまう可能性があったためです。 #40589 (Alexander Tokmakov).
  • 実行時に既に使用中の gRPC ポートを設定に追加すると、ClickHouse サーバーがクラッシュします。 #40597 (何李夫)。
  • base58Encode / base58Decode における先頭の 0 および '1' の扱いを修正しました。 #40620 (Andrey Zvonov).
  • keeper-fix: スナップショットのインストール中にログへアクセスする際に発生する競合状態を修正。 #40627 (Antonio Andelic).
  • toFixedString 関数の短絡評価の挙動を修正しました。#40622 を部分的に解決します。#40628Kruglov Pavel)。
  • SQLite の int8 カラムを ClickHouse の int64 カラムに変換する際の不具合を修正。#40639 を修正。#40642Barum Rho)。
  • 再帰的な Buffer テーブルで発生していたスタックオーバーフローを修正しました。これにより #40637 がクローズされます。#40643Alexey Milovidov)。
  • ProcessList に新しいクエリを挿入する際にメモリ確保が発生します。これらの確保処理中にメモリ制限に達した場合、ProcessList::mutex がすでに取得されているため、OvercommitTracker を使用できません。#40611 を修正。#40677Dmitry Novik)。
  • marks 読み取り中に max_read_buffer_size=0 の場合に発生する LOGICAL_ERROR を修正。 #40705 (Azat Khuzhin).
  • クエリコンテキストなしに Kafka などからマテリアライズドビューへプッシュする際のメモリリークを修正。 #40732 (Azat Khuzhin).
  • CSV スキーマ推論で発生しうる「Attempt to read after eof」エラーを修正。#40746Kruglov Pavel)。
  • ライトスルーキャッシュの論理エラー「File segment completion can be done only by downloader」を修正。#40748 をクローズ。#40759Kseniia Sumarokova)。
  • GROUPING 関数の結果が SQL や他の DBMS と同じになるようにしました。 #40762 (Dmitry Novik).
  • /etc/hosts における名前解決で host_regexp 機能が正しく動作していないことが #40595 で報告されました。この問題は修正されました。#40769Arthur Passos)。
  • Log ファミリーの増分バックアップを修正。 #40827 (Vitaly Baranov).
  • ゼロコピーレプリケーションで潜在的なデータ損失を引き起こす可能性がある、極めてまれなバグを修正。 #40844 (alesapin).
  • 同じ set 式が異なるカラムから構築された場合にキー条件解析がクラッシュする問題を修正。 #40850 (Duc Canh Le).
  • ネストされた JSON オブジェクトのスキーマ推論を修正。 #40851 (Kruglov Pavel).
  • 空でも削除されていなかったファイルシステムキャッシュファイル用の3桁プレフィックスディレクトリを修正。#40797 をクローズ。 #40867 (Kseniia Sumarokova).
  • レプリカへの接続失敗時に未処理の DNS_ERROR が発生する問題を修正。 #40881 (Robert Coelho).
  • サブクエリで不要なカラムを削除する際のバグを修正。 #40884 (luocongkai).
  • リモート読み取りバッファにおける余分なメモリ割り当てを修正。 #40896 (Kseniia Sumarokova).
  • データベースの削除権限が明示的に取り消されていたユーザーでもデータベースを削除できてしまっていた問題を修正しました。 #40906 (Nikita Mikhaylov).
  • ClickHouse Keeper 向けの修正: 書き込みリクエスト内のパスを、Keeper の内部システムノードのパスと正しく比較するようにしました。 #40918 (Antonio Andelic)。
  • WriteBufferFromS3 のデッドロックを修正しました。 #40943 (Kseniia Sumarokova).
  • DESCRIBE TABLE url() およびその他の DESCRIBE TABLE <table_function>() に対するアクセス権を修正。 #40975 (Vitaly Baranov).
  • WITH GROUPING SETS に対する誤ったパーサーロジックを削除しました。これによりヌルポインタ参照が発生する可能性がありました。 #41049 (Duc Canh Le).
  • ClickHouse Keeper の修正: シャットダウン中に発生する可能性のあるセグメンテーションフォールトを修正。 #41075 (Antonio Andelic).
  • 集約関数コンビネータにおけるセグメンテーションフォルト、use-heap-after-free、およびメモリリークの可能性を修正。#40848 をクローズ。 #41083 (Kruglov Pavel).
  • Window Views を使用して query_views_log を修正。 #41132 (Raúl Marín).
  • デフォルトで optimize_monotonous_functions_in_order_by を無効化し、次の問題を緩和します: #40094#41136Denny Crane)。
  • データベースエンジンを Ordinary から Atomic に自動変換する際に発生していた「possible deadlock avoided」エラーを修正しました。 #41146 (Alexander Tokmakov).
  • ブロックが空の場合に SortedBlocksWriter で発生する SIGSEGV を修正(optimize_aggregation_in_orderjoin_algorithm=auto を使用した場合に発生する可能性がある)。 #41154 (Azat Khuzhin).
  • array join を使用している場合に trivial count の最適化が有効だと、クエリ結果が誤ったものになる問題を修正しました。これにより #39431 が修正されます。 #41158Denny Crane)。
  • GetPriorityForLoadBalancing::getPriorityFunc() で発生する stack-use-after-return の不具合を修正。 #41159 (Azat Khuzhin)。
  • 位置引数に関する例外「Positional argument out of bounds」を修正。#40634 をクローズ。#41189Kseniia Sumarokova)。
  • バックグラウンドでの破損したデタッチ済みパーツのクリーンアップ処理を修正。 #41190 (Kseniia Sumarokova).
  • 多数の CROSS JOINWHERE を含む場合に指数関数的になっていたクエリ書き換えを修正し、#21557 をクローズしました。 #41223 (Vladimir C)。
  • ライトスルーキャッシュで発生し得た論理エラーを修正しました。この問題は、必要なすべての種類の例外が適切に処理されていなかったために発生していました。 #41208 をクローズします。 #41232Kseniia Sumarokova)。
  • system.filesystem_cache_log 内の String 型ログエントリを修正。 #41233 (jmimbrero)。
  • サブクエリで OFFSET 句を使用し、外側のクエリで WHERE 句を使用した場合に誤った結果が返される可能性があった問題を修正しました。#40416 を修正。#41280Alexander Tokmakov)。
  • query_plan_optimize_primary_key が有効な場合に発生しうる誤ったクエリ結果が返される不具合を修正しました。#40599 を修正。#41281 (Nikolai Kochetov)。
  • lowerUTF8/upperUTF8 において、無効なシーケンスが他の行に影響しないようにしました。 #41286 (Azat Khuzhin).
  • 型が Object のカラムを含む ALTER &lt;table&gt; ADD COLUMN クエリの不具合を修正。 #41290 (Anton Popov).
  • distributed_ddl.path が設定に存在しない場合に system.distributed_ddl_queue から選択すると発生する「No node」エラーを修正しました。#41096 を解決します。 #41296young scott)。
  • ディスクオブジェクトストレージで誤って Expected relative path という論理エラーが発生する問題を修正。関連: #41246#41297Kseniia Sumarokova)。
  • MsgPack 形式で UUID を挿入する前に列の型チェックを追加しました。 #41309 (Kruglov Pavel).
  • async_insert 設定を有効にした非同期挿入時に、Object 型のカラムへ不正なデータを挿入すると発生する可能性があったクラッシュを修正しました。これは、非同期挿入のすべてのバッチ内の JSON が不正でパース不能な場合に発生し得ました。#41336 (Anton Popov)。
  • async_socket_for_remote/use_hedged_requests と並列での KILL による潜在的なデッドロックを修正。 #41343 (Azat Khuzhin).
  • デフォルトで optimize_rewrite_sum_if_to_count_if を無効化し、次の問題を緩和します: #38605 #38683#41388 (Denny Crane)。
  • 22.8 以降、データベースが Replicated で、かつクラスタ名とデータベース名が同一の場合には、ON CLUSTER 句は無視されていました。このため、Replicated データベースに対する DROP PARTITION ON CLUSTER が予期しない動作をしていました。現在は修正されており、ON CLUSTER 句は、データベースレベルでレプリケーションされるクエリに対してのみ無視されるようになりました。#41299 を修正。#41390Alexander Tokmakov)。
  • クエリのキャンセル(KILL QUERY またはサーバーのシャットダウン)時に発生しうるハングやデッドロックを修正。 #41467 (Azat Khuzhin).
  • JBOD 機能使用時にサーバーがクラッシュする可能性のあった問題を修正しました。これにより #41365 が解決されました。#41483Amos Bird)。
  • nullable な FixedString から String への変換処理を修正。 #41541 (Duc Canh Le).
  • 誤った集約状態が groupBitmap* に渡された場合にクラッシュが発生しないようにしました。 #41563 (Raúl Marín).
  • ORDER BY を含み、1500 <= LIMIT <= max_block_size の条件を満たすクエリで、先頭から一部の行が欠落した不正な結果が返されることがありました。#41182 を修正しました。#41576Nikolai Kochetov)。
  • マテリアライズドビュー使用時の X-ClickHouse-Summary における読み取りバイト数/行数を修正。 #41586 (Raúl Marín).
  • OFFSET を含むクエリで発生する可能性のある pipeline stuck 例外を修正しました。enable_optimize_predicate_expression = 0 かつ WHERE 句に常に偽となる条件式がある場合にこのエラーが確認されました。#41383 を修正しました。#41588Nikolai Kochetov)。

ClickHouse リリース 22.8, 2022-08-18

後方互換性のない変更

  • Date32DateTime64 の範囲を拡張し、西暦 1900 年から 2299 年までの日付をサポートするようにしました。以前のバージョンでは、サポートされる期間は西暦 1925 年から 2283 年までのみでした。この実装では、ユリウス暦からグレゴリオ暦への歴史的な移行を考慮するのではなく、(ISO 8601:2004(3.2.1 節「グレゴリオ暦」)に準拠した)プロレプティック・グレゴリオ暦を使用しています。この変更は、範囲外引数に対する実装依存の動作に影響します。例えば、以前のバージョンでは 1899-01-01 の値は 1925-01-01 に切り詰められていましたが、新しいバージョンでは 1900-01-01 に切り詰められます。INTERVAL 3 QUARTER を渡した場合、toStartOfInterval による丸めの動作も最大で 1 四半期分変わります。これは、間隔が実装依存の時点から数えられているためです。#28216 をクローズし、#38393 を改善しました。 #39425Roman Vasin)。
  • 関連するすべての辞書ソースが remote_url_allow_hosts 設定に従うようになりました。これはすでに HTTP、Cassandra、Redis では行われており、今回 ClickHouse、MongoDB、MySQL、PostgreSQL が追加されました。ホストは DDL から作成された辞書に対してのみチェックされます。 #39184Nikolai Kochetov)。
  • 事前ビルドされた ClickHouse x86 バイナリは、AVX 命令のサポートを必要とするようになりました。つまり、2011 年にリリースされた Intel Sandy Bridge / AMD Bulldozer 以降の CPU が必要です。 #39000Robert Schulze)。
  • リモートファイルシステムキャッシュを組み合わせ可能にし、特定のファイル(idx、mrk など)を削除対象から除外できるようにし、古いキャッシュバージョンを削除しました。これにより、Azure blob storage ディスク上、Local ディスク上、StaticWeb ディスク上などにキャッシュを構成できるようになりました。この PR はキャッシュ設定が変更され、キャッシュが動作するようにするには設定ファイルを更新する必要があるため、後方互換性がないものとマークされています。新しい設定でも古いキャッシュは引き続き使用されます。サーバーは古いキャッシュ設定のままでも問題なく起動します。https://github.com/ClickHouse/ClickHouse/issues/36140 をクローズ。https://github.com/ClickHouse/ClickHouse/issues/37889 をクローズ。 (Kseniia Sumarokova)。 #36171)

新機能

  • MergeTree テーブルに対する SQL 標準の DELETE FROM 構文と、MergeTree ファミリー向けの軽量な削除実装をサポートしました。#37893 (Jianmei Zhang) (Alexander Gololobov)。注意: この新機能により ClickHouse が HTAP DBMS になるわけではありません。
  • 対話モードで SET param_abc = 'def' のようにクエリパラメータを設定でき、ネイティブプロトコル経由で設定値として転送できるようになりました。#39906 (Nikita Taranov)。
  • ネイティブプロトコルでクオータキーを設定できるようになりました。(Yakov Olkhovsky)。
  • 設定 exact_rows_before_limit (0/1) を追加しました。有効化すると、rows_before_limit_at_least 統計に対して厳密な値を返しますが、その代償として、LIMIT より前のデータをすべて読み取る必要があります。これにより #6613 がクローズされました。#25333 (kevin wan)。
  • Distributed エンジンおよび Replicated エンジンを持つテーブルに対し、s3Cluster テーブル関数を用いた並列分散 INSERT SELECT をサポートしました。#34670#39107 (Nikita Mikhaylov)。
  • テキストフォーマットからのスキーマ推論を制御する新しい設定を追加しました: - input_format_try_infer_dates - 文字列から日付を推論しようとします。 - input_format_try_infer_datetimes - 文字列から日時を推論しようとします。 - input_format_try_infer_integers - Float64 の代わりに Int64 を推論しようとします。 - input_format_json_try_infer_numbers_from_strings - JSON フォーマットにおいて、JSON 文字列から数値を推論しようとします。#39186 (Kruglov Pavel)。
  • JSON 形式のログ出力を提供するオプションを追加しました。ログ解析ツールでのインジェストおよびクエリを容易にするためのものです。#39277 (Mallik Hassan)。
  • 長時間実行および継続的なクエリの実行中に現在時刻を取得できる関数 nowInBlock を追加しました。#39522 をクローズします。注意: now64InBlock および todayInBlock 関数は存在しません。#39533 (Alexey Milovidov)。
  • executable() テーブル関数に対して設定を指定できるようにしました。#39681 (Constantine Peresypkin)。
  • データベースエンジンを Ordinary から Atomic に自動変換する機能を実装しました。flags ディレクトリに空の convert_ordinary_to_atomic ファイルを作成すると、次回のサーバー起動時にすべての Ordinary データベースが自動的に変換されます。#39546 を解決します。#39933 (Alexander Tokmakov)。
  • SELECT ... INTO OUTFILE '...' AND STDOUT をサポートしました。#37490#39054 (SmitaRKulkarni)。
  • PrettyMonoBlock, PrettyNoEscapesMonoBlock, PrettyCompactNoEscapes, PrettyCompactNoEscapesMonoBlock, PrettySpaceNoEscapes, PrettySpaceMonoBlock, PrettySpaceNoEscapesMonoBlock フォーマットを追加しました。#39646 (Kruglov Pavel)。

パフォーマンスの向上

  • メモリ効率を重視した集約結果のマージ処理におけるメモリ使用量を改善しました。 #39429 (Nikita Taranov).
  • クエリによって生成される同時実行スレッドの総数を制限するための並行制御ロジックを追加しました。 #37558 (Sergei Trifonov)。高 QPS 時のパフォーマンスを、全クエリで使用されるスレッド総数を制限することで向上させるために、concurrent_threads_soft_limit パラメータを追加しました。 #37285 (Roman Vasin)。
  • 非圧縮キャッシュおよびマークキャッシュに SLRU キャッシュポリシーを追加しました。(Kseniia Sumarokova)。#34651 (alexX512)。ローカルキャッシュ機能とキャッシュアルゴリズムを分離しました。#38048 (Han Shukai)。
  • Intel® In-Memory Analytics Accelerator (Intel® IAA) は、次世代の Intel® Xeon® Scalable プロセッサ(「Sapphire Rapids」)で利用可能なハードウェアアクセラレータです。その目的は、データの圧縮・伸長やフィルタリングといった分析で一般的な処理を高速化することです。ClickHouse には、新たに Intel® IAA のオフロード技術を活用して高性能な DEFLATE 実装を提供する「DeflateQpl」圧縮コーデックが追加されました。このコーデックは、ハードウェアアクセラレータへのアクセス、あるいはハードウェアアクセラレータが利用できない場合のソフトウェアフォールバックへのアクセスを抽象化する Intel® Query Processing Library (QPL) を使用します。DEFLATE は一般的に、ClickHouse のデフォルトコーデックである LZ4 よりも高い圧縮率を実現し、その結果、ディスク I/O の削減およびメインメモリ使用量の低減につながります。#36654jasperzhu)。#39494Robert Schulze)。
  • ORDER BY を伴う DISTINCT: 入力ストリームのソート記述に基づいてソート方法を推論し、入力ストリームがすでにソート済みであればソートをスキップします。#38719Igor Nikonov)。メモリ使用量を(大幅に)削減し、クエリの実行時間を短縮し、DISTINCT 列が ORDER BY 列と一致する場合の最終 DISTINCT に DistinctSortedChunkTransform を使用しますが、EXPLAIN PIPELINE 内ではこれを DistinctSortedStreamTransform にリネームします → これによりメモリ使用量が大幅に削減され、さらに DistinctSortedChunkTransform のホットループ内で不要なアロケーションを削除します。#39432Igor Nikonov)。DistinctSortedTransform は、ソート記述が DISTINCT 列に適用可能な場合にのみ使用し、それ以外の場合は通常の DISTINCT 実装にフォールバックします。これにより、DistinctSortedTransform 実行中に行うチェックを減らすことができます。#39528Igor Nikonov)。修正: DistinctSortedTransform がソートの利点を活かせていませんでした。clearing_columns が常に空として誤検出されていたため、HashSet が一度もクリアされませんでした。その結果、実質的には通常の DISTINCTDistinctTransform)として動作していました。この修正によりメモリ使用量が大幅に削減されます。#39538Igor Nikonov)。
  • cluster や同様のテーブル関数を実行する際、リモートテーブルの構造を取得するためにローカルノードを最優先で使用するようになりました。 #39440 (Mingliang Pan).
  • AVX512VBMI2 の圧縮ストアを使用して数値カラムでのフィルタリングを最適化しました。#39633Guo Wangyang)。AVX512 VBMI2 を搭載したシステムでは、この PR により SSB ベンチマーククエリ 3.1、3.2、3.3(SF=100)において約 6% のパフォーマンス向上が見られます。Intel Icelake Xeon 8380 × 2 ソケット構成でテスト済みです。#40033Robert Schulze)。
  • マルチスレッド環境における関数式を用いたインデックスの解析を最適化しました。 #39812 (Guo Wangyang).
  • 複雑なクエリ向けの最適化:登録されている UDF がない場合は AST を走査しないようにしました。 #40069 (Raúl Marín). CurrentMemoryTracker の割り当ておよび解放を最適化しました。 #40078 (Raúl Marín).
  • Base58 エンコード/デコードを改善しました。 #39292 (Andrey Zvonov).
  • SSE/AVX/AVX512 向けのバイトからビットマスクへの変換処理を改善。 #39586 (Guo Wangyang)。

改善

  • AggregateFunction 型とその状態表現を正規化します。これは、#35788 のような最適化によって count(not null columns)count() として扱われ、その結果、分散インタープリタが次のエラーを発生させる可能性があるためです:Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported#39420Amos Bird)。同一の状態を持つ関数は、マテリアライズドビューで相互に置き換えて使用できます。
  • system.backups テーブルを再設計して簡素化し、internal カラムを削除するとともに、ユーザーが操作 ID を設定できるようにし、num_filesuncompressed_sizecompressed_sizestart_timeend_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 を解決。#37198Alexander Tokmakov)。
  • 進捗報告(X-ClickHouse-Summary)に result_rows と result_bytes を追加しました。 #39567 (Raúl Marín)。
  • MergeTree の主キー解析を改善。 #25563 (Nikolai Kochetov).
  • timeSlots が DateTime64 に対応しました。DateTime64 を使用する場合、サブセカンド精度の継続時間とスロットサイズを利用できます。 #37951 (Andrey Zvonov).
  • EmbeddedRocksDB テーブルに対する LEFT SEMI および LEFT ANTI 直接結合のサポートを追加しました。 #38956 (Vladimir C)。
  • fsync 操作用のプロファイルイベントを追加。 #39179 (Azat Khuzhin).
  • 通常の関数 file(path[, default]) に第2引数を追加し、ファイルが存在しない場合に返される値を指定できるようにしました。 #39218 (Nikolay Degterinsky).
  • HTTP 経由での読み取り処理にいくつかの細かな修正を加え、200 OK が返された場合に部分コンテンツを再試行できるようにしました。 #39244 (Kseniia Sumarokova)。
  • クエリ CREATE TEMPORARY TABLE ... (<list of columns>) AS ... がサポートされるようになりました。 #39462 (Kruglov Pavel).
  • カスタム TLD で !/*(感嘆符/アスタリスク)をサポートするようにしました(cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom())。#39496Azat Khuzhin)。
  • NATS への TLS 接続のサポートを追加しました。#39525 を実装。#39527Constantine Peresypkin)。
  • clickhouse-obfuscator(テストおよび負荷生成のためのデータベース難読化ツール)に、事前学習済みモデルを扱うための新しい --save および --load パラメータが追加されました。これにより #39534 が解決されました。 #39541Alexey Milovidov)。
  • 再起動時のログローテーションの不正な動作を修正。 #39558 (Nikolay Degterinsky).
  • 外部集約が有効な場合の集計プロジェクションの構築処理を修正しました。ケース自体はまれであり、設定を変更することで容易に回避できるため、改善としてマークしています。この修正により #39667 が解決されます。 #39671 (Amos Bird)。
  • Map 型の引数を持つハッシュ関数を実行できるようにしました。 #39685 (Anton Popov).
  • スタックトレース内のアドレスを非表示にするための設定パラメータを追加しました。セキュリティがわずかに向上する可能性はありますが、一般的には有害であり、使用すべきではありません。#39690Alexey Milovidov)。
  • ネストされた関数データのメモリセグメントが適切にアラインされるように、AggregateFunctionDistinct のプレフィックスサイズを変更。 #39696 (Pxl).
  • clickhouse-diagnostic ツールに渡される認証情報が正しくエスケープされるようにしました。 #39707 (Dale McDiarmid).
  • ClickHouse Keeper の改善: 終了時にスナップショットを作成するようにしました。これは設定項目 keeper_server.create_snapshot_on_exit で制御でき、デフォルト値は true です。 #39755 (Antonio Andelic)。
  • row_policy_filteradditional_filter に対する主キーの解析をサポートします。これにより、#37454 で報告された問題などの修正にも役立ちます。 #39826 (Amos Bird)。
  • Play UI における 2 つのユーザビリティ問題を修正: - 余計なボーダー半径とマージンのせいで iPad 上でピクセル単位で正確に表示されていなかった問題を修正; - 最初のクエリ実行後に進行状況が表示されなかった問題を修正。これにより #39957 がクローズされます。これにより #39960 がクローズされます。 #39961 (Alexey Milovidov)。
  • Play UI: 行番号の表示を追加し、クリック時のセル選択を可能にし、テーブルセルにヒステリシスを導入。 #39962 (Alexey Milovidov).
  • Play UI: textarea 内で Tab キー入力を認識しつつ、同時にフォーカスのタブ移動を妨げないようにしました。 #40053 (Alexey Milovidov).
  • クライアントはサーバー側で計測した経過時間を表示するようになります。これは、リモートデータセンター間で ClickHouse サービスの性能を比較する際に重要です。これにより #38070 が解決されます。背景となる経緯については こちら も参照してください。#39968Alexey Milovidov)。
  • parseDateTime64BestEffortUSparseDateTime64BestEffortUSOrNullparseDateTime64BestEffortUSOrZero 関数を追加し、#37492 をクローズしました。#40015Tanya Bragin)。
  • system.processors_profile_log を、入力行数などより多くの情報を記録できるよう拡張しました。 #40121 (Amos Bird).
  • clickhouse-benchmark で、利用可能な場合はデフォルトでサーバー側の時間を表示するようにしました(ClickHouse バージョン 22.8 以降)。これはクラウド間のパフォーマンスを正しく比較するために必要です。この動作は新しい --client-side-time コマンドラインオプションで変更できます。--randomize コマンドラインオプションを、--randomize 1 から引数なしの形式に変更しました。 #40193 (Alexey Milovidov).
  • クエリの複雑性制限が設定され、その制限に達した場合にカウントするカウンタ(ProfileEvents)を追加しました(overflow_modebreak の場合と throw の場合で個別のカウンタ)。たとえば、read_overflow_mode = 'break'max_rows_to_read を設定している場合、OverflowBreak カウンタの値を見ることで、不完全な結果を判別できます。 #40205 (Alexey Milovidov).
  • "Memory limit exceeded" エラー発生時のメモリ使用量の計測を修正(以前は [peak] メモリ使用量に、失敗したメモリ割り当ても含めていました)。#40249 (Azat Khuzhin)。
  • ファイルシステムキャッシュ用のメトリクス FilesystemCacheSizeFilesystemCacheElements を追加しました。 #40260 (Kseniia Sumarokova).
  • Hadoop のセキュアな RPC 転送(hadoop.rpc.protection=privacy および hadoop.rpc.protection=integrity)をサポート。 #39411 (michael1589)。
  • 関数 multi(Fuzzy)Match(Any|AllIndices|AnyIndex)() の使用時にパターンキャッシュのメモリ消費が継続的に増加しないようにしました。 #40264 (Robert Schulze).

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

  • ClickFiddle: 読み書きモードで ClickHouse の各バージョンをテストするための新しいツール(Igor Baliuk)。
  • ClickHouse バイナリが自己解凍形式になりました #35775 (Yakov Olkhovskiy, Arthur Filatenkov)。
  • 最近のタイムゾーン変更をサポートするため、tzdata を 2022b に更新しました。https://github.com/google/cctz/pull/226 を参照してください。チリの 2022 年の夏時間(DST)の開始は、9 月 4 日から 9 月 11 日に延期されました。イランは 2022-09-21 に標準時へ戻した後、DST(夏時間)の適用を恒久的に廃止する予定です。1977 年における Asia/Tehran の歴史的タイムゾーンに関する修正も含まれています。イランが標準時を採用したのは 1946 年ではなく 1935 年です。1977 年には 03-21 23:00 から 10-20 24:00 まで DST を実施しており、1978 年の切り替えは 03-20 と 10-20 ではなく 03-24 と 08-05 に行われました。また、1979 年春の切り替えは 03-21 ではなく 05-27 でした(https://data.iana.org/time-zones/tzdb/NEWS)。(Alexey Milovidov)。
  • 以前のパッケージは、systemd.service ファイルを /etc にインストールしていました。そこにあるファイルは conf としてマークされており、削除も自動更新も行われません。このPRでそれらをクリーンアップします。 #39323 (Mikhail f. Shiryaev)。
  • LSan が正しく動作するようにしました。 #39430 (Azat Khuzhin).
  • TSAN は clang-14 では問題があります(https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540)ので、ここでは TSAN バイナリを clang-15 でビルドします。#39450Mikhail f. Shiryaev)。
  • ClickHouse のツールを個別の実行可能プログラムとしてビルドするオプションを削除しました。これにより #37847 を修正しました。#39520Alexey Milovidov)。
  • s390x(ビッグエンディアン)向けビルドのための細かな準備作業。 #39627 (Harry Lee)。 #39656 (Harry Lee)。s390x 向け BitHelpers におけるエンディアン問題を修正。 #39656 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けに、SipHash に関連するコードの一部を実装。 #39732 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けの Coordination スナップショットコードで発生していたエンディアン問題を修正。 #39931 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けの Codec コードにおけるエンディアン問題を修正。 #40008 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けに、ReadHelpers および WriteHelpers のコードでビッグエンディアンのバイナリデータを読み書きする際のエンディアン問題を修正。 #40179 (Harry Lee)。
  • clang-16(trunk)でのビルドをサポートしました。これにより #39949 がクローズされました。#40181Alexey Milovidov)。
  • RISC-V 64 向けビルドを CI で実行できるように準備します。これは #40141 に対応するものです。#40197Alexey Milovidov)。
  • 関数登録用マクロインターフェイス(FUNCTION_REGISTER*)を簡素化し、registerFunctions.cpp で extern 関数を追加・呼び出すステップを不要にしました。これにより、新しい関数のインクリメンタルビルドも高速化されます。 #38615 (Li Yin)。
  • Docker: 現在では、Docker イメージ内の entrypoint.sh は、マルチディスク構成のために設定で指定されたすべてのフォルダに対して chown を実行します #17717#39121Nikita Mikhaylov)。

バグ修正

  • CapnProto 入力フォーマットで発生しうるセグメンテーションフォールトを修正しました。このバグは kiojj によって発見され、ClickHouse バグバウンティ プログラム を通じて報告されました。#40241Kruglov Pavel)。
  • 配列の添字演算子が誤った動作をする極めてまれなケースを修正しました。これにより #28720 がクローズされました。#40185Alexey Milovidov)。
  • 暗号化関数の引数チェックが不十分だった問題を修正しました(query fuzzer により検出)。これにより #39987 が解決されます。#40194Alexey Milovidov)。
  • ENGINE = Set で複数カラムを持つテーブルに対して IN 演算子を使用した場合に、カラムの順序が誤ってしまうことがある不具合を修正しました。これにより #13014 が修正されます。 #40225 (Alexey Milovidov)。
  • 暗号化ディスクからの読み取り時のシーク処理を修正しました。このPRは #38381 を解決します。#39687Vitaly Baranov)。
  • 結合プラン内の重複カラムを修正。ついに #26809 を解決。#40009Vladimir C)。
  • 異なる日付/時刻型を含む ORDER BY WITH FILL を伴う SELECT クエリがハングする問題を修正しました。 #37849 (Yakov Olkhovskiy).
  • projection の ORDER BY に一致する ORDER BY の動作を修正しました(これまでは単にソートされていない結果を返していました)。 #38725 (Azat Khuzhin).
  • GROUP BY 文で、テーブルのカラムまたは式と名前が衝突してしまう場合には関数を最適化しないようにしました。#37032 を修正。#39103Anton Kozlov)。
  • RENAME TABLE 実行後にログに誤ったテーブル名が出力される問題を修正。これにより #38018 が修正されます。 #39227Amos Bird)。
  • クエリを最適化する際の列プルーニング時における位置引数を修正しました。 #38433 をクローズ。 #39293 (Kseniia Sumarokova).
  • Protobuf/CapnProto フォーマットにおいて、空メッセージの場合に発生し、スキーマ推論により空の Tuple 型カラムが作成されてしまっていた不具合を修正しました。#39051 をクローズしました。Protobuf および CapnProto フォーマットのスキーマ推論時に、サポートされていない型のフィールドをスキップできるようにする 2 つの新しい設定 input_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference を追加しました。#39357Kruglov Pavel)。
  • (Window View は実験的な機能です)CREATE WINDOW VIEW .. ON CLUSTER ... INNER で発生していたセグメンテーションフォルトを修正しました。#39363 をクローズしました。#39384Kseniia Sumarokova)。
  • insert into 関数をキャンセルした場合の WriteBuffer の finalize を修正しました(以前のバージョンでは std::terminate を引き起こす可能性がありました)。 #39458 (Kruglov Pavel)。
  • 疎シリアライズ形式における Object 型カラムの保存処理を修正。 #39464 (Anton Popov).
  • プロジェクション使用時に発生する可能性のある「Not found column in block」という例外を修正しました。これにより #39469 がクローズされました。#39470小路)。
  • マテリアライズドビューを伴う DROP と INSERT 間の競合状態で発生する例外を修正。 #39477 (Azat Khuzhin).
  • Apache Avro ライブラリのバグ: Avro フォーマットにおけるデータレースおよびヒープバッファオーバーフロー発生の可能性を修正。#39094 および #33652 をクローズ。#39498Kruglov Pavel)。
  • O_DIRECT が有効な場合(min_bytes_to_use_direct_io の設定で有効化)、local_filesystem_read_method='pread_threadpool' 設定時の非同期読み取りでまれに発生していた不具合を修正しました。 #39506 (Anton Popov).
  • (FreeBSD のみ)FreeBSD 環境で ClickHouse 起動時に発生していた "Code: 49. DB::Exception: FunctionFactory: the function name '' is not unique. (LOGICAL_ERROR)" を修正しました。 #39551 (Alexander Gololobov).
  • splitByChar に最近追加された引数「maxsplit」が正しく動作していなかった不具合を修正しました。 #39552 (filimonov)。
  • enable_optimize_predicate_expression 有効時の ASOF JOIN におけるバグを修正し、#37813 をクローズ。#39556Vladimir C)。
  • ON CLUSTER または Replicated データベースおよび ReplicatedMergeTree を用いた CREATE/DROP INDEX クエリの動作を修正しました。以前はすべてのレプリカで実行されており、エラーや DDL キューの滞留の原因となっていました。#39511 を修正。#39565Alexander Tokmakov)。
  • JOIN を伴うプッシュダウン処理で発生する「column not found」エラーを修正し、#39505 をクローズ。#39575Vladimir C)。
  • 誤っていた REGEXP_REPLACE のエイリアスを修正しました。これにより https://github.com/ClickHouse/ClickBench/issues/9 が解決されます。#39592Alexey Milovidov)。
  • 指数減衰ウィンドウ関数における減衰の基準点を、ウィンドウ内の最後の値に固定しました。以前は、減衰は exp((t - curr_row_t) / decay_length) という式で計算されており、これはウィンドウの右側の境界が CURRENT ROW でない場合には正しくありませんでした。これを exp((t - last_row_t) / decay_length) に変更しました。ROWS BETWEEN (smth) AND CURRENT ROW を指定したウィンドウでは、結果に変更はありません。#39593Vladimir Chebotaryov)。
  • オペランドのスケールに基づいて検出できる Decimal の除算時のオーバーフローを修正。 #39600 (Andrey Zvonov)。
  • 設定 output_format_arrow_string_as_stringoutput_format_arrow_low_cardinality_as_dictionary を併用した場合に正しく動作するよう修正。#39624 をクローズ。#39647Kruglov Pavel)。
  • 分散テーブルの読み取り時におけるデフォルトデータベースの解決処理のバグを修正しました。 #39674 (Anton Kozlov).
  • (廃止予定の Ordinary データベースでのみ) SELECT クエリが mmap I/O 用のキャッシュを使用していて、データベースエンジンに Ordinary を用い、かつ削除されたテーブルと同じ名前の新しいテーブルが作成された場合に、削除済みテーブルのデータを読み取ってしまうことがありました。この問題は修正されています。 #39708 (Alexander Tokmakov).
  • 発生する可能性のあるエラー Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinality を修正しました。#38460 を解決します。#39716Arthur Passos)。
  • JSON 形式の meta セクション内のフィールド名が誤って二重にエスケープされていました。この修正により #39693 がクローズされました。#39747Alexey Milovidov)。
  • タプルと演算子 IN を使用した誤ったインデックス解析を修正しました。これにより、誤ったクエリ結果が返される可能性がありました。 #39752 (Anton Popov).
  • EmbeddedRocksDB テーブルでパラメータを用いたキーによるフィルタリングが機能するよう修正。 #39757 (Antonio Andelic).
  • ARRAY JOIN の最適化によって発生していた Invalid number of columns in chunk pushed to OutputPort エラーを修正しました。 #39164 の不具合を修正。 #39799Nikolai Kochetov)。
  • Linux カーネルのバグに対するワークアラウンドです。local_filesystem_read_method=pread_threadpool を使用して CANNOT_READ_ALL_DATA 例外を解消します。このバグは、man によると Linux カーネルのバージョン 5.9 と 5.10 のみに影響していました。#39800Anton Popov)。
  • (NFS のみ) root-squash が有効なボリュームに対する NFS 上の mkdir の不具合を修正。#39898 (Constantine Peresypkin).
  • DETACH/DROP 時に Prometheus メトリクスから辞書を削除します。 #39926 (Azat Khuzhin).
  • StorageFile における仮想カラムを含む読み取り処理を修正。#39907 をクローズ。#39943flynn)。
  • フェッチ時の過剰なメモリ使用を修正しました。#39915 を修正。#39990Nikolai Kochetov)。
  • (実験的機能)hashId がクラッシュする問題と、salt パラメータが使用されていなかった問題を修正。 #40002 (Raúl Marín)。
  • 特定の組み合わせで定数列と非定数列を使用した場合に、EXCEPT および INTERSECT 演算子がクラッシュする可能性がありました。 #40020 (Duc Canh Le)。
  • INSERT が遅すぎる、またはマージ/ミューテーションに時間がかかりすぎる場合に発生していた "Part directory doesn't exist" および "tmp_<part_name> ... No such file or directory" エラーを修正しました。さらに、パーツのフェッチの前回の試行が失敗したにもかかわらず tmp-fetch_<part_name> ディレクトリがクリーンアップされていなかった場合に、ログにエラーや警告が一切出力されないままレプリケーションキューのエントリがスタックする可能性があった問題も修正しました。 #40031 (Alexander Tokmakov).
  • Values フォーマットにおけるタプル配列の解析に関するまれな不具合を修正。 #40034 (Anton Popov).
  • ArrowColumn 形式の Dictionary(X) および Dictionary(Nullable(X)) を、それぞれ ClickHouse の LowCardinality(X) および LowCardinality(Nullable(X)) に変換するロジックを修正しました。 #40037 (Arthur Passos).
  • タスクスケジューリングの失敗時に S3 への書き込みで発生し得るデッドロックを修正。 #40070 (Maksim Kita).
  • collectFilesToSkip() のバグを修正し、再計算が必要なインデックスに対して正しいファイル拡張子(.idx または .idx2)を付与して誤ったハードリンクを回避しました。#39896 を修正。#40095Jianmei Zhang)。
  • 逆引き DNS 解決に関する修正。 #40134 (Arthur Passos)。
  • Array(UInt32) に対する arrayDifference の予期しない結果を修正。 #40211 (Duc Canh Le).

ClickHouse リリース 22.7, 2022-07-21

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

  • 設定 enable_positional_arguments をデフォルトで有効化しました。これにより、SELECT ... ORDER BY 1, 2 のようなクエリが使用できるようになります。ここでの 1, 2 は SELECT 句への参照です。以前の動作に戻す必要がある場合は、この設定を無効にしてください。 #38204Alexey Milovidov)。
  • format_csv_allow_single_quotes をデフォルトで無効化しました。#37096 を参照してください。(Kruglov Pavel)。
  • Ordinary データベースエンジンと、*MergeTree テーブル向けの旧来のストレージ定義構文は非推奨となりました。デフォルトでは、Ordinary エンジンを使用する新しいデータベースを作成することはできません。system データベースが Ordinary エンジンを使用している場合、サーバー起動時に自動的に Atomic に変換されます。旧動作を維持するための設定(allow_deprecated_database_ordinary および allow_deprecated_syntax_for_merge_tree)はありますが、これらの設定は将来のリリースで削除される可能性があります。 #38335Alexander Tokmakov)。
  • デフォルトでカンマ区切りの結合(カンマ JOIN)を INNER JOIN に書き換えるようにしました(デフォルト値として cross_to_inner_join_rewrite = 2 を設定)。以前の動作にするには cross_to_inner_join_rewrite = 1 を設定してください。 #39326Vladimir C)。互換性の問題が発生した場合は、この設定を元に戻すことができます。

新機能

  • ウィンドウ関数を含む式をサポートしました。 #19857 をクローズしました。 #37848Dmitry Novik)。
  • EmbeddedRocksDB テーブル向けに新しい direct 結合アルゴリズムを追加しました。#33582#35363 を参照してください(Vladimir C)。
  • 完全なソートマージジョインアルゴリズムを追加しました。 #35796 (Vladimir C).
  • NATS テーブルエンジンを実装しました。これにより、NATS を使った pub/sub が可能になります。 #32388 をクローズします。 #37171 (tchepavel). (Kseniia Sumarokova)
  • テーブル関数 mongodb を実装し、MongoDB ストレージ/テーブル関数への書き込みを可能にしました。 #37213 (aaapetrenko). (Kseniia Sumarokova)
  • SQLInsert 出力フォーマットを追加しました。#38441 をクローズ。#38477Kruglov Pavel)。
  • 設定 additional_table_filters を導入。この設定を使用すると、テーブルに対して追加のフィルタ条件を指定でき、読み取り後ただちに適用されます。例: select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}。クエリ結果に対する追加のフィルタ条件を指定する設定 additional_result_filter を導入。#37918 をクローズしました。#38475 (Nikolai Kochetov)。
  • compatibility 設定と、ClickHouse のバージョンをまたいだ設定変更に関する情報を含む system.settings_changes システムテーブルを追加します。#35972 をクローズしました。 #38957Kruglov Pavel)。
  • 関数 translate(string, from_string, to_string)translateUTF8(string, from_string, to_string) を追加しました。いくつかの文字を別の文字に変換する関数です。 #38935 (Nikolay Degterinsky)。
  • parseTimeDelta 関数をサポートしました。 ;-+,: を区切り文字として使用でき、例えば 1yr-2mo2m:6s のように指定できます。SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds')#39071jiahui-97)。
  • CREATE TABLE ... EMPTY AS SELECT クエリを追加しました。SELECT クエリからテーブル構造を自動的に推論しますが、テーブル作成後にデータは挿入されません。#38049 を解決しました。#38272Alexander Tokmakov)。
  • リモートストレージでの I/O 操作を制限するためのオプション max_remote_read_network_bandwidth_for_server および max_remote_write_network_bandwidth_for_server を追加しました。#39095Sergei Trifonov)。
  • ROLLUP、CUBE、GROUPING SETS の場合に集約キー列を NULL 許容(Nullable)にできるようにする group_by_use_nulls 設定を追加しました。#37359 をクローズ。#38642Dmitry Novik)。
  • データエクスポート時に圧縮レベルを指定できる機能を追加しました。 #38907 (Nikolay Degterinsky)。
  • system データベースからの SELECT に明示的な権限付与を必須とするオプションを追加しました。詳細:#38970Vitaly Baranov)。
  • 関数 multiMatchAnymultiMatchAnyIndexmultiMatchAllIndices およびそれらのファジー版は、非 const のパターン配列引数を受け取れるようになりました。 #38485 (Robert Schulze)。SQL 関数 multiSearchAllPositions は、非 const の needle 引数を受け取れるようになりました。 #39167 (Robert Schulze)。
  • 外部ファイルインポート時の zstd デコードにおける最大メモリ使用量を設定できるようにするため、設定項目 zstd_window_log_max を追加しました。 #35693 をクローズしました。 #37015wuxiaobai24)。
  • send_logs_source_regexp 設定を追加しました。指定した正規表現に一致するログソース名のサーバーテキストログを送信します。空文字列の場合はすべてのソースが対象です。 #39161 (Amos Bird)。
  • Hive テーブルに対する ALTER をサポート。 #38214 (lgbo).
  • isNullable 関数をサポートしました。この関数は引数が Nullable かどうかを判定し、1 または 0 を返します。#38611 をクローズしました。#38841lokax)。
  • Base58 エンコード/デコードを行う関数を追加しました。 #38159 (Andrey Zvonov).
  • Play UI にチャート表示を追加。#38197 (Alexey Milovidov)。
  • 配列およびタプルの両方に対して、L2 距離の二乗およびノルム関数を追加しました。 #38545 (Julian Gilyadov).
  • SQL 経由で url テーブル関数 / ストレージに HTTP ヘッダーを渡せるようにしました。#37897 をクローズしました。#38176Kseniia Sumarokova)。
  • パッケージに clickhouse-diagnostics バイナリを追加。#38647 (Mikhail f. Shiryaev)。

実験的機能

  • 単一のクエリをトランザクション内で実行するための新しい設定 implicit_transaction を追加しました。クエリが成功した場合は COMMIT、失敗した場合は ROLLBACK を使用して、トランザクションの開始と終了の両方を自動的に処理します。#38344Raúl Marín)。

パフォーマンスの向上

  • ソート済み列に対する DISTINCT の最適化。DISTINCT 対象の列で入力ストリームがソートされている場合、専用の DISTINCT 変換を使用します。この最適化は pre-distinct、final distinct、またはその両方に適用できます。初期実装は @dimarub2000 によるものです。#37803Igor Nikonov)。
  • バッチ版の BinaryHeap を使用して、ORDER BYMergeTree のマージ、およびウィンドウ関数のパフォーマンスを改善。 #38022 (Maksim Kita)。
  • FINAL を含むクエリの並列実行性を向上 #36396 (Nikita Taranov)。
  • #35616 で導入されていた、結合における大きなパフォーマンス劣化を修正しました。ssb クエリのような一般的な結合クエリが、ほぼ 3 か月もの間 10 倍も遅くなっていたにもかかわらず、誰からも報告されなかったのは興味深い点です。#38052Amos Bird)。
  • Intel hyperscan ライブラリから vectorscan への移行を行いました。これにより、非 x86 プラットフォームにおける多くの文字列マッチング処理が高速化されます。 #38171 (Robert Schulze).
  • 集約後に実行されるクエリプランステップの並列度を向上させました。 #38295 (Nikita Taranov).
  • JSON 型カラムへのデータ挿入性能を改善しました。 #38320 (Anton Popov).
  • HashTable における挿入および検索を最適化しました。 #38413 (Nikita Taranov).
  • #32493 による性能低下を修正。#38417Alexey Milovidov)。
  • SIMD 命令を使用した数値型カラムとの結合処理の性能を改善しました。 #37235 (zzachimed). #38565 (Maksim Kita).
  • 配列に対する Norm 関数および Distance 関数の実行速度が 1.2~2 倍向上しました。 #38740 (Alexander Gololobov)。
  • LZ4 伸長に対して、AVX-512 VBMI で最適化された copyOverlap32Shuffle を追加しました。これにより、LZ4 伸長のパフォーマンスが向上しました。 #37891 (Guo Wangyang).
  • ORDER BY (a, b) は、ORDER BY a, b と同じ利点をすべて享受できます。 #38873 (Igor Nikonov)。
  • ベンチマークをより安定させるために、ブランチを 32 バイト境界に揃えました。 #38988 (Guo Wangyang)。これにより、Intel 環境で平均して 1~2% の性能向上が得られます。
  • Executable UDF、Executable 辞書、および Executable テーブルでは、サブプロセスの終了待ちの際に発生していた 1 秒の無駄な待ち時間がなくなりました。 #38929 (Constantine Peresypkin)。
  • すべてのカラムを選択しないクエリに対する system.stack_trace テーブルへのアクセスを最適化しました。 #39177 (Azat Khuzhin).
  • LowCardinality 引数に対する isNullable / isConstant / isNull / isNotNull のパフォーマンスを改善しました。 #39192 (Kruglov Pavel).
  • ウィンドウ関数での ORDER BY の処理を最適化しました。 #34632 (Vladimir Chebotarev).
  • テーブル system.asynchronous_metric_log は、ストレージ効率がさらに最適化されました。これにより #38134 がクローズされました。YouTube 動画 も参照してください。#38428Alexey Milovidov)。

改善

  • SQL 標準準拠の CREATE INDEX および DROP INDEX 構文をサポートしました。 #35166 (Jianmei Zhang).
  • INSERT クエリに対してもプロファイルイベントの送信をサポートしました(以前は SELECT クエリのみが対象でした)。#37391 (Azat Khuzhin)。
  • 完全マテリアライズドプロジェクションに対して順序集約(optimize_aggregation_in_order)を実装しました。 #37469 (Azat Khuzhin).
  • Kerberos 初期化に使用していた subprocess 実行を削除。新しい統合テストを追加。#27651 をクローズ。#38105Roman Vasin)。
    • 設定 multiple_joins_try_to_keep_original_names を追加し、複数の JOIN の書き換え時に識別子名が書き換えられないようにしました。#34697 をクローズ。#38149Vladimir C)。
  • トレースビジュアライザーの UX を改善。 #38169 (Sergei Trifonov).
  • AArch64 向けにスタックトレースの収集とクエリプロファイラを有効化。 #38181 (Maksim Kita).
  • SQL のユーザー定義関数を読み込む際に、user_defined ディレクトリ内のシンボリックリンクをスキップしないようにしました。#38042 をクローズしました。#38184Maksim Kita)。
  • store/ 内のサブディレクトリをバックグラウンドでクリーンアップする処理を追加しました。場合によっては、clickhouse-server が store/ 内に不要なサブディレクトリ(たとえばテーブル作成に失敗した場合など)を残してしまい、これらのディレクトリが削除されないことがありました。#33710 を修正しました。#38265Alexander Tokmakov)。
  • DESCRIBE CACHE クエリを追加し、設定ファイルからキャッシュ設定を表示できるようにしました。SHOW CACHES クエリを追加し、利用可能なファイルシステムキャッシュの一覧を表示できるようにしました。#38279 (Kseniia Sumarokova).
  • system drop filesystem cache に対するアクセスチェックを追加し、ON CLUSTER をサポート。#38319Kseniia Sumarokova)。
  • 21.3 から 22.3 へのアップグレード時における PostgreSQL データベースエンジンの非互換の問題を修正しました。 #36659 をクローズしました。 #38369Kseniia 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 を表示します。デフォルトでは無効です。#38910Igor Nikonov)。
  • カラム一覧で末尾のカンマを許可。#38425 をクローズ。#38440chen)。
  • parallel_hash JOIN メソッドのバグ修正およびパフォーマンス改善。 #37648 (Vladimir C).
  • Hadoop セキュア RPC 転送(hadoop.rpc.protection=privacy および hadoop.rpc.protection=integrity)をサポートしました。 #37852 (Peng Liu).
  • struct 型のサポートを StorageHive に追加。 #38118 (lgbo).
  • S3 の単一オブジェクトは、現在は RemoveObjectRequest で削除されるようになりました。GCP では removeFileIfExists を使用できず、その結果 remove 機能のおよそ半分が事実上動作しない問題がありましたが、これに対する互換性を実装しました。GCS がサポートしていない DeleteObjects S3 API を自動的に検出するようになりました。これにより、設定で明示的に support_batch_delete=0 を指定しなくても GCS を使用できるようになります。#37882Vladimir Chebotarev)。
  • 基本的な ClickHouse Keeper 関連の監視データ(ProfileEvents および CurrentMetrics 経由)を公開。 #38072 (lingpeng0314).
  • PostgreSQL エンジン接続で auto_close オプションをサポートしました。#31486 をクローズ。#38363Kseniia Sumarokova)。
  • テーブル関数のカラム宣言で NULL 修飾子を使用可能にしました。#38816Kruglov Pavel)。
  • シャットダウン中に発生する無害な TABLE_IS_READ_ONLY エラーを回避するため、シャットダウン前に mutations_finalizing_task を無効化します。 #38851 (Raúl Marín)。
  • 非推奨の Ordinary データベースを使用している場合に、INSERT クエリが存在していても、ALTER クエリの後に続く SELECT クエリで発生していた不要な待機が発生しないようにしました。 #38864 (Azat Khuzhin).
  • EXPLAIN AST に新しいオプション rewrite が追加されました。有効にすると書き換え後の AST を表示し、無効の場合は元のクエリの AST を表示します。デフォルトでは無効です。 #38910 (Igor Nikonov)。
  • 予期される場合には、Zookeeperの「Node exists」例外を system.errors に報告しないようにしました。 #38961 (Raúl Marín)。
  • clickhouse-keeper: リアルタイムダイジェストの計算および検証のサポートを追加。デフォルトでは無効になっています。 #37555 (Antonio Andelic).
  • clickhouse-extract-from-config ツールのキー内で、* または {expr1, expr2, expr3} のような glob パターンを指定できるようにしました。 #38966 (Nikita Mikhaylov).
  • clearOldLogs: 並行削除時に KEEPER_EXCEPTION を報告しないようにしました。 #39016 (Raúl Marín).
  • clickhouse-keeper の改善:keeper サーバーに関するメタ情報をディスク上に永続化します。 #39069 (Antonio Andelic)。これにより、すべての keeper ノードを同時にシャットダウンまたは再起動する場合の運用が容易になります。
  • ファイルシステムキャッシュ使用時にディスク容量が不足しても、例外を送出せずに処理を継続するようにしました。 #39106 (Kseniia Sumarokova).
  • k8s から送信される SIGTERM シグナルの処理。 #39130 (Timur Solodovnikov).
  • merge_algorithm カラム(Undecided、Horizontal、Vertical)を system.part_log に追加しました。 #39181 (Azat Khuzhin).
  • ディスクが回転ディスクでない場合に system.errors のカウンターを増やさないようにしました。 #39216 (Raúl Marín).
  • system.query_log 内の INSERT クエリに対するメトリクス result_bytes は、挿入されたバイト数を示します。以前は誤った値が記録されており、result_rows と同じ値が保存されていました。#39225Ilya Yatsishin)。
  • clickhouse-client における CPU 使用率メトリクスが、よりわかりやすい形式で表示されるようになりました。 #38756 を修正しました。 #39280Sergei Trifonov)。
  • サーバー起動時のファイルシステムキャッシュの初期化で例外を再スローし、エラーメッセージを改善。 #39386 (Kseniia Sumarokova).
  • OpenTelemetry は、デフォルトでは Processors スパンを収集しなくなりました(数が多すぎるため)。Processors スパンの収集を有効にするには、opentelemetry_trace_processors 設定を有効化してください。 #39170 (Ilya Yatsishin).
  • 関数 multiMatch[Fuzzy](AllIndices/Any/AnyIndex) で、needle 引数が空の場合でも論理エラーを発生させないようにしました。 #39012 (Robert Schulze).
  • デフォルト引数 x-max-length および x-overflow を指定せずに RabbitMQ キューを宣言できるようにしました。 #39259 (rnbondarenko)。

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

  • ClickHouse に Clang Thread Safety Analysis (TSA) アノテーションを適用。#38068 (Robert Schulze).
  • FreeBSD 向けにユニバーサルインストールスクリプトを対応。#39302 (Alexey Milovidov).
  • s390x プラットフォームでのビルドに向けた準備。#39193 (Harry Lee).
  • jemalloc ライブラリのバグを修正。#38757 (Azat Khuzhin).
  • ハードウェアベンチマークが結果の自動アップロードをサポートするようになりました。#38427 (Alexey Milovidov).
  • システムテーブル system.licenses が Mac (Darwin) 上で正しく登録されるようになりました。#38294 (Robert Schulze).
  • all|noarch パッケージをアーキテクチャ依存に変更 - それに関するドキュメントの一部を修正 - aarch64|arm64 パッケージを Artifactory およびリリースアセットにプッシュ - #36443 を修正。#38580 (Mikhail f. Shiryaev).

バグ修正(公式安定版またはプレリリース版におけるユーザーに可視の不具合)

  • 19 桁を超えるスケールを持つ Decimal128/Decimal256 の丸め処理を修正しました。 #38027 (Igor Nikonov).
  • ストレージ Hive(Integration テーブルエンジン)におけるデータレースが原因のクラッシュを修正しました。 #38887 (lgbo)。
  • ON CLUSTER 句を伴う GRANT ALL ON *.* の実行時にクラッシュが発生する問題を修正しました。この問題は https://github.com/ClickHouse/ClickHouse/pull/35767 によって導入されていました。本修正により #38618 がクローズされます。 #38674 (Vitaly Baranov).
  • {0..10} 形式の場合のグロブ展開を正しく行うよう修正しました。 #38498 を解決。現在の実装はシェルの動作に類似しており、その点については @rschu1ze が こちら で言及しています。 #38502Heena Bansal)。
  • 定数の map 引数を使用した場合に mapUpdatemapFilter 関数がクラッシュする不具合を修正しました。#38547 をクローズしました。#38553hexiaoting)。
  • クエリ最適化のための toHour の単調性情報を修正しました。これが原因で、誤ったインデックス解析に伴う不正確なクエリ結果が発生する可能性がありました。この修正は #38333 を解決します。 #38675 (Amos Bird)。
  • s3 ストレージが並列書き込みをサポートしているかどうかの判定処理を修正しました。この不具合により、s3 への並列書き込みが動作していませんでした。 #38792 (chen).
  • 並列読み取りバッファを使用する S3 のシーク可能な読み取りを修正しました(クエリ実行時のメモリ使用量に影響していた問題)。#38258 をクローズ。#38802Kseniia Sumarokova)。
  • simdjson を更新しました。これにより、最新の Intel CPU(AVX-512 VBMI 搭載マシン)で発生していたバッファオーバーフローの問題 #38621 が修正されます。 #38838Alexey Milovidov)。
  • Vertical merge で発生しうる論理エラーを修正。#38859Maksim Kita)。
  • 秒単位を使用する設定プロファイルを修正。#38896Raúl Marín)。
  • NULL 許容のパーティションキーがある場合に、パーティションプルーニングが誤って行われる問題を修正しました。注意: おそらく、NULL 許容のパーティションキーは使用していないはずです — これは、そもそも使うべきでないマイナーな機能です。NULL 許容キーはそもそも意味を成さず、この機能はごく一部の非常に特殊なユースケースのためだけに存在します。これにより #38941 が修正されました。#38946 (Amos Bird)。
  • フェッチ時の fsync_part_directory を改善。 #38993 (Azat Khuzhin).
  • OvercommitTracker 内で発生し得るデッドロックを修正し、#37794 を解決。#39030Dmitry Novik)。
  • ファイルシステムキャッシュのバグを修正しました。このバグは、キャッシュ容量が上限に達したタイミングと重なるごく稀なケースで発生する可能性がありました。 #39066 をクローズ。 #39070Kseniia Sumarokova)。
  • ウィンドウ式の引数の解釈に関するいくつかのコーナーケースを修正しました(#38538)。また、ウィンドウ式で高階関数を使用できるようにしました(#39112Dmitry Novik)。
  • tuple 関数内で LowCardinality 型を保持するようにしました。以前は LowCardinality 型が失われ、作成されたタプルの要素は LowCardinality の基になる型になっていました。 #39113 (Anton Popov).
  • extremes = 1 設定が有効になっている、マテリアライズドビューがアタッチされているテーブルへの INSERT で発生する可能性があるエラー Block structure mismatch を修正しました。 #29759 および #38729 をクローズしました。 #39125 (Nikolai Kochetov)。
  • optimize_trivial_count_queryempty_result_for_aggregation_by_empty_set の両方が true に設定されている場合に発生する、予期しないクエリ結果の問題を修正しました。この修正で #39140 が解決されました。 #39155 (Amos Bird)。
  • PREWHERE および read-in-order 最適化を用いる SELECT クエリで発生していた Not found column Type in block エラーを修正しました。 #39157 (Yakov Olkhovskiy).
  • リモートファイルシステムでのハードリンク処理時に発生する、極めてまれなレースコンディションを修正しました。これを再現する唯一の方法は、バックアップを並行実行することです。 #39190 (alesapin).
  • (zero-copy replication は本番環境では使用すべきでない実験的機能です)allow_remote_fs_zero_copy_replication を使用したインメモリパートのフェッチ処理を修正。 #39214 (Azat Khuzhin)。
  • (MaterializedPostgreSQL - 実験的機能)。レプリケーション初期化時に例外が発生した場合に発生する可能性があった、MaterializedPostgreSQL データベースエンジンでのセグメンテーションフォールトを修正しました。#36939 をクローズ。#39272Kseniia Sumarokova)。
  • PostgreSQL データベースエンジンからのテーブルメタデータの誤った取得を修正。 #33502 をクローズ。 #39283 (Kseniia Sumarokova)。
  • 集約キーが他の関数でラップされている場合に発生する projection 例外を修正しました。これにより #37151 が解決されます。#37155Amos Bird)。
  • 一部の関数で発生する可能性のあった論理エラー ... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ... を修正しました。クローズ: #37610 クローズ: #37741#37759Kruglov Pavel)。
  • UNION のサブクエリにおける列順序の誤りを修正(サブセレクト内で列が重複している場合に、誤った結果が生成される可能性がある問題)。 #37887 (Azat Khuzhin).
  • ドットを含むカラム名に対する MODIFY ALTER COLUMN の誤動作を修正。#37907 をクローズ。#37971Kruglov Pavel)。
  • S3 にデータを格納している MergeTree テーブルからのスパース列の読み込みを修正します。 #37978 (Anton Popov).
  • 設定からレプリカを削除した場合に Distributed テーブルへの非同期インサートがクラッシュする可能性があった問題を修正。 #38029 (Nikolai Kochetov).
  • エイリアスなしの CTE を使用した GLOBAL JOIN で発生する「Missing columns」エラーを修正。 #38056 (Azat Khuzhin).
  • 後方互換性モードでタプル関数をリテラルとして書き換えるようになりました。 #38096 (Anton Kozlov).
  • ORDER BY 時の出力ブロックに対する不要なメモリ予約を修正。#38127iyupeng)。
  • 配列に対する mapped 関数で発生する可能性のある論理エラー Bad cast from type DB::IColumn* to DB::ColumnNullable* を修正しました。#38006 をクローズしました。#38132Kruglov Pavel)。
  • 部分マージ結合における一時的な名前競合を修正し、#37928 をクローズ。#38135 (Vladimir C).
  • CREATE TABLE nested_name_tuples (a Tuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory; のようなクエリに関する軽微な問題 #38136 (lgbo)。
  • 入れ子になったショートサーキット関数で、条件が false の場合でも引数が評価されてしまうバグを修正しました。 #38040 をクローズ。 #38173Kruglov 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 をクローズしました。#38356Kseniia Sumarokova)。
  • MaterializedPostgreSQL - 実験的な機能。MaterializedPostgreSQL で発生しうる Invalid number of rows in Chunk エラーを修正。 #37323 をクローズ。 #38360Kseniia Sumarokova)。
  • 接続文字列の設定で RabbitMQ の構成を修正しました。#36531 をクローズ。#38365Kseniia Sumarokova)。
  • PostgreSQL エンジンが配列の次元サイズを取得する際に PostgreSQL スキーマを使用していなかった問題を修正。#36755 をクローズ。#36772 をクローズ。#38366Kseniia Sumarokova)。
  • DISTINCTLIMIT を含む分散クエリで結果が誤る可能性がある問題を修正。 #38282 を修正。 #38371Anton Popov)。
  • 0バイトを含むパターンでの countSubstrings() および position() の誤った結果を修正。 #38589 (Robert Schulze).
  • これにより、IPv4/IPv6 表現が不正なテーブルに対しても、clickhouse-server を起動し、テーブルのアタッチやデタッチを行うことが可能になりました。Issue #35156 の正式な修正です。#38590alesapin)。
  • 一部の引数が NaN の場合でも rankCorr 関数が正しく動作するようになりました。これにより #38396 が解決されました。#38722Alexey Milovidov)。
  • parallel_view_processing=1optimize_trivial_insert_select=1 を組み合わせて使用した場合の問題を修正しました。ビューへのデータ挿入時の max_insert_threads の動作を修正しました。 #38731 (Azat Khuzhin).
  • Map コンビネータを用いる集約関数において、誤った結果につながる use-after-free を修正しました。 #38748 (Azat Khuzhin).

ClickHouse リリース 22.6, 2022-06-16

後方互換性のない変更

  • SQL における8進数リテラルのサポートを削除しました。以前のバージョンでは、それらは Float64 としてパースされていました。 #37765 (Yakov Olkhovskiy).
  • 型として seconds を使用する設定値のパース方法を変更し、浮動小数点値(例: max_execution_time=0.5)をサポートしました。Infinity または NaN の値は例外をスローします。 #37187 (Raúl Marín).
  • 実験的型 Object のカラムに対するバイナリシリアライゼーション形式を変更しました。新しい形式はサードパーティクライアントによる実装がより容易です。 #37482 (Anton Popov).
  • 設定 output_format_json_named_tuples_as_objects をデフォルトで有効化しました。これにより、JSON フォーマットで名前付きタプルを JSON オブジェクトとしてシリアライズできるようになります。 #37756 (Anton Popov).
  • 終端がエスケープ記号('\')である LIKE パターンは、SQL 標準に従い、現在は許可されません。 #37764 (Robert Schulze).
  • AArch64 CPU を搭載したクラスタ上で異なる ClickHouse バージョンを実行している場合、または 1 つのクラスタで AArch64 と amd64 を混在させており、さらに固定サイズ型で 256 ビット以内だが 64 ビットには収まらない複数キーで GROUP BY を行う分散クエリを使用していて、その結果集合のサイズが非常に大きい場合、ローリングアップグレード中にこれらのクエリを実行すると、結果内のデータが完全には集約されません。回避策: ローリングアップグレードではなく、ダウンタイムを伴うアップグレードを実施してください。

新機能

  • GROUPING 関数を追加しました。これにより、ROLLUPCUBEGROUPING SETS を使用するクエリ内のレコードを区別できるようになります。#19426 をクローズしました。#37163Dmitry Novik)。
  • 浮動小数点データ圧縮用の新しいコーデックアルゴリズム FPC#37553Mikhail Guzov)。
  • 新しいカラム指向 JSON フォーマット JSONColumnsJSONCompactColumnsJSONColumnsWithMetadata を追加。 #36338 および #34509 をクローズ。 #36975Kruglov Pavel)。
  • d3js に基づく OpenTelemetry のトレース可視化ツールを追加しました。 #37810 (Sergei Trifonov).
  • system.zookeeper テーブルへの INSERT をサポートしました。 #22130 をクローズしました。 #37596Han Fei)。
  • LIKEILIKEmatch 関数で非定数のパターン引数をサポートしました。#37251 (Robert Schulze)。
  • 実行可能なユーザー定義関数でパラメータをサポートするようになりました。例:SELECT test_function(parameters)(arguments)#37578 をクローズしました。 #37720Maksim Kita)。
  • system.part&#95;log テーブルに merge_reason 列を追加。 #36912 (Sema Checherinda).
  • Avro フォーマットで Maps および Records 型をサポートしました。Avro フォーマットで null をデフォルト値として挿入できるようにする新しい設定 input_format_avro_null_as_default を追加しました。#18925#37378、および #32899 をクローズ。#37525Kruglov Pavel)。
  • ClickHouse 用に構成された仮想ファイルシステムを調査および操作するための clickhouse-disks ツールを追加。 #36060 (Artyom Yurkov).
  • H3 の単方向エッジ関数を追加します。#36843 (Bharat Nallan).
  • 符号なし整数から hashids を計算する機能を追加しました。#37013Michael Nutt)。
  • CREATE USER <user> IDENTIFIED WITH sha256_hash において、SALT を明示的に指定できるようになりました。#37377Yakov 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]) を追加しました。 #37628Andrey Zvonov)。
  • ReplicatedMergeTree テーブルに対するコメント変更機能を実装しました。 #37416 (Vasily Nemkov)。
  • 対応するテーブルの削除有無にかかわらずバックアップ全体を削除するための SYSTEM UNFREEZE クエリを追加しました。 #36424 (Vadim Volodin).

実験的機能

  • WINDOW VIEW に対して POPULATE を有効にします。#36945 (vxider).
  • WINDOW VIEW に対する ALTER TABLE ... MODIFY QUERY をサポートします。#37188 (vxider).
  • この PR により、WINDOW VIEW における ENGINE 構文の挙動が変更され、MATERIALIZED VIEW と同様になります。#37214 (vxider).

パフォーマンスの向上

  • ARM NEON 向けの多数の最適化を追加しました #38093 (Daniel Kutenin), (Alexandra Pilipyuk)。注意:ARM CPU を搭載したクラスター上で異なるバージョンの ClickHouse を実行しており、256 ビットには収まるが 64 ビットには収まらない固定サイズ型の複数キーで GROUP BY を行う分散クエリを使用している場合、アップグレード中に集約クエリの結果が誤ったものになります。回避策:ローリングアップグレードではなく、ダウンタイムを伴うアップグレードを実施してください。
  • Native、Protobuf、CapnProto、JSONEachRow、TSKV、および WithNames/WithNamesAndTypes というサフィックスを持つすべてのフォーマットについて、カラムのサブセットのみを選択する場合のパフォーマンスとメモリ使用量を改善しました。これらのフォーマットのファイルから一部のカラムのみを選択しても、これまではすべてのカラムが読み込まれ、メモリに保持されていましたが、現在は必要なカラムのみが読み込まれます。この PR により、デフォルトで input_format_skip_unknown_fields が設定されるようになりました。そうしない場合、一部のカラムのみを選択すると例外がスローされてしまうためです。 #37192 (Kruglov Pavel).
  • JOIN に対して、さらに多くのフィルタをプッシュダウンできるようになりました。 #37472 (Amos Bird)。
  • ワイドパーツを読み取る際には、必要なカラムのマークだけをロードするよう最適化しました。 #36879 (Anton Kozlov).
  • MergeTree テーブルで実験的設定 ratio_of_defaults_for_sparse_serialization を有効化することで使用可能な疎なカラムを、集約関数の引数として使用している場合の集約処理性能を改善しました。#37617 (Anton Popov)。
  • 2 つの引数を取る COALESCE 関数を最適化。 #37666 (Anton Popov).
  • multiIf に条件が 1 つしかない場合は、より高いパフォーマンスを持つ if 関数に置き換えます。 #37695 (Anton Popov).
  • dictGetDescendantsdictGetChildren 関数のパフォーマンスを向上しました。クエリ実行中に、関数呼び出しごとではなくクエリごとに一時的な親から子への階層インデックスを作成するよう変更しました。HIERARHICAL 属性に対して BIDIRECTIONAL を指定できるようにし、辞書がメモリ上に親から子へのインデックスを保持することで、dictGetDescendantsdictGetChildren 関数がクエリごとに一時インデックスを作成しないようにしました。#32481 をクローズ。#37148Maksim 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).
  • greatCircleAnglegreatCircleDistancegeoDistance 関数のパフォーマンスを改善しました。 #37524 (Maksim Kita).
  • ORDER BY に複数のカラムがある場合の MergeTree への挿入時のパフォーマンスを改善。 #35762 (Maksim Kita).
  • テーブルが多数ある場合のバックグラウンドでの過剰な CPU 使用を修正。 #38028 (Maksim Kita).
  • 動的ディスパッチを使用して not 関数のパフォーマンスを向上。#38058 (Maksim Kita).
  • LIKE 関数や MATCH 関数で使用される re2 パターンの内部キャッシュを最適化しました。 #37544 (Robert Schulze)。
  • フィルタビットマスク生成関数を AVX-512 命令によるオールインワン実装に改善しました。 #37588 (yaqi-zhao).
  • Hive integration engine に read メソッド threadpool を適用しました。これにより読み取りが大幅に高速化されます。 #36328 (李扬).
  • 読み取る列がすべてパーティションキーである場合、Hive ファイルを実際に読み込むことなく、ファイル内の行番号に基づいて列を構築するようにしました。 #37103 (lgbo).
  • 複数ディスクでの Hive ファイルキャッシュをサポート。 #37279 (lgbo).
  • クエリごとのキャッシュ最大使用量を制限することで、キャッシュプールの汚染を効果的に防止できます。関連 Issue#37859Han Shukai)。
  • 現在、ClickHouse はすべてのリモートファイルをローカルキャッシュに直接ダウンロードします(1 回しか読み込まれない場合でも同様です)。その結果、ローカルハードディスクへの I/O が頻発します。いくつかのシナリオでは、これらの I/O は必ずしも必要ではなく、かえって性能を悪化させる「最適化」になってしまう可能性があります。以下の図に示すように、SSB Q1〜Q4 を実行した場合、キャッシュによってかえって性能が劣化しています。#37516Han Shukai)。
  • S3 から読み込む際に、_file_path などの仮想カラムを使ってファイルのリストを絞り込めるようにしました。これは #37174#23494 に対応するものです。#37356Amos Bird)。
  • 関数 CompressedWriteBuffer::nextImpl() において、データ挿入時に頻繁に発生する不要な write-copy 処理があります。以下にこのパッチ適用前後の違いを示します。- 変更前: 1. 「working_buffer」を「compressed_buffer」に圧縮する 2. 「out」に write-copy する - 変更後: 「working_buffer」を直接「out」に圧縮する。#37242jasperzhu)。

改善

  • ROLLUP、CUBE、GROUPING SETS で、非標準のデフォルト値を持つ型をサポート。 #37360 をクローズ。 #37667Dmitry Novik)。
  • ARM 上でのスタックトレース収集の問題を修正。Closes #37044。Closes #15638#37797 (Maksim Kita)。
  • クライアントは、接続に成功するまで DNS 解決で得られたすべての IP アドレスに対して接続を試みます。 #37273 (Yakov Olkhovskiy).
  • Arrow/Parquet/ORC フォーマットで Binary 型ではなく String 型を使用できるようにします。この PR では、そのための新しい設定 output_format_arrow_string_as_stringoutput_format_parquet_string_as_stringoutput_format_orc_string_as_string を 3 つ導入しています。すべての設定のデフォルト値は false です。 #37327 (Kruglov Pavel)。
  • グロブ内のすべてのファイルから読み取られる行を合計した全体に対して、設定 input_format_max_rows_to_read_for_schema_inference を適用するようにしました。以前は、設定 input_format_max_rows_to_read_for_schema_inference はグロブ内の各ファイルごとに個別に適用されており、null が非常に多い場合には、各ファイルから最初の input_format_max_rows_to_read_for_schema_inference 行を読み込んでもスキーマを推測できない可能性がありました。また、この設定のデフォルト値を 25000 に引き上げました。 #37332 (Kruglov Pavel).
  • 個別の CLUSTER 権限(および後方互換性のための access_control_improvements.on_cluster_queries_require_cluster_grant 設定ディレクティブ、デフォルトは false)を追加しました。#35767Azat Khuzhin)。
  • hdfsCluster 向けにスキーマ推論のサポートを追加しました。 #35812 (Nikita Mikhaylov).
  • ボリューム内のディスク(マルチディスク構成)向けに least_used ロードバランシングアルゴリズムを実装しました。 #36686 (Azat Khuzhin).
  • send_progress_in_http_headers=0 のときに(それ以前はすべて 0 を返していた)X-ClickHouse-Summary ヘッダーで完全な統計情報を返すように HTTP エンドポイントを変更。- 進行状況がすでに送信されている場合(send_progress_in_http_headers=1)に X-ClickHouse-Exception-Code ヘッダーを返すように HTTP エンドポイントを変更。- TIMEOUT_EXCEEDED エラー時に HTTP_INTERNAL_SERVER_ERROR (500) ではなく HTTP_REQUEST_TIMEOUT (408) を返すように HTTP エンドポイントを変更。#36884 (Raúl Marín)。
  • ユーザーがロール経由で付与された権限を確認できるようにしました。 #36941 (nvartolomei).
  • 積分を数値的に計算するのではなく、CDF 関数を使用します。これにより実行速度が向上し、精度も高くなります。これによって #36714 が修正されました。#36953Nikita 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 をクローズしました。#37048Kruglov Pavel)。
  • 現在、シャードにローカルレプリカがある場合は、ローカル読み取り用のプランと、すべてのリモートレプリカから読み取るプランの2つを作成します。両方のプランは同じイニシエータを共有しており、そのイニシエータが読み取りを調整します。#37204 (Nikita Mikhaylov)。
  • 設定オプション「mark_cache_size」が明示的に設定されていないことを理由にサーバーの起動を中止しないようにしました。 #37326 (Robert Schulze)。
  • カラム定義で、型名の直後に NULL/NOT NULL を指定できるようになりました。 #37337 (Igor Nikonov).
  • ファイルセグメント PARTIALLY_DOWNLOADED の read buffer の取得を最適化。 #37338 (xiedeyantu).
  • ストレステストで発生していた問題を修正するため、短絡評価関数の処理を改善しました。 #37384 (Kruglov Pavel).
  • #37395 をクローズします。#37415Memo)。
  • ゼロコピー レプリケーションにおけるパート フェッチ中に極めてまれに発生するデッドロックを修正し、#37423 を解決。#37424metahys)。
  • 不明なデータ形式を使用するストレージは作成できないようにしました。 #37450 (Kruglov Pavel).
  • global_memory_usage_overcommit_max_wait_microseconds のデフォルト値を 5 秒に設定しました。OOM 例外メッセージに OvercommitTracker に関する情報を追加しました。MemoryOvercommitWaitTimeMicroseconds プロファイルイベントを追加しました。#37460Dmitry Novik)。
  • clickhouse-client で -0.0 の CPU 時間を表示しないようにしました。これは丸め誤差により発生することがあります。これにより #38003 がクローズされます。これにより #38038 がクローズされます。 #38064Alexey Milovidov)。
  • Play UI:ページを水平方向にスクロールしてもコントロールがその場に固定されるようになりました。これにより、テーブルが横に長く、右方向へ大きくスクロールしている場合でも快適に編集できます。この機能は CaspianDB の Maksym Tereshchenko によって提案されました。 #37470 (Alexey Milovidov)。
  • play.html の query div を、高さ 20% を超えて拡張できるように変更しました。非常に長いクエリの場合、textarea 要素を拡張できると便利ですが、これまでは div の高さが固定のため、textarea を拡張すると下にある data div が隠れてしまっていました。この修正により、textarea 要素を拡張した際に data div が上下に押し出され、拡張された textarea に隠れないようになります。また、ユーザーが query textarea のサイズを調整しても、クエリボックスの幅が常に 100% のままになるようにしています。 #37488 (guyco87).
  • 書き込まれた(挿入またはマージされた)パーツの種類を把握できるようにするための ProfileEventsInserted{Wide/Compact/InMemory}PartsMergedInto{Wide/Compact/InMemory}Parts)を追加しました。system.part_log に列 part_type を追加しました。#37495 を解決しました。#37536Anton Popov)。
  • clickhouse-keeper の改善: 破損したログをタイムスタンプ付きフォルダに移動します。 #37565 (Antonio Andelic).
  • 以降のマージでは、TTL により期限切れになった列を書き込まないようにしました(以前は、そのパーツに対する最初の merge/optimize のみが TTL で期限切れになった列を書き込まず、それ以外のマージでは書き込んでいました)。 #37570 (Azat Khuzhin).
  • LowCardinality または Sparse カラムが存在する場合の dumpColumnStructure 種々の関数の結果が、より正確になりました。以前のバージョンでは、これらの関数は結果を返す前に引数をフルカラムへ変換していました。この変更は #6935 への回答として必要なものでした。#37633Alexey Milovidov)。
  • clickhouse-keeper: watch 用に一意のセッション ID のみを保存。 #37641 (Azat Khuzhin).
  • 発生し得る「Cannot write to finalized buffer」エラーを修正。 #37645 (Azat Khuzhin).
  • DiskS3 向けに設定 support_batch_delete を追加し、Google Cloud Storage がサポートしていない複数オブジェクト削除の呼び出しを無効化できるようにしました。 #37659 (Fred Wulff).
  • ODBC ブリッジで接続プーリングを無効にするオプションを追加しました。 #37705 (Anton Kozlov).
  • 関数 dictGetHierarchydictIsIndictGetChildrendictGetDescendants が、辞書内の NULL を許容する HIERARCHICAL 属性をサポートするようになりました。これにより、#35521 がクローズされました。#37805Maksim Kita)。
  • system.build_options テーブルで BoringSSL のバージョンに関する情報を公開しました。 #37850 (Bharat Nallan).
  • clickhouse-server はサーバー起動時に delete_tmp ディレクトリを削除するようになりました。これにより #26503 が修正されました。 #37906alesapin)。
  • タイムアウト後に壊れた detached パーツをクリーンアップします。#25195 をクローズします。 #37975 (Kseniia Sumarokova).
  • 現在では、MergeTree テーブルエンジンファミリーでは、移動に失敗したパーツは即座に削除されるようになりました。 #37994 (alesapin)。
  • always_fetch_merged_part 設定が ReplicatedMergeTree に対して有効になっている場合、マージ時に他のレプリカ上のパーツを探す頻度が低くなり、[Zoo]Keeper への負荷も軽減されます。 #37995 (alesapin).
  • GRANT OPTION 付きの暗黙的な権限付与も追加しました。たとえば GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTION により、AGRANT CREATE VIEW ON test.* TO B を実行できるようになりました。#38017 (Vitaly Baranov)。

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

  • ビルドに clang-14 と LLVM インフラストラクチャバージョン 14 を使用します。これにより #34681 がクローズされます。#34754Alexey Milovidov)。注意: clang-14 には ThreadSanitizer のバグがあり、CI の動作に悪影響があります。
  • 起動時に権限をドロップできるようにしました。これにより Docker イメージが簡素化されます。#36293 をクローズします。#36341Alexey Milovidov)。
  • CI にドキュメントのスペルチェックを追加しました。#37790Vladimir C)。
  • 実行ファイルの整合性チェックに必要な埋め込みハッシュまで削除してしまっていた、過度にアグレッシブな strip 処理を修正しました。#37993Robert Schulze)。

バグ修正

  • 定数文字列型を扱う SELECT ... INTERSECT および EXCEPT SELECT ステートメントを修正しました。 #37738 (Antonio Andelic).
  • GROUP BYAggregateFunction を使用した場合の動作を修正 (つまり、AggregateFunction 型の列を GROUP BY に含めた場合)。 #37093 (Azat Khuzhin).
  • (experimental WINDOW VIEW) WindowView 内の addDependency を修正。バグは #37237 と同様に再現できます。 #37224 (vxider).
  • ORDER BY ... WITH FILL 機能の一貫性のない動作を修正しました。複数の WITH FILL 列が存在する場合、ORDER BY ... WITH FILL を含むクエリで余分な行が生成されることがありました。#38074 (Yakov Olkhovskiy).
  • このPRでは、ドロップされたテーブルに依存関係が追加されることを避けるために、addDependency をコンストラクタから startup() へ移動し、#37237 を修正します。#37243vxider)。
  • カラム形式での欠損値に対するデフォルト値の挿入を修正。これまでは欠損しているカラムに対して、カラム固有のデフォルト値ではなく、型のデフォルト値が埋められていました。 #37253 (Kruglov Pavel).
  • (experimental Object type)Object 型カラムへのネストした配列の挿入に関するいくつかのケースを修正しました。 #37305 (Anton Popov).
  • 集約関数、prewhere、join における定数文字列の競合によって発生する予期しないエラーを修正しました。#36891 をクローズ。#37336Vladimir C)。
  • クエリ内の GROUP/ORDER BY を含むプロジェクションと optimize_aggregation_in_order を修正(以前は最終ソートのみが実行されていたため、結果が正しくありませんでした)。 #37342 (Azat Khuzhin).
  • S3 のキー名に含まれる記号が原因のエラーを修正。#33009 を解決。#37344Vladimir Chebotarev)。
  • GROUPING SETS を ROLLUP または CUBE と併用した場合に例外をスローするようにしました。 #37367 (Dmitry Novik).
  • config.xml(新しい方法)で background_pool_size / background_merges_mutations_concurrency_ratio に標準外のより大きな値が指定され、users.xml(非推奨の方法)では指定されていない場合に、マージ処理中の getMaxSourcePartsSizeForMerge 内で発生する LOGICAL_ERROR を修正。#37413 (Azat Khuzhin).
  • RowBinary フォーマットで UTF-8 の BOM を削除しないようにしました。#37428 (Paul Loyd). #37428 (Paul Loyd).
  • clickhouse-keeper のバグ修正: シングルノードクラスタにおける強制リカバリ処理を修正。 #37440 (Antonio Andelic).
  • normalizeUTF8 関数の論理的な不具合を修正。#37298 をクローズ。#37443Maksim Kita)。
  • JoinSwitcher における Nullable の LowCardinality 型のキャスト処理を修正し、#37385 をクローズ。#37453Vladimir C)。
  • ORC/Arrow/Parquet フォーマットにおける named tuple の出力を修正しました。 #37458 (Kruglov Pavel).
  • GROUPING SETS 使用時の ORDER BY 句における単調関数の最適化を修正。 #37401 を修正。 #37493 (Dmitry Novik)。
  • 特定の条件で辞書との JOIN 時に発生していたエラーを修正しました。#37386 をクローズしました。#37530 (Vladimir C)。
  • GROUPING SETS 使用時には optimize_aggregation_in_order を禁止(LOGICAL_ERROR を修正)。#37542Azat Khuzhin)。
  • ActionsDAG の誤っていたダンプ情報を修正しました。 #37587 (zhanglistar).
  • UNION クエリにおける型変換処理を修正(LOGICAL_ERROR を引き起こす場合がありました)。 #37593 (Azat Khuzhin).
  • STEP 句で負の間隔を使用した場合の WITH FILL 修飾子を修正。#37514 を解決。#37600Anton Popov)。
  • join_use_nulls = 1 の場合の joinGet 配列の不正な使用を修正。これにより #37562 を解決します。 #37650 (Amos Bird).
  • クロス結合での列数不一致を修正し、#37561 をクローズ。#37653Vladimir C)。
  • named collections を使用するよう構成された MySQL データベースで show create table を実行した際に発生するセグメンテーションフォルトを修正します。#37683 をクローズします。#37690Kseniia Sumarokova)。
  • SETTINGS 句を指定せずにストレージを作成した場合に、サーバー再起動時に RabbitMQ Storage が起動できない問題を修正しました。#37463 をクローズしました。 #37691Kseniia Sumarokova)。
  • SQL のユーザー定義関数で、read-only モード時の CREATE/DROP を無効化しました。これにより #37280 がクローズされました。#37699 (Maksim Kita).
  • 実行可能なユーザー定義関数における Nullable 引数のフォーマットを修正しました。#35897 をクローズしました。#37711 (Maksim Kita).
  • 分散クエリで optimize_monotonous_functions_in_order_by を有効にした際の最適化を修正しました。 #36037 を修正。 #37724Anton Popov)。
  • values テーブル関数で発生する可能性のある論理エラー Invalid Field get from type UInt64 to type Float64 を修正しました。#37602 をクローズします。#37754Kruglov Pavel)。
  • SchemaReader コンストラクタ内で例外が発生した場合に、スキーマ推論でセグメンテーションフォルトが発生する可能性があった問題を修正。#37680 をクローズ。#37760Kruglov Pavel)。
  • 内部 cast 関数用の設定 cast_ipv4_ipv6_default_on_conversion_error を修正。 #35156 をクローズ。 #37761 (Maksim Kita)。
  • DataTypeDate32 の toString で発生するエラーを修正。 #37775 (LiuNeng).
  • clickhouse-keeper の設定項目 dead_session_check_period_ms がマイクロ秒(1000 倍)に変換されてしまい、その結果、デッドセッションのクリーンアップが(500ms ではなく)数分後にしか行われない状態になっていました。 #37824 (Michael Lex)。
  • async_socket_for_remote/use_hedged_requests が無効な場合に、分散クエリで発生しうる "No more packets are available" エラーを修正。 #37826 (Azat Khuzhin).
  • (実験的 WINDOW VIEW)WindowView で ALTER TABLE ... MODIFY QUERY を実行しても、内部のターゲットテーブルを削除しないようにしました。 #37879 (vxider)。
  • clickhouse-keeper の Docker イメージ内にある coordination ディレクトリの所有権設定を修正。#37914 を解決。#37915James Maidment)。
  • ディクショナリで、update フィールドと {condition} を使用するカスタムクエリを修正しました。 #33746 をクローズします。 #37947Maksim Kita)。
  • ORDER BYWITH FILL の結果に対して後から適用される場合(例: 外側クエリ)に、SELECT ... WITH FILL の結果が誤る可能性がある問題を修正しました。誤った結果は、ORDER BY 式に対する最適化が原因でした(#35623)。#37904 をクローズしました。#37959Yakov Olkhovskiy)。
  • (実験的機能 WINDOW VIEW)WindowView でターゲットテーブルに挿入する際に不足していたデフォルト列を追加し、#37815 を修正しました。#37965vxider)。
  • コンパイルエラーの原因となっていた過大なスタックフレームを修正しました。 #37996 (Han Shukai)。
  • enable_filesystem_query_cache_limit を有効化したときに、"Reserved cache size exceeds the remaining cache size." というエラーをスローするようにしました。 #38004 (xiedeyantu)。
  • UNION クエリにおける型変換処理を修正しました(LOGICAL_ERROR が発生する場合がありました)。 #34775 (Azat Khuzhin).
  • BackgroundExecutor がビジーな場合、TTL マージが再度スケジュールされないことがあります。 --merges_with_ttl_counter は selectPartsToMerge() 内でインクリメントされます --BackgroundExecutor がビジーな場合、マージタスクは無視されます --merges_with_ttl_counter はデクリメントされません。 #36387 (lthaooo).
  • normalize_function_names の設定値が上書きされる問題を修正。 #36937 (李扬).
  • 指数的時間減衰ウィンドウ関数の不具合を修正。ウィンドウ境界を正しく考慮するようになりました。 #36944 (Vladimir Chebotarev).
  • system.projection_parts および system.projection_parts_columns の読み込み時に発生し得る heap-use-after-free エラーを修正しました。これにより #37184 が解決されました。#37185Amos Bird)。
  • Unix エポックより前における DateTime64 の小数点以下の秒の動作を修正しました。 #37697 (Andrey Zvonov). #37039 (李扬).

ClickHouse リリース 22.5, 2022-05-19

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

  • 今後は、バックグラウンドでのマージ、ミューテーションおよび OPTIMIZE によっては SelectedRows および SelectedBytes メトリクスは増加しません。これらは(これまでどおり)MergedRows および MergedUncompressedBytes を増加させます。この変更はメトリクスの値にのみ影響し、より適切な値になります。この変更による非互換性はありませんが、メトリクスの変化について疑問に思うかもしれないため、このカテゴリに記載しています。 #37040 (Nikolai Kochetov)。
  • BoringSSL モジュールを公式の FIPS 準拠バージョンに更新しました。これにより ClickHouse は FIPS 準拠となります。 #35914 (Meena-Renganathan)。暗号スイート aes-192-cfb128aes-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)。
  • h3Lineh3Distanceh3HexRing 関数を追加しました。 #37030 (Bharat Nallan)。
  • 新しい単一バイナリの診断ツール (clickhouse-diagnostics) を追加しました。 #36705 (Dale McDiarmid)。
  • 出力フォーマットとして Prometheus を追加しました #36051#36206 (Vladimir C)。
  • MySQLDump 入力フォーマットを追加しました。ダンプ内で 1 つのテーブルに属する INSERT クエリから、すべてのデータを読み取ります。複数のテーブルがある場合、デフォルトでは最初のテーブルからデータを読み取ります。 #36667 (Kruglov Pavel)。
  • 一時テーブルに対しても、system.tablestotal_rows および total_bytes フィールドを表示するようにしました。 #36401#36439 (xiedeyantu)。
  • クエリレベルの設定で parts_to_delay_insertparts_to_throw_insert を上書きできるようにしました。これらが定義されている場合、テーブルレベルの設定より優先されます。 #36371 (Memo)。

実験的機能

  • 配列に対する L1、L2、Linf、Cosine 距離関数、および配列に対する L1、L2、Linf ノルム関数を実装しました。 #37033 (qieqieplus)。注意: これらの関数は名称が変更される予定です。
  • WindowView における WATCH クエリを改善しました。1. fire_condition シグナルを呼び出すことで、クエリ結果の提供までのレイテンシを削減しました。2. isCancelled() をより高頻度にチェックすることで、クエリのキャンセル操作(Ctrl+C)をより高速化しました。 #37226 (vxider)。
  • ファイルシステムキャッシュ削除用のイントロスペクション機能を追加しました。 #36802 (Han Shukai)。
  • SQL 向けに新しいハッシュ関数 wyHash64 を追加しました。 #36467 (olevino)。
  • レプリケーテッドデータベースの改善: SYSTEM SYNC DATABASE REPLICA クエリを追加しました。これにより、現在は非同期で行われている Replicated データベース内部のテーブルメタデータの同期を明示的に実行できます。 #35944 (Nikita Mikhaylov)。
  • リモートファイルシステムキャッシュの改善: キャッシュからの読み取りをより効率化しました。 #37054 (Kseniia Sumarokova)。SYSTEM DROP FILESYSTEM CACHE クエリを改善しました: <path> オプションおよび FORCE オプションを追加しました。 #36639 (Kseniia Sumarokova)。
  • 半構造化データの改善: 型 Object(...) のカラムを Object(Nullable(...)) にキャストできるようにしました。 #36564 (awakeljw)。
  • 並列レプリカの改善: localhost レプリカ上でクエリを実行したい場合にはローカルインタプリタを作成しますが、複数レプリカ上でクエリを実行する場合には、レプリカがコーディネータと通信できるよう接続が存在することに依存していました。これを改善し、localhost レプリカが同一プロセス内でコーディネータと直接通信できるようになりました。 #36281 (Nikita Mikhaylov)。

パフォーマンスの改善

  • GROUP BY 式を使用しない場合の avgsum 集約関数のパフォーマンスを改善。#37257 (Maksim Kita).
  • 単項算術関数(bitCountbitNotabsintExp2intExp10negateroundAgeroundDurationroundToExp2sign)のパフォーマンスを、動的ディスパッチを用いて改善。#37289 (Maksim Kita).
  • ORDER BY、MergeJoin、MergeTree への挿入処理において、ソート列コンパレータの JIT コンパイルを用いてパフォーマンスを改善。#34469 (Maksim Kita).
  • system.asynchronous_metric_log の構造を変更。必要なスペースをおよそ 10 分の 1 に削減します。これにより #36357 がクローズされます。フィールド event_time_microseconds は不要なため削除されました。#36360 (Alexey Milovidov).
  • ワイドパーツを読み込む際、必要な列に対してのみマークをロードするように変更。#36879 (Anton Kozlov).
  • ミューテックスのスコープを狭めることで、ファイルディスクリプタキャッシュのパフォーマンスを改善。#36682 (Anton Kozlov).
  • パスにグロブを含み、かつ一致したディレクトリに大量のファイルが存在する場合に、ストレージ File およびテーブル関数 file からの読み取りパフォーマンスを改善。#36647 (Anton Popov).
  • 入力フォーマット HiveText に対して並列パースを適用し、ローカルファイル読み取り時の HiveText パースを最大 2 倍高速化。#36650 (李扬).
  • デフォルトの HashJoin は右テーブル行の挿入に関してスレッドセーフではないため、単一スレッドで実行されます。右テーブルが大きい場合、CPU 使用率が低く、結合処理が非常に遅くなります。#36415 (lgbo).
  • select countDistinct(a) from tselect count(1) from (select a from t groupBy a) に書き換えられるようにする。#35993 (zhanglistar).
  • OR で連結された LIKE 条件のチェーンを multiMatchAny に変換します。動作に十分な確証が得られた段階で有効化します。#34932 (Daniel Kutenin).
  • いくつかの関数について、インライン化によりパフォーマンスを改善。#34544 (Daniel Kutenin).
  • 関数 readBig で不要な memcpy を回避する分岐を追加。これにより、ある程度パフォーマンスが向上します。#36095 (jasperzhu).
  • optimize_aggregation_in_order 用に部分的な GROUP BY キーを実装。#35111 (Azat Khuzhin).

改善

  • テーブル関数 files3url を実行中にパースエラーが発生した場合に、エラーが発生したファイル名を表示するようにしました。 #36314 (Anton Popov).
  • トップレベルの設定で指定されている場合、実行時にバックグラウンド操作(マージ、ミューテーション、移動およびフェッチ)を実行するスレッド数を増やせるようになりました。 #36425 (Nikita Mikhaylov).
  • 1970-01-01 00:00:00 より前の時刻を、時間・分に小数を含むタイムゾーンで生成する日時変換関数は、オーバーフローするのではなく、ゼロに飽和するようになりました。これは https://github.com/ClickHouse/ClickHouse/pull/29953 の続きであり、https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 に対応するものです。これは実装依存の動作(かつ非常にまれなケース)であり、その互換性を変更しても問題ないため、改善としてマークします。 #36656 (Amos Bird)。
  • ログレベル "test" で clickhouse-server を実行している場合に警告を追加しました。ログレベル "test" は最近追加されたものであり、避けることのできない致命的なレベルの深刻なパフォーマンス低下を引き起こすため、本番環境では使用しないでください。#36824 (Alexey Milovidov)。
  • CREATE TABLE ステートメントで照合順序をパースし、例外をスローするか無視するようにした。 #35892 をクローズしました。 #36271 (yuuch)。
  • オプション compatibility_ignore_auto_increment_in_create_table を使用すると、MySQL からの移行を簡素化するために、カラム定義内の AUTO_INCREMENT キーワードを無視できます。 #37178 (Igor Nikonov)。
  • JSONEachRowJSONLines および NDJSON のエイリアスを追加。#36303 をクローズ。#36327flynn)。
  • 各 Hive テーブルごとにクエリ可能なパーティション数の上限を設け、リソースの過剰消費を回避しました。 #37281 (lgbo).
  • 利便性を向上させるため、h3kRing 関数の第 2 引数に対する暗黙の型変換を追加しました。#35432 をクローズ。 #37189Maksim Kita)。
  • 任意のクエリに対する clickhouse-local での INSERT SELECT の進行状況表示と、クライアントでのファイル進行状況表示を修正し、ファイル進行状況の表示をより正確にしました。 #37075 (Kseniia Sumarokova).
  • パーツ削除中にファイルシステム障害が発生した場合、MergeTree テーブルエンジンファミリーで古いパーツが削除されずに残ってしまう可能性があるバグを修正しました。修正前は、それらのパーツは最初のサーバー再起動時にのみ削除されていました。 #37014 (alesapin)。
  • メイン設定で有効化できる行ポリシー処理の新しいモードを実装し、permissive な行ポリシーを持たないユーザーでも行を読み取れるようにしました。 #36997 (Vitaly Baranov).
  • Play UI:Nullable 数値はテーブルセル内で右揃えで表示されるようになりました。これにより #36982 がクローズされました。#36988Alexey Milovidov)。
  • Play UI: 結果が1行のみで、かつ列数がある程度多い場合は、結果を縦方向に表示するようにしました。#36811 の継続作業です。#36842Alexey Milovidov)。
  • Play UI の CSS をクリーンアップしました。ピクセル配置をより均一にしました。テーブルセル内に長いコンテンツがある場合の使い勝手を改善しました。 #36569 (Alexey Milovidov).
  • 例外発生時に書き込みバッファを確定させ、デストラクタ内では行わないようにしました。これにより次の問題が修正されることを期待しています: #36907#36979Kruglov Pavel)。
  • #36425 以降、background_fetches_pool_size のような設定は廃止され、トップレベルの config に記述される場合がありますが、ClickHouse は Error updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml. のような例外をスローしていました。これは修正されました。#36917Nikita Mikhaylov)。
  • 例外を別のサーバーに送信する際、可能な場合は追加の診断情報も含めるようにしました。 #36872 (tavplubix).
  • ハッシュ関数の引数として Array(Tuple(..)) 型を使用できるようにしました。 #36812 (Anton Popov).
  • user_defined_path 設定を追加しました。 #36753 (Maksim Kita).
  • s3Cluster テーブル関数で cluster マクロの使用を許可。#36726Vadim Volodin)。
  • clickhouse-client/clickhouse-local において INSERT クエリを正しくキャンセルできるようにしました。 #36710 (Azat Khuzhin).
  • MySQLHandler で有効なクエリ ID を維持しつつ、クエリをキャンセルできるようにしました。 #36699 (Amos Bird).
  • system.processesis_all_data_sent カラムを追加し、それに基づいて内部テストにおける堅牢性チェックを改善。 #36649 (Azat Khuzhin).
  • S3 からの読み取りに要した時間のメトリクスが正しく計算されるようになりました。#35483 をクローズ。#36572Alexey Milovidov)。
  • clickhouse-local で実行されている場合、テーブル関数 file でファイルディスクリプタの使用を許可しました。 #36562 (wuxiaobai24).
  • 数字で始まるタプル要素の名前を許可します。 #36544 (Anton Popov).
  • clickhouse-benchmark は環境変数から認証情報を読み取れるようになりました。#36497 (Anton Kozlov).
  • clickhouse-keeper の改善: クォーラムなしでクラスターを再構成できる force recovery 機能のサポートを追加しました。 #36258 (Antonio Andelic).
  • JSON オブジェクトに対するスキーマ推論を改善。 #36207 (Kruglov Pavel).
  • グロブによるスキーマ推論周辺のコードをリファクタリング。妥当な場合にのみグロブから次のファイルを試すように変更(以前はどのようなエラーでも次のファイルを試していた)。また、#36317 を修正。#36205Kruglov Pavel)。
  • 個別の CLUSTER 権限(および後方互換性のための access_control_improvements.on_cluster_queries_require_cluster_grant 設定ディレクティブ、デフォルトは false)を追加しました。 #35767 (Azat Khuzhin).
  • 選択されたクエリが停止する前に必要量のメモリが利用可能になった場合、待機中のすべてのクエリは実行を継続します。現在では、選択されたクエリがキャンセルを認識するより前にメモリが解放された場合は、どのクエリも停止されません。 #35637 (Dmitry Novik)。
  • protobuf における Nullable の検出。proto3 では、デフォルト値はワイヤフォーマット上には送信されません。このため、Nullable 列において null とデフォルト値を区別することは容易ではありません。この問題に対処する一般的な方法は、Google wrappers を使用して対象の値を内側のメッセージの中にネストすることです(https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto を参照)。この場合、フィールドが存在しない場合は null 値として解釈され、値が設定されていないフィールドはデフォルト値として解釈され、通常の値を持つフィールドは通常の値として解釈されます。しかし、ClickHouse は Google wrappers をネストしたカラムとして解釈します。そこで、Google wrappers を検出し、上記の説明どおりに解釈するための特別な振る舞いを導入することを提案します。例えば、Nullable カラム test の値をシリアライズするには、.proto スキーマ内で google.protobuf.StringValue test を使用します。これらの型は、Protobuf におけるいわゆる「well-known types」であり、ライブラリ自体で実装されていることに注意してください。#35149Jakub Kuklis)。
  • 事前定義および静的な HTTP ハンドラー設定で content_type を指定できるようになりました。 #34916 (Roman Nikonov).
  • --external を先行して指定せずに clickhouse-client --file を使用した場合に、適切に警告するようにしました。#34747 をクローズしました。#34765李扬)。
  • MySQL データベースエンジンを改良し、binary(0) データ型に対応しました。 #37232 (zzsmdfj).
  • clickhouse-benchmark の JSON レポート出力を改善しました。 #36473 (Tian Xinhui).
  • 外部 ClickHouse 辞書のホスト名を解決できない場合に、サーバーが起動できないことがありました。修正しました。#36451#36463tavplubix)。

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

  • 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 をクローズ。#37270Kruglov Pavel)。
  • 実験的機能: Object 型のカラムを含むテーブルにおけるミューテーションの実行を修正しました。UPDATE または DELETE クエリの WHERE 句で Object 型のサブカラムを使用することや、個々のサブカラムを操作する(DROPMODIFY)ことは、まだ許可されていません。#37205 の問題を修正。#37266Anton Popov)。
  • Kafka ではプロデューサー側で group.id を設定する必要はありません。コンソールログには、この問題を説明する次の Warning が出力されます: 2022.05.15 17:59:13.270227 [ 137 ] {} &lt;Warning&gt; StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance#37228Mark Andreev)。
  • 実験的機能 (WindowView): まだ発火していないデータが削除される可能性に備えて、実際にブロックが発火した後で max_fired_watermark を更新するようにしました。 #37225 (vxider).
  • LIMIT BY を含む分散クエリで発生する "Cannot create column of type Set" エラーを修正。#37193Azat Khuzhin)。
  • 実験的機能:WindowView の WATCH EVENTS クエリが、WindowViewSource.h:58 で作成される空でない Chunk によって終了されることはなくなりました。 #37182 (vxider).
  • サブクエリに対して enable_global_with_statement を有効化し、#37141 をクローズ。#37166Vladimir C)。
  • optimize_skip_unused_shards_rewrite_in の暗黙的な型変換を修正。 #37153 (Azat Khuzhin).
  • FixedString 列に対する ILIKE 関数が、誤った結果(本来よりも少ない件数しか一致しない)を返す可能性がありました。 #37117 (Robert Schulze).
  • AggregateFunction 型を持つ列で GROUP BY する場合の挙動を修正。 #37093 (Azat Khuzhin)。
  • 実験的機能: プレフィックス GROUP BY および *Array 集約関数に対する optimize_aggregation_in_order の問題を修正。 #37050 (Azat Khuzhin).
  • 暗黙的な集約を伴う一部の INSERT SELECT クエリで発生していたパフォーマンス低下の問題を修正しました。#36792 を解決。#37047tavplubix)。
  • 実験的機能:*ArraygroupArrayArray/...)集計関数使用時の順序付き GROUP BYoptimize_aggregation_in_order=1)の修正。 #37046 (Azat Khuzhin).
  • インデックスの型が UInt8 以外の場合に LowCardinality->ArrowDictionary が不正な出力を生成する問題を修正。#36832 をクローズ。#37043Kruglov Pavel)。
  • quantileTDigest における無限大 (inf) の問題を修正しました。 #32107 を修正します。 #37021Vladimir Chebotarev)。
  • HedgedConnections で max_parallel_replicas != 1 の場合の外部テーブルデータ送信を修正。 #36981 (Kruglov Pavel).
  • Replicated データベースにおける TRUNCATE クエリの論理エラーを修正。#33747 を解決。#36976tavplubix)。
  • 実験的機能: WindowView でソーステーブルをドロップするとハングする問題を修正。#35678 をクローズ。#36967vxider)。
  • 実験的機能(rocksdb cache):不具合を修正: #36671#36929李扬)。
  • 実験的機能:WindowView で複数のカラムを使用する際のバグを修正するため、若干異なるスキーマでも writeIntoWindowView を呼び出せるようにする変換アクションを追加。#36928vxider)。
  • 低負荷時や再起動時に圧縮ログファイルが破損する可能性のある clickhouse-keeper のバグを修正します。 #36910 (alesapin).
  • 定数集約を行うクエリで誤った結果が返される問題を修正しました。これにより #36728 が修正されました。 #36888Amos Bird)。
  • 実験的機能: キャッシュの current_size カウントを修正。#36887Kseniia Sumarokova)。
  • Experimental feature: hop window を用いた window view における発火動作を修正。 #34044. #36861 (vxider).
  • 実験的機能: リモートファイルシステム上のキャッシュバッファにおける誤ったキャストを修正。 #36809 (Kseniia Sumarokova).
  • flatten_nested = 0 を指定したテーブル作成処理を修正しました。以前は、サーバー再起動後にフラット化されていない Nested カラムがフラット化されてしまう可能性がありました。#36803Anton Popov)。
  • LowCardinality 型を読み込む際に発生していた、リモートファイルシステムからの非同期読み取りに関するいくつかの問題を修正しました。 #36763 (Kseniia Sumarokova).
  • 実験的機能: 複数ファイル(グロブを用いたテーブル関数 file など)から Object 型カラムへの挿入を修正。 #36762 (Anton Popov).
  • Hedged リクエストにおけるタイムアウトを修正。リモートクエリ送信直後のコネクションハングにより、無期限に待ち続けてしまう可能性がありました。 #36749 (Kruglov Pavel).
  • 実験的機能: 分散テーブル上の groupBitmapAndState/groupBitmapOrState/groupBitmapXorState のバグを修正。 #36739 (Zhang Yifan).
  • 実験的機能: PR 内のテスト中に、あるキャッシュクラスが 2 回初期化されていることを発見し、その結果として例外がスローされました。この問題の原因はまだ明確ではありませんが、ClickHouse 内でディスクを繰り返しロードするコード上のロジックが存在しているはずなので、この状況に対しては特別な判定処理を行う必要があります。 #36737 (Han Shukai).
  • 幅の広いパーツでの縦方向マージを修正しました。これまで、マージ中に例外There is no columnがスローされることがありました。 #36707 (Anton Popov).
  • ポート変更時のサーバーリロードの挙動を修正(クエリコンテキストの既存接続を待たないように変更)。 #36700 (Azat Khuzhin).
  • 実験的機能: 以前の PR で、テスト(stateless tests、flaky check(address, actions))がタイムアウトすることを確認しました。さらに、ローカルでテストを実行した場合にも、システムデッドロックが断続的に発生することがあります。この問題は、master の最新のソースコードを使用しても依然として解消されていません。#36697Han Shukai)。
  • 実験的機能: キャッシュ設定が変更された場合のサーバー再起動を修正。 #36685 (Kseniia Sumarokova).
  • スキーマ推論で発生する可能性のある heap-use-after-free を修正しました。Closes #36661. #36679 (Kruglov Pavel).
  • エンジンが指定されていない場合の CREATE クエリにおけるクエリ設定の解析を修正しました。この修正により、次の問題が解決されます: https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419#36642 (tavplubix)。
  • 実験的な機能: 型 Object を持つワイドパーツのマージを修正。 #36637 (Anton Popov).
  • EPHEMERAL の後にリテラルではなくデフォルト式が続く場合に発生する format のクラッシュを修正。#36618 をクローズ。#36633flynn)。
  • ENGINE = MergeTree テーブルで INTERPOLATE を使用しているときに発生する可能性のあった Missing column 例外を修正。 #36549 (Yakov Olkhovskiy).
  • WHERE 句中のリテラルが原因となる結合クエリの潜在的なエラーを修正。#36279 をクローズ。#36542Vladimir C)。
  • 未定義動作を引き起こす可能性があった ReadBufferFromEncryptedFile におけるオフセット更新の問題を修正しました。 #36493 (Kseniia Sumarokova).
  • Keeper クラスター構成向けのホスト名サニティチェックを修正しました。これらのチェックを有効/無効にするための設定 keeper_server.host_checks_enabled を追加しました。#36492 (Antonio Andelic)。
  • GROUP BY での実行可能なユーザー定義関数の使用方法を修正しました。これ以前は、実行可能なユーザー定義関数を GROUP BY 句の式として使用することはできませんでした。#36448 をクローズしました。#36486Maksim Kita)。
  • クライアント側でサーバーからの不明なパケットにより発生する可能性のある例外を修正。 #36481 (Kseniia Sumarokova).
  • 実験的機能(system.session_log は決して使用しないでください。削除予定です):system.session_log テーブルに不足していた enum 値を追加。#36474 をクローズ。#36480Memo)。
  • s3Cluster のスキーマ推論におけるバグを修正しました。このバグが原因で、s3Cluster からの SELECT クエリで全てのデータが読み取られない問題が発生していました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35544 で導入されました。 #36434 (Kruglov Pavel)。
  • JOIN および COLUMNS マッチャーにおける nullptr のデリファレンスを修正します。これにより #36416 が解決されます。これは https://github.com/ClickHouse/ClickHouse/pull/36417 向けの変更です。#36430Amos Bird)。
  • ClickHouseDictionarySource にスカラーサブクエリが含まれている場合の辞書のリロード処理を修正しました。 #36390 (lthaooo).
  • JOIN でのアサーションを修正し、#36199 をクローズ。#36201 (Vladimir C)。
  • 特殊な演算子内でエイリアスを含むクエリはパースエラーになっていました(22.1 では動作していませんでした)。例: SELECT substring('test' AS t, 1, 1)#36167Maksim Kita)。
  • 実験的機能: 入れ子の配列を含む複雑な JSON を Object 型のカラムへの挿入を修正しました。 #36077 (Anton Popov).
  • コンパクトパーツを持つネストされたカラムに対する ALTER DROP COLUMN(例:カラム n.d が存在する場合の ALTER TABLE x DROP COLUMN n)の問題を修正。 #35797 (Azat Khuzhin).
  • substring 関数で、offsetlength が負の定数で s が非定数の場合に発生する範囲エラーの長さを修正。 #33861 (RogerYK).

ClickHouse リリース 22.4, 2022-04-19

後方互換性のない変更

  • INSERT クエリでは FORMAT の後に SETTINGS を指定できなくなりました(そのようなクエリを許可するための互換性設定 allow_settings_after_format_in_insert が用意されていますが、デフォルトでは OFF です)。 #35883 (Azat Khuzhin)。
  • 関数 yandexConsistentHash(Konstantin "kostik" Oblakov によるコンシステントハッシュアルゴリズム)は kostikConsistentHash に名前が変更されました。互換性のために古い名前はエイリアスとして残されています。この変更自体は後方互換性がありますが、今後のリリースでこのエイリアスを削除する可能性があります。そのため、アプリケーション内でこの関数の使用箇所を更新することを推奨します。 #35553 (Alexey Milovidov)。

新機能

  • ORDER BY ... WITH FILL に INTERPOLATE 拡張機能を追加しました。 #34903 をクローズしました。 #35349Yakov Olkhovskiy)。
  • プロセッサーレベルでのプロファイリング(log_processors_profiles 設定を有効にすると、ClickHouse は実行中およびデータ待機中に各プロセッサーが費やした時間を system.processors_profile_log テーブルに書き込みます)。 #34355 (Azat Khuzhin)。
  • 関数 makeDate(year, month, day)、makeDate32(year, month, day) を追加しました。 #35628 (Alexander Gololobov)。makeDateTime() および makeDateTime64() を実装しました。 #35934 (Alexander Gololobov)。
  • WRITTEN BYTES という新しいクォータ種別をサポートし、INSERT クエリで書き込まれるバイト数を制限できるようにしました。 #35736 (Anton Popov).
  • flattenTuple 関数を追加しました。入れ子になった名前付き Tuple を引数として受け取り、要素が元の Tuple 内のパスとなるフラットな Tuple を返します。例: Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int)flattenTuple は、型 Object からすべてのパスをそれぞれ別個のカラムとして選択するために使用できます。#35690Anton Popov)。
  • arrayFirstOrNullarrayLastOrNull 関数を追加しました。 #35238 をクローズしました。 #35414Maksim Kita)。
  • minSampleSizeContinousminSampleSizeConversion 関数を追加しました。作者は achimbab です。#35360Maksim Kita)。
  • 新しい関数 minSampleSizeContinous と minSampleSizeConversion を追加しました。#34354 (achimbab)。
  • フォーマット ProtobufList を導入(すべてのレコードを 1 つの Protobuf メッセージ内の repeated メッセージとして表現)。#16436 をクローズ。#35152Nikolai Kochetov)。
  • h3PointDistMh3PointDistKmh3PointDistRadsh3GetRes0Indexesh3GetPentagonIndexes 関数を追加しました。 #34568 (Bharat Nallan).
  • toLastDayOfMonth 関数を追加しました。この関数は、日付または日時をその月の月末日に切り上げます。 #33501#34394Habibullah Oladepo)。
  • [Zoo]Keeper クライアント向けの負荷分散設定を追加しました。#29617 をクローズしました。#30325小路)。
  • simple という新しい種類の行ポリシーを追加しました。この PR 以前は、行ポリシーには permissiverestrictive の 2 種類がありました。simple 行ポリシーは、permissive および restrictive ポリシーで発生していたような副作用なしに、テーブルに新しいフィルター条件を追加します。#35345 (Vitaly Baranov)。
  • レプリケーテッドデータベースでクラスタ用シークレットを指定できるようになりました。 #35333 (Nikita Mikhaylov).
  • サーバーの起動時に、利用可能メモリやディスク空き容量、最大スレッド数などの健全性チェックを追加しました。 #34566 (Sergei Trifonov).
  • INTERVAL の改善 – [MILLI|MICRO|NANO]SECOND と併用可能になりました。toStartOf[Milli|Micro|Nano]second() 関数を追加しました。[add|subtract][Milli|Micro|Nano]seconds() 関数を追加しました。 #34353 (Andrey Zvonov).

実験的機能

  • 単純な MergeTree テーブルに対するトランザクションのサポートを追加しました。この機能は非常に実験的であり、本番環境での利用は推奨されません。#22086 の一部です。#24258tavplubix)。
  • フォーマット JSONEachRow における型 Object のスキーマ推論をサポートしました。型 Map のカラムを型 Object のカラムに変換できるようにしました。#35629Anton Popov)。
  • すべての書き込み操作でリモートファイルシステム(FS)キャッシュへの書き込みを許可しました。system.remote_filesystem_cache テーブルを追加しました。drop remote filesystem cache クエリを追加しました。system.remote_data_paths テーブルによる S3 メタデータのイントロスペクションを追加しました。#34021 をクローズしました。マージ処理に対して、モード read_from_filesystem_cache_if_exists_otherwise_bypass_cache を追加することでキャッシュオプションを追加しました(マージ処理ではデフォルトで有効で、同名のクエリ設定でも有効化できます)。キャッシュ関連の設定名を変更しました(remote_fs_enable_cache -> enable_filesystem_cache など)。#35475Kseniia Sumarokova)。
  • パーツのメタデータを RocksDB に保存するオプションを追加しました。MergeTree のパーツ読み込み処理を高速化し、clickhouse-server の起動を高速化します。この改善により、70万個の MergeTree パーツがある構成で、clickhouse-server の起動時間を 75 分から 20 秒に短縮できました。#32928李扬)。

パフォーマンスの改善

  • 新しいクエリプランの最適化として、可能な場合は ORDER BY の後に関数を評価します。例として、クエリ SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5 では、関数 sipHash64ORDER BYLIMIT の後に評価され、その結果およそ 20 倍の高速化が得られます。#35623Nikita Taranov)。
  • 集約中に使用されるハッシュテーブルのサイズを収集し、後続のクエリで利用することで、ハッシュテーブルのリサイズを回避するようにしました。#33439Nikita Taranov)。
  • SIMD 命令(SSE および AVX2)を用いた hasAll 関数の改善。#27653youennL-cs)。#35723Maksim Kita)。
  • ASOF JOIN のパフォーマンスを改善する複数の変更(1.2 ~ 1.6 倍高速)。さらに、大きな整数型の利用をサポートしました。#34733Raúl Marín)。
  • キーがネイティブ整数の場合の ASOF JOIN のパフォーマンスを改善。#35525Maksim Kita)。
  • S3 ストレージへのマルチパートアップロードの並列化。#35343Sergei Trifonov)。
  • URL ストレージエンジンは、エンドポイントが HTTP Range をサポートしている場合に、複数チャンクを並列にダウンロードするようになりました。新たに 2 つの設定 max_download_threadsmax_download_buffer_size が追加されており、単一クエリがファイルのダウンロードに使用できるスレッド数の上限と、各スレッドが処理できるバイト数の上限を制御します。#35150Antonio Andelic)。
  • S3 からオブジェクトをダウンロードする際に複数スレッドを使用します。ダウンロードは max_download_threads および max_download_buffer_size 設定で制御できます。#35571Antonio Andelic)。
  • HDFS と対話する際のミューテックスのスコープを縮小しました。#35292 に関連。#35646shuchaome)。
  • テーブル単位の TTL については、変更された場合にのみ mutation を要求するようにしました。#35953Azat Khuzhin)。

改良

  • スキーマ推論を複数の点で改良しました。CSV、TSV、および TSVRaw データフォーマットにおいて、数値、文字列、配列、タプル、マップを判別するために、いくつかの調整とヒューリスティクスを使用します。CSV フォーマット向けに、これらのヒューリスティクスの有効/無効を切り替えるための設定 input_format_csv_use_best_effort_in_schema_inference を追加しました。これが無効な場合、すべてを文字列として扱います。TSV/TSVRaw フォーマット向けにも同様の設定 input_format_tsv_use_best_effort_in_schema_inference を追加しました。これらの設定はデフォルトで有効になっています。- Values フォーマットでのスキーマ推論に Maps のサポートを追加しました。- Values フォーマットのスキーマ推論で発生しうるセグメンテーションフォルトを修正しました。- Arrow/ORC/Parquet フォーマットで、サポートされていない型を持つカラムをスキップできるようにしました。そのための対応する設定 input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference を追加しました。これらの設定はデフォルトでは無効です。- Arrow/Parquet フォーマットで、型 Null のカラムを、すべての値が NULL の Nullable カラムに変換できるようにしました。- CSV、TSV、JSONCompactEachRow など、カラム名を含まないフォーマットに対して、設定 column_names_for_schema_inference によってスキーマ推論時のカラム名を指定できるようにしました。- ORC/Arrow/Parquet フォーマットにおける Nullable カラムの扱いに関するスキーマ推論を修正しました。以前は、推論された型はすべて Nullable ではなく、そのためデータから Nullable カラムを読み込むことができませんでしたが、現在は修正され、推論される型は常に Nullable になりました(スキーマの読み取りだけでは、そのカラムが Nullable かどうかを判断できないため)。- CSV のエスケープルールを用いる Template フォーマットでのスキーマ推論を修正しました。#35582Kruglov Pavel)。
  • フォーマット JSONAsObject 向けに、並列パースとスキーマ推論を追加しました。 #35592 (Anton Popov).
  • s3Cluster テーブル関数に自動スキーマ推論機能のサポートを追加しました。s3s3Cluster のシグネチャを揃えました。 #35544 (Nikita Mikhaylov).
  • hdfsCluster のスキーマ推論機能のサポートを追加しました。 #35602 (Nikita Mikhaylov)。
  • 新しい設定 input_format_json_read_bools_as_numbers を追加しました。これにより、JSON 入力フォーマットで bool 値を数値として推論および解釈できるようになります。デフォルトで有効です。@alexey-milovidov による提案です。 #35735 (Kruglov Pavel)。
  • TSKV および JSONEachRow フォーマットのスキーマ推論におけるカラム順序を改善し、#35640 を解決しました。TSKV および JSONEachRow フォーマットのスキーマ推論で空行を読み取った場合でも、スキーマ推論を停止しないようにしました。#35724 (Kruglov Pavel)。
  • input_format_orc_case_insensitive_column_matchinginput_format_arrow_case_insensitive_column_matching、および input_format_parquet_case_insensitive_column_matching の設定を追加しました。これにより、ClickHouse が ORC、Arrow、または Parquet ファイルからデータを読み込む際に、カラム名の大文字・小文字を区別せずに照合できるようになります。 #35459 (Antonio Andelic).
  • クライアントが TCP または HTTP 経由で安全な接続を使用しているかどうかを示す is_secure 列を system.query_log に追加しました。 #35705 (Antonio Andelic).
  • これで、kafka_num_consumers を、リソースが限られたマシン(16コア未満)の場合でも、物理コア数より大きな値に設定できるようになりました。 #35926 (alesapin)。
  • engine=Kafka テーブルの監視用に基本的なメトリクスをいくつか追加しました。 #35916 (filimonov).
  • MergeTree エンジンファミリーに対して、存在しない設定に対して ALTER TABLE ... RESET SETTING を実行することは許可されなくなりました。#35816 を修正。#35884alesapin)。
  • 一部の ALTER MODIFY COLUMN クエリでは、Array および Nullable 型に対する操作をミューテーションなしでメタデータレベルで実行できるようになりました。たとえば、Array(Enum8('Option1' = 1)) から Array(Enum8('Option1' = 1, 'Option2' = 2)) への変更などです。#35882alesapin)。
  • クエリが実行中であることをユーザーに示すために、砂時計アイコンにアニメーションを追加しました。 #35860 (peledni).
  • ALTER TABLE t DETACH PARTITION (ALL) をサポートしました。 #35794 (awakeljw)。
  • Projection の解析を改善し、count() のような単純なクエリを最適化しました。 #35788 (Amos Bird).
  • input テーブル関数を使用した INSERT SELECT でスキーマ推論をサポートしました。スキーマ推論をサポートするテーブル関数からの INSERT SELECT の場合、データから推論するのではなく、挿入先テーブルからスキーマを取得するようにしました。#35639 をクローズしました。#35760Kruglov Pavel)。
  • Hive テーブルで remote_url_allow_hosts の設定が反映されるようにしました。#35743 (李扬)。
  • clickhouse-local に send_logs_level を実装。#35653 をクローズ。#35716Kseniia Sumarokova)。
  • #35641 をクローズし、明示的なデフォルト式なしで EPHEMERAL カラムを許可。#35706Yakov Olkhovskiy)。
  • 非同期 INSERT のサイズを示すプロファイルイベントカウンタ AsyncInsertBytes を追加しました。 #35644 (Alexey Milovidov).
  • JOIN に関するパイプラインの記述を改善しました。 #35612 (何李夫).
  • HDFS 設定ファイルの絶対パスを自動的に推定。 #35572 (李扬).
  • clickhouse-client のペースト時のパフォーマンスと互換性を改善しました。これにより #35501 に対処しています。 #35541 (Amos Bird).
  • 分散クエリにおいて、非常に深くネストしたデータ型をパースする際に、設定 async_socket_for_remoteuse_hedged_requests のいずれかが有効になっていると、スタックオーバーフローが発生する可能性がありました(少なくともデバッグビルドでは)。#35509 をクローズします。#35524Kruglov Pavel)。
  • system.parts_columns テーブルにサブカラムのサイズを追加しました。 #35488 (Anton Popov).
  • クエリプランおよびパイプラインのスキャンノードに明示的なテーブル情報を追加しました。 #35460 (何李夫)。
  • サーバーが低番号ポート(例: 443)にバインドできるようにします。ClickHouse のインストールスクリプトはバイナリファイルに cap_net_bind_service を設定します。#35451Alexey Milovidov)。
  • INSERT INTO table FROM INFILE で進捗バーが表示されない問題を修正。 #35429 (xiedeyantu).
  • clickhouse-diagnostics ツールに --user--password--host--port の各引数を追加しました。 #35422 (李扬)。
  • Postgres エンジンで UUID をサポート。#35384 をクローズ。#35403Kseniia Sumarokova)。
  • テーブル関数 s3clusterHDFSClusterhive に対しては、StorageFactory::instance().getSourceAccessType(getStorageTypeName()) によって正しい AccessType を取得できていませんでした。このPRで修正されました。 #35365 (李扬)
  • clickhouse-client の --testmode オプションを削除し、常に有効になるようにしました。 #35354 (Kseniia Sumarokova)。
  • clickhouse-keeper に対する wchc 操作(4文字のコマンド)を許可しないようにしました。 #35320 (zhangyuli1).
  • 関数 getTypeSerializationStreams を追加しました。指定された型(列から検出される)について、その型のすべてのシリアライズ用サブストリームのパスを含む配列を返します。この関数は主に開発者向けに役立ちます。 #35290 (李扬)。
  • port がクラスター設定で指定されていない場合は、デフォルトのサーバーポートが使用されます。これにより、#34769 の問題が解決されます。#34772Alexey Milovidov)。
  • Hive Engine で ORC/Parquet ファイルに対して minmax インデックスを使用。関連 PR: https://github.com/ClickHouse/arrow/pull/10#34631李扬)。
  • システムログテーブルで ENGINE 宣言内に COMMENT を指定できるようになりました。 #33768 をクローズしました。 #34536Maksim Kita)。
  • ソートキー順での読み取りかつ LIMIT が指定されている場合に、max_rows_to_read の設定が正しくサポートされるようになりました。以前は、実際にはクエリで読み取る必要のある行数がより少ない場合でも、Limit for rows or bytes to read exceeded という例外がスローされることがありました。 #33230 (Anton Popov).
  • cgroups からは quota と period のみを考慮し、shares は無視する(shares は実際には使用可能なコア数を制限しないため)。 #35815 (filimonov)。

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

  • 機能テストにおけるランダム化設定の次の一連の項目を追加。#35047 (Kruglov Pavel).
  • ストレステストに後方互換性チェックを追加。#25088 をクローズ。#27928 (Kruglov Pavel).
  • パッケージビルドを nfpm に移行 - release スクリプトを非推奨とし、packages/build に置き換え - すべてを clickhouse/binary-builder イメージでビルド(クリーンアップ: clickhouse/deb-builder) - CMake にシンボルストリッピングを追加(TODO: use prefix/lib/prefix/lib/bin_dir/clickhouse/$binary.debug) - DWARF シンボルに関する問題を修正 - Alpine 向け APK パッケージを追加 - alienadditional_pkgs にリネーム。#33664 (Mikhail f. Shiryaev).
  • Coverity 向けの夜間スキャンとアップロード処理を追加。#34895 (Boris Kuschel).
  • clickhouse-keeper 用の専用の小さなパッケージを追加。#35308 (Mikhail f. Shiryaev).
  • podman での実行が失敗していた問題を修正。同じボリュームを 2 回指定していると警告されていた。#35978 (Roman Nikonov).
  • contrib/krb5 のビルド設定に軽微な改善を実施。#35832 (Anton Kozlov).
  • すべてのイメージに対してビルドタスクを識別するためのラベルを追加。#35583 (Mikhail f. Shiryaev).
  • Python コードに black フォーマッタを適用し、コミットごとのチェックを追加。#35466 (Mikhail f. Shiryaev).
  • Alpine イメージをクリーンな Dockerfile を使うように作り直し。tests/ci に Ubuntu と Alpine の両方のイメージをビルドするスクリプトを作成。clickhouse-keeper イメージを追加(cc @nikitamikhaylov)。PullRequestCI にビルドチェックを追加。ReleaseCI にジョブを追加。MasterCI に、マージされた各 PR ごとに clickhouse/clickhouse-server:head および clickhouse/clickhouse-keeper:head イメージをビルドして push するジョブを追加。#35211 (Mikhail f. Shiryaev).
  • CI におけるストレステストレポートを修正し、開始されたストレステストに関する情報を含む runlog を 1 回だけアップロードするように変更。#35093 (Mikhail f. Shiryaev).
  • LLVM 14 の libcxx / libcxxabi へ切り替え。#34906 (Raúl Marín).
  • CVE-2018-7485 を軽減するために unixODBC を更新。注: ClickHouse は ODBC 用の独自のアイソレーションレイヤーを実装しているため、この CVE は ClickHouse には該当しない。#35943 (Mikhail f. Shiryaev).

バグ修正

  • input_format_ipv4_default_on_conversion_errorinput_format_ipv6_default_on_conversion_error の設定を追加し、無効な IP アドレス値をデフォルト値としてテーブルに挿入できるようにしました。#35726 をクローズしました。 #35733Maksim Kita)。
  • Hive からデータを読み込む際、存在しない列についてはブロックから削除しないようにしました。 #35393 (lgbo).
  • マテリアライズドビューの作成時に型チェックを追加。クローズ: #23684#24896hexiaoting)。
  • INSERT INFILE クエリのフォーマットを修正(欠落していた引用符を追加)。#35886Azat Khuzhin)。
  • session_log を無効化しました。ファジングによりメモリ安全性に関する問題が検出されたためです。#35714 を参照してください。#35873Alexey Milovidov)。
  • カラム単位の TTL を複数回処理しないようにしました。 #35820 (Azat Khuzhin).
  • 複数のパーティションにまたがるデータを含む挿入クエリにおける Object 型カラムへの挿入を修正しました。 #35806 (Anton Popov).
  • -WithNames フォーマットにおいて、入力に含まれていないカラムのインデックス処理に関するバグを修正しました。このバグにより、カラム数が 256 を超える場合に INCORRECT_NUMBER_OF_COLUMNS エラーが発生していました。#35793 をクローズ。#35803Kruglov Pavel)。
  • #35751 を修正。#35799Nikolay Degterinsky)。
  • Snappy 形式データを HDFS から読み取る際の不具合を修正。 #35771 (shuchaome).
  • カスタム型から文字列への変換処理で、セグメンテーションフォルトや予期しないエラーメッセージが発生する可能性のあったバグを修正しました。#35752 をクローズ。#35755Kruglov Pavel)。
  • ANY/ALL(サブクエリ)の実装を修正し、#35489 をクローズ。 #35727 (Kseniia Sumarokova).
  • clickhouse-local で空でないデータベースを削除できない問題を修正。#35692 をクローズ。#35711Kseniia Sumarokova)。
  • サーバー再起動後にサブクエリを含むマテリアライズドビューを作成する際のバグを修正。サーバー再起動後、基になるテーブルへの挿入を行ってもマテリアライズドビューが更新されない問題がありました。#35511 をクローズ。#35691Kruglov Pavel)。
  • 実験的型 Object のサブカラムを読み取る際に発生する可能性のある Can't adjust last granule 例外を修正しました。 #35687 (Anton Popov).
  • JIT コンパイルを用いたビルドをデフォルトで有効にしました。 #35683 (Maksim Kita).
  • 実験的な Object 型において、サブカラムが失われる可能性がある問題を修正しました。 #35682 (Anton Popov).
  • ASOF JOIN キーの null 許容性チェックを修正し、#35565 をクローズ。#35674Vladimir C)。
  • プロジェクションを含むパーツに対するパーツ検証ロジックを修正しました。プロジェクションとメインパーツで型が異なる場合にエラーが発生していました。これは https://github.com/ClickHouse/ClickHouse/pull/33774 の問題と同様です。このバグは @caoyang10 によって修正されました。#35667Amos Bird)。
  • format 関数に多数の引数が渡されたときにサーバーがクラッシュする問題を修正しました。テストファイルを参照し、クラッシュの再現方法を確認してください。 #35651 (Amos Bird).
  • 非同期インサートにおけるクォータの扱いを修正。 #35645 (Anton Popov).
  • エイリアス付き位置引数を修正。#35600 をクローズ。#35620Kseniia Sumarokova)。
  • URL エンジンでスキーマ推論を行う前に remote_url_allow_hosts をチェックするようにしました。#35064 をクローズしました。#35619Kruglov Pavel)。
  • LowCardinality 型のカラムを含む場合の HashJoin の不具合を修正しました。これにより #35548 が解決されました。 #35616 (Antonio Andelic)。
  • MaterializedPostgreSQL で、メモリ上に収集されたデータを下位テーブルに同期しようとした際に例外が発生した場合に起こり得たセグメンテーションフォルトを修正しました。#35611 をクローズ。#35614Kseniia Sumarokova)。
  • 以前にデタッチしたテーブルがまだ使用中の場合、ATTACH TABLE クエリに対して設定 database_atomic_wait_for_drop_and_detach_synchronously が正しく動作していませんでしたが、修正されました。 #35594 (tavplubix).
  • 名前付きコレクションでの HTTP ヘッダーを修正し、compression_method を追加。 #35273 をクローズ。 #35269 をクローズ。 #35593Kseniia Sumarokova)。
  • S3 エンジンでの仮想カラムの取得を修正。Closes #35411. #35586 (Kseniia Sumarokova).
  • caseWithExpression の戻り値型推論を修正しました。ELSE 句の型も正しく考慮されるようになりました。 #35576 (Antonio Andelic).
  • 39文字を超えるIPv6アドレスの解析を修正。#34022 をクローズ。#35539Maksim Kita)。
  • IN 句における IPv4 および IPv6 アドレスへのキャストを修正。 #35528 を修正。 #35534Maksim Kita)。
  • ショートサーキット関数の評価中に、引数の一つが Nullable な定数である場合に発生するクラッシュを修正。#35497 をクローズ。#35496 をクローズ。#35502Maksim Kita)。
  • 定数引数をとる関数 throwIf で発生していたクラッシュを修正。#35500Maksim Kita)。
  • クライアント接続が不安定になる可能性がある Keeper のバグを修正。このバグは #35031 で導入。#35498alesapin)。
  • 結果列の型が結果のデータ型と異なる場合に、Logical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'. のような論理エラーを引き起こしていた関数 if のバグを修正しました。#35367 をクローズしました。#35476Kruglov Pavel)。
  • MergeTree のバックエンドとして、または個別のテーブルエンジン/関数として S3 を使用する際の過剰なログ出力を修正。 #30559 を修正。 #35434 (alesapin).
  • これにより、ゼロコピー・レプリケーション(実験的)で実行されるマージ処理によって、Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge. というメッセージがログに大量出力されることはなくなりました。 #35430 (alesapin)。
  • GroupingAggregatedTransform で空のチャンクが発生した場合に、想定される例外をスキップするようにしました。 #35417 (Nikita Taranov).
  • Arrow/Parquet/ORC フォーマットにおいて、クエリで不要なカラムの扱いを修正しました。これにより、ファイルにサポートされていない型のカラムが含まれていても、そのカラムをクエリで使用しない場合には、Unsupported &lt;format&gt; type &lt;type&gt; of an input column &lt;column_name&gt; のようなエラーが発生することを防ぎます。 #35406 (Kruglov Pavel).
  • リモートファイルシステム向けローカルキャッシュ(実験的機能)のコーナーケースにおける高い同時実行時の不具合を修正。#35381Kseniia Sumarokova)。キャッシュ内で発生しうるデッドロックを修正。#35378Kseniia Sumarokova)。
  • WHERE 句で定数との比較を行う場合のパーティションプルーニングを修正しました。カラムと定数の型が異なる場合にオーバーフローが発生する可能性があり、その結果クエリが誤って空の結果を返してしまうことがありました。この修正は #35304 を解決します。#35334Amos Bird)。
  • 小さな max_read_buffer_size を使用している場合の TSKV フォーマットのスキーマ推論を修正。 #35332 (Kruglov Pavel).
  • スパースカラムが有効なテーブルでのミューテーションに関する問題を修正。 #35284 (Anton Popov).
  • デフォルトで最終パートの書き込みを遅延しないようにしました(INSERT 中に発生し得る Memory limit exceeded の問題を修正するため、S3 への書き込み時に max_insert_delayed_streams_for_parallel_write をデフォルト値 1000 で追加し、それ以外の場合は従来どおり無効のままとしました)。#34780Azat Khuzhin)。

ClickHouse リリース v22.3-lts, 2022-03-17

後方互換性のない変更

  • arrayCompact 関数が他の高階関数と同様に動作するようにしました。ラムダ関数の結果ではなく元の配列に対して圧縮を行います。arrayCompact で複雑なラムダ関数を使用している場合は、arrayCompact の引数を arrayMap でラップすることで以前の挙動を復元できます。#34010 #18535 #14778 をクローズ。#34795Alexandre Snarskii)。
  • 関数 toDatetime のオーバーフロー時の実装依存の動作を変更しました。ラップアラウンドするのではなく、サポートされている最小/最大の日時に飽和するようになります。この変更は、古い動作に意図せず依存している可能性があるため「後方互換性のない」変更として強調されています。#32898HaiBo Li)。
  • 関数 cast(value, 'IPv4')cast(value, 'IPv6')toIPv4toIPv6 関数と同じように動作するようにしました。不正な IP アドレスが toIPv4toIPv6 関数に渡された場合の動作を変更しました。今後は無効な IP アドレスがこれらの関数に渡されると例外が送出されますが、以前はデフォルト値を返していました。IPv4StringToNumOrDefaultIPv4StringToNumOrNullIPv6StringToNumOrDefaultIPv6StringOrNulltoIPv4OrDefaulttoIPv4OrNulltoIPv6OrDefaulttoIPv6OrNull 関数を追加しました。以前のロジックで、無効なアドレスに対して IPv4StringToNumtoIPv4toIPv6 がデフォルト値を返すことに依存していた場合は、IPv4StringToNumOrDefaulttoIPv4OrDefaulttoIPv6OrDefault を使用する必要があります。設定 cast_ipv4_ipv6_default_on_conversion_error を追加しました。この設定が有効な場合、IP アドレス変換関数は以前と同じように動作します。#22825 をクローズ。#5799 をクローズ。#35156 をクローズ。#35240Maksim Kita)。

新機能

  • リモートファイルシステムに対するローカルキャッシュのサポート。s3 ディスクで有効化できます。#28961 をクローズしました。#33717Kseniia 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')#34946lgbo)。
  • SSL 経由で接続しているユーザーを、その X.509 証明書により認証する機能をサポート。#31484eungenue)。
  • テーブル関数 file/hdfs/s3/url への挿入時のスキーマ推論をサポート。#34732Kruglov Pavel)。
  • system.zookeeper テーブルを、パスや like 式による制限なしで読み取れるようになりました。これらの読み取りは ZooKeeper にかなり大きな負荷をかける可能性があるため、この機能を利用するには設定 allow_unrestricted_reads_from_keeper を有効にする必要があります。#34609Sergei Trifonov)。
  • clickhouse-local で CPU とメモリのメトリクスを表示できるようにしました。#34545 をクローズしました。#34605李扬)。
  • 配列向けの startsWith および endsWith 関数を実装。#33982 をクローズしました。#34368usurai)。
  • Map データ型向けに 3 つの関数を追加: 1. mapReplace(map1, map2) - map1 に存在するキーについて、対応する値を map2 の値で置き換えます。また、map1 に存在しない map2 のキーを追加します。2. mapFilter 3. mapMap。mapFilter と mapMap は高階関数であり、2 つの引数を受け取ります。1 つ目の引数は引数として k, v のペアを取るラムダ関数、2 つ目の引数は Map 型のカラムです。#33698hexiaoting)。
  • clickhouse-client のデフォルトのユーザー名およびパスワードを、環境変数 CLICKHOUSE_USERCLICKHOUSE_PASSWORD から取得できるようにしました。#34538 をクローズしました。#34947DR)。

実験的機能

  • 新しいデータ型 Object(<schema_format>)。半構造化データ(現時点では JSON のみ)の保存をサポートします。データはまず文字列としてこの型に書き込まれます。その後、半構造化データの形式に従ってすべてのパスが抽出され、それぞれの値を保持できる最適な型の個別のカラムとして書き込まれます。これらのカラムは、ソースデータ内のパスに対応する名前でクエリできます。例: data.key1.key2 や、キャスト演算子を用いた data.key1.key2::Int64
  • database_replicated_allow_only_replicated_engine 設定を追加。この設定が有効な場合、Replicated データベース内では Replicated テーブル、またはステートレスエンジンを持つテーブルのみ作成できます。#35214Nikolai Kochetov)。なお、Replicated データベース自体はいまだ実験的機能である点に注意してください。

パフォーマンスの改善

  • MergeTree テーブルへの挿入時のソート処理を最適化することで性能を改善しました。実運用に近いベンチマークでは最大 2 倍の向上が確認されています。 #34750 (Maksim Kita).
  • URL および S3 から Parquet、ORC、Arrow ファイルを読み取る際の列プルーニングを実装しました。 #34163 をクローズします。 #34849 (Kseniia Sumarokova).
  • Hive から Parquet、ORC、Arrow ファイルを読み取る際の列プルーニングを実装しました。 #34954 (lgbo).
  • パフォーマンス・スーパーヒーローによる多数のパフォーマンス最適化を行いました。大きな IN 節を含むクエリの処理性能を改善しました。ソースが ClickHouse の場合の direct ディクショナリの性能を改善しました。detectCharsetdetectLanguageUnknown 関数の性能を改善しました。 #34888 (Maksim Kita).
  • より多くのバッチ処理を用いることで any 集約関数の性能を改善しました。 #34760 (Raúl Marín).
  • clickhouse-keeper の性能を複数の点で改善しました。ロックの削減 #35010 (zhanglistar)、スナップショットをフルコピーではなくストリーミングで読み書きすることによるメモリ使用量の削減 #34584 (zhanglistar)、RAFT 実装におけるログストアのコンパクションの最適化 #34534 (zhanglistar)、内部データ構造のバージョニング対応 #34486 (zhanglistar) などです。

改善点

  • テーブル関数への非同期での INSERT を許可。#34864 を修正。#34866 (Anton Popov).
  • 関数 dictGetHierarchydictIsIndictGetChildrendictGetDescendants のキー引数に対する暗黙的な型キャストに対応。#34970 をクローズ。#35027Maksim Kita)。
  • EXPLAIN AST クエリは、Graphviz 形式のグラフとして AST を出力できます: EXPLAIN AST graph = 1 SELECT * FROM system.parts#35173 (李扬)。
  • 大きなファイルを s3 テーブル関数またはテーブルエンジンを使用して書き込んだ際、AWS SDK のバグにより、ファイルの Content-Type が誤って application/xml に設定されていました。この変更により #33964 がクローズされました。#34433Alexey Milovidov)。
  • 制限的な行ポリシーを一部変更し、簡単なケースでは許可ポリシーのより扱いやすい代替として利用しやすくしました。特定のテーブルに対して制限的ポリシーだけが存在し(許可ポリシーがない場合)、ユーザーはいくつかの行を参照できるようになります。また、SHOW CREATE ROW POLICY は行ポリシーの定義内で常に AS permissive または AS restrictive を表示するようになります。 #34596 (Vitaly Baranov)。
  • File/S3/HDFS/URL エンジンにおけるグロブパターンを用いたスキーマ推論を改善。エラーが発生した場合は、次のパスでスキーマ推論を試みるようにしました。 #34465 (Kruglov Pavel).
  • Play UI は、OS の設定に従って優先されているライト/ダークテーマを正しく検出するようになりました。 #35068 (peledni).
  • date_time_input_format = 'best_effort_us' を追加しました。#34799 をクローズしました。 #34982WenYao)。
  • サーバー設定に、新しい設定項目 allow_plaintext_passwordallow_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_logdisk_name フィールドを追加しました。 #35178 (Artyom Yurkov)。
  • リモート URL をクエリするときに、再試行できないエラーは再試行しないようにしました。#35161 をクローズしました。 #35172Kseniia Sumarokova)。
  • テーブル関数 view() において、分散 INSERT SELECT クエリ(設定 parallel_distributed_insert_select)をサポート。 #35132 (Azat Khuzhin).
  • AggregateFunction を使用した Buffer への INSERT 操作時のメモリトラッキングがより正確になりました。 #35072 (Azat Khuzhin).
  • Linux カーネルにバグがある場合に、Query Profiler でゼロによる除算が発生しないようにしました。#34787 をクローズ。#35032Alexey Milovidov)。
  • keeper 設定に対する健全性チェックを強化しました。localhost と localhost 以外のサーバーを混在させることはできなくなり、さらに internal raft port と keeper client port が同じ値になっていないかをチェックするようにしました。 #35004 (alesapin)。
  • 現在は、ユーザーが system テーブルの設定を変更すると、大量のログが出力され、ClickHouse が 1 分ごとにテーブルの名前を変更してしまいます。この変更により、#34929 が修正されます。#34949Nikita Mikhaylov)。
  • Hive metastore クライアントでコネクションプールを使用する。 #34940 (lgbo).
  • 新しいテーブルエンジンがカラムごとの TTL をサポートしていない場合(つまり、そのエンジンが MergeTree ファミリーに属していない場合)、CREATE TABLE AS で指定されたカラムごとの TTL を無視するようにしました。 #34938 (Azat Khuzhin).
  • ngrambf_v1/tokenbf_v1 インデックスで LowCardinality 文字列を許可する。#21865 を解決。#34911Lars Hiller Eidnes)。
  • ファイルが存在しなくても空の sqlite データベースを開けるようにしました。#33367 をクローズしました。 #34907Kseniia Sumarokova)。
  • FreeBSD 向けメモリ統計機能を実装しました。これは max_server_memory_usage が正しく動作するために必要です。#34902 (Alexandre Snarskii)
  • 以前のバージョンでは、clickhouse-client のプログレスバーが、理由もなく約 50% まで突然ジャンプすることがありました。この修正により #34324 がクローズされます。#34801Alexey Milovidov)。
  • columnXALIAS 列である場合、MergeTree テーブルエンジンに対する ALTER TABLE DROP COLUMN columnX クエリが即時に実行されるようになりました。#34660 を修正。#34786alesapin)。
  • ユーザーがデータスキッピングインデックスの名前を誤って入力した場合に、ヒントを表示するようにしました。#29698 をクローズしました。#34764flynn)。
  • parallel_distributed_insert_selectremote() および cluster() テーブル関数をサポートしました。 #34728 (Azat Khuzhin).
  • 設定ファイルでの設定が空の場合でも、コマンドラインオプション --log-file / --errorlog-file で指定されたロギングをリセットしないようにしました。 #34718 (Amos Bird).
  • テーブル作成時にのみスキーマを抽出し、サーバーの起動ごとにローカルファイルや外部ソースを読み取ってスキーマを抽出しないようにする。 #34684 (Kruglov Pavel).
  • 実行可能な UDF に引数名を指定できるようにしました。これは、NativeJSONEachRow のように、引数名がシリアル化の一部となるフォーマットで必要となります。#34604 を解決しました。#34653Maksim Kita)。
  • MaterializedMySQL(試験的機能)は、materialized_mysql_tables_list(MaterializedMySQL データベースエンジンがレプリケートする MySQL データベーステーブルのカンマ区切りリスト。デフォルト値: 空のリスト(すべてのテーブルがレプリケートされることを意味します))をサポートするようになりました。#32977 で言及されています。#34487zzsmdfj)。
  • 分散テーブルに対する INSERT 操作の OpenTelemetry スパンログを改善しました。#34480Frank Chen)。
  • ClickHouse Keeper 内のサーバー間で znode の ctimemtime が一致するようにしました。 #33441 (小路)。

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

  • パッケージリポジトリを JFrog Artifactory に移行しました(Mikhail f. Shiryaev)。
  • 機能テスト内の一部の設定をランダム化し、より多くの設定の組み合わせがテストされるようにしました。これはテストカバレッジを向上させるための追加のファジング手法です。これにより #32268 がクローズされました。#34092Kruglov Pavel)。
  • CI から PVS-Studio を削除しました。#34680Mikhail f. Shiryaev)。
  • CMake でシンボル情報を削除した(stripped)バイナリをビルドできるようにしました。以前のバージョンでは dh-tools によって行っていました。#35196alesapin)。
  • より小さい「fat-free」な clickhouse-keeper ビルド。#35031alesapin)。
  • https://github.com/ClickHouse/ClickHouse/pull/34685 のような PR に対して、著者およびコミッターとして @robot-clickhouse を使用するようにしました。#34793Mikhail f. Shiryaev)。
  • デバッグ情報の DWARF バージョンを最大 4 に制限しました。社内のスタックシンボライザが DWARF バージョン 5 をパースできないためです。clang-15 で ClickHouse をコンパイルする場合に有用です。#34777Alexey Milovidov)。
  • 不要な複雑さとなっていた clickhouse-test の Debian パッケージを削除しました。CI ではリポジトリ内のテストを使用しており、Debian パッケージ経由のスタンドアロンテストはもはやサポートされません。#34606Ilya Yatsishin)。

バグ修正(公式 stable / prestable リリースにおけるユーザー影響のある不具合)

  • HDFS 統合に対する修正: 内部バッファのサイズが小さすぎる場合、HadoopSnappyDecoder の NEED_MORE_INPUT が 1 つの圧縮ブロックに対して複数回(3 回以上)実行されます。これにより、入力データが HadoopSnappyDecoder::buffer 内の誤った位置にコピーされてしまいます。#35116lgbo)。
  • ATTACH GRANT ステートメントで廃止された権限を無視するようにしました。この PR は #34815 を修正します。 #34855 (Vitaly Baranov)。
  • 名前付きコレクションを使用して作成されたデータベースで、CREATE TABLE クエリを取得する際に発生する Postgres データベースのセグメンテーションフォルトを修正。#35312 をクローズ。#35313Kseniia Sumarokova)。
  • 部分マージ結合において発生していた重複行バグを修正し、#31009 をクローズ。#35311Vladimir C)。
  • 小さい値の max_read_buffer_size 設定とともに bzip2 圧縮を使用している際に発生しうる Assertion 'position() != working_buffer.end()' failed を修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35047 で発見されました。#35300Kruglov Pavel)。小さい max_read_buffer_size 設定値で lz4 圧縮を使用している場合に発生する同様の問題を修正しました。#35296Kruglov Pavel)。小さい max_read_buffer_size 設定値で lzma 圧縮を使用している場合に発生する同様の問題を修正しました。#35295Kruglov Pavel)。小さい max_read_buffer_size 設定値で brotli 圧縮を使用している場合に発生する問題を修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35047 で発見されました。#35281Kruglov Pavel)。
  • JSONEachRow スキーマ推論で起こりうるセグメンテーションフォルトを修正。 #35291 (Kruglov Pavel).
  • スパースカラムが有効なテーブルに対する CHECK TABLE クエリを修正しました。#35274Anton Popov)。
  • リモート VFS からの読み取り中に発生した例外により std::terminate が呼び出されないようにしました。 #35257 (Azat Khuzhin).
  • 設定からのポート読み取り処理を修正し、#34776 をクローズ。#35193Vladimir C)。
  • HAVING によって空の結果が返された場合に、WITH TOTALS を含むクエリで発生していたエラーを修正しました。これにより #33711 が修正されました。#35186Amos Bird)。
  • replaceRegexpAll のコーナーケースを修正し、#35117 をクローズしました。#35182Vladimir C)。
  • INSERT INTO FUNCTION s3(...) FROM ... を使用した場合、スキーマ推論が正しく動作せず、SELECT クエリからではなく S3 ファイルからスキーマを読み取ろうとしていました。 #35176 (Kruglov Pavel).
  • MaterializedPostgreSQL(実験的機能)の table overrides における partition by などの設定の問題を修正。#35048 をクローズ。#35162Kseniia Sumarokova)。
  • MaterializedPostgreSQL(実験的機能)において、手動で DETACH TABLE を実行した後に、新しいテーブルを ATTACH TABLE してレプリケーションに追加できない問題を修正しました。#33800 をクローズ。#34922 をクローズ。#34315 をクローズ。#35158Kseniia Sumarokova)。
  • IN 演算子と併用された非単調関数により発生するパーティションプルーニングのエラーを修正しました。この修正により #35136 が解消されました。#35146Amos Bird)。
  • YAML 設定を XML に変換する処理での軽微な誤りを修正しました。 #35135 (Miel Donkers).
  • 符号付き列および負の値に対する optimize_skip_unused_shards_rewrite_in の処理を修正。 #35134 (Azat Khuzhin).
  • 外部ディクショナリの設定オプション update_lag は、「Unexpected key `update_lag` in dictionary source configuration」というエラーメッセージが表示され、使用できませんでした。#35089Jason Chu)。
  • サーバーシャットダウン時に発生し得るデッドロックを回避。 #35081 (Azat Khuzhin).
  • optimize_functions_to_subcolumns 設定が有効な場合に、関数がサブカラムに最適化された後にエイリアスが失われる不具合を修正。 #33798 をクローズ。 #35079qieqieplus)。
  • テーブル関数への非同期挿入が存在する場合における system.asynchronous_inserts テーブルからの読み取りを修正。 #35050 (Anton Popov).
  • リモート VFS 上での操作に関連して発生し得た例外 Reading for MergeTree family tables must be done with last position boundary を修正しました。 #34979 をクローズしました。 #35001Kseniia Sumarokova)。
  • -State 型の集約関数をウィンドウフレーム内で使用した際に発生する予期しない結果を修正。 #34999 (metahys).
  • FileLog(実験的機能)で発生する可能性のあるセグメンテーションフォールトを修正。#30749 をクローズ。#34996Kseniia Sumarokova)。
  • まれに発生する可能性のあるエラー Cannot push block to port which already has data を修正しました。 #34993 (Nikolai Kochetov).
  • CSV 内の引用符で囲まれていない日付に対する誤ったスキーマ推論を修正。 #34768 をクローズ。 #34961 (Kruglov Pavel).
  • Hive との統合: Hive クエリの wherein を使用した場合に予期しない結果が返される問題を修正。 #34945 (lgbo).
  • 削除対象のチェンジログファイルを検索する際の ClickHouse Keeper のビジーポーリングを回避しました。 #34931 (Azat Khuzhin).
  • PostgreSQL からの DateTime64 変換を修正しました。#33364 をクローズしました。#34910Kseniia Sumarokova)。
  • VFS 経由で S3 をバックエンドとする MergeTree テーブルへの INSERT 実行時に発生する可能性があった "Part directory doesn't exist" エラーを修正しました。 #34876 (Azat Khuzhin).
  • CREATE USER などの DDL を cross replicated cluster 上で実行できるようにしました。 #34860 (Jianmei Zhang).
  • WindowView(実験的機能)で複数列を対象とした GROUP BY のバグを修正。 #34859 (vxider).
  • クエリに const 列が含まれている場合に S2 関数で失敗が発生する可能性のある問題を修正。 #34745 (Bharat Nallan)。
  • クエリが失敗する原因となっていた、定数カラムを含む H3 関数に関するバグを修正。 #34743 (Bharat Nallan).
  • fsync_part_directory を有効にし、vertical merge を使用している場合に発生する No such file or directory エラーを修正。 #34739 (Azat Khuzhin).
  • ON CLUSTER で使用する場合のシステムクエリ RELOAD MODELRELOAD FUNCTIONRESTART DISK のシリアル化/出力処理を修正。#34514 をクローズ。#34696Maksim Kita)。
  • allow_experimental_projection_optimizationenable_global_with_statement と併せて修正しました(以前は WITH 句に複数の式がある場合に Stack size too large エラーが発生する可能性があり、またスカラサブクエリが何度も実行されていましたが、この修正により動作がより最適化されます)。 #34650 (Azat Khuzhin).
  • ReplatedMergeTree エンジンに対して、他のレプリカがすでにトランザクションログを更新している場合には、mutate 対象パーツの選択を停止するようにしました。 #34633 (Jianmei Zhang).
  • パーツ移動機能が使用されている場合に、単純な COUNT クエリが誤った結果を返す問題を修正しました #34089#34385 (nvartolomei)。
  • 分散サブクエリにおける max_query_size 制限の不整合を修正。#34078Chao Ma)。

ClickHouse リリース v22.2, 2022-02-17

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

  • FINAL を含むクエリに対してデータスキップインデックスを適用すると、誤った結果になる可能性があります。本リリースでは、FINAL を含むクエリに対してはデータスキップインデックスをデフォルトで無効化しました(新しい設定 use_skip_indexes_if_final が導入されており、デフォルトでは無効になっています)。#34243 (Azat Khuzhin)。

新機能

  • Projection は本番利用が可能になりました。allow_experimental_projection_optimization をデフォルトで有効化し、この設定を非推奨とします。 #34456 (Nikolai Kochetov)。
  • File / S3 / HDFS エンジンで、挿入時に新しいファイルを作成するためのオプションを追加。HDFS ではファイルの上書きを許可する。デフォルトでは、S3 のファイルを上書きしようとした場合は例外をスローする。末尾にサフィックスを持つ形式(そのため追記をサポートしない ParquetORC など)でファイルにデータを追記しようとした場合も、例外をスローする。#31640 をクローズ。#31622 をクローズ。#23862 をクローズ。#15022 をクローズ。#16674 をクローズ。#33302Kruglov Pavel)。
  • MergeTree/ReplicatedMergeTree において、ユーザーが独自の重複排除セマンティクスを指定できる設定を追加しました。指定された場合、ブロック ID を生成する際にデータダイジェストの代わりにその値が使用されます。たとえば、各 INSERT 文でこの設定に一意の値を指定することで、同じデータを挿入しても重複排除されないようにできます。これにより次の issue が解決されました: #7461#32304Igor Nikonov)。
  • INSERT 文での DEFAULT キーワードのサポートを追加しました。#6331 をクローズします。#33141Andrii Buriachevskyi)。
  • EPHEMERAL カラム指定子を CREATE TABLE クエリで使用可能にしました。#9436 をクローズしました。#34424yakov-olkhovskiy)。
  • TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx' 機能で IF EXISTS 句をサポートしました。パーツは、レプリカ上に対象のディスクまたはボリュームが存在する場合にのみ、そのディスクまたはボリュームへ移動されるため、MOVE TTL ルールは既存のストレージポリシーに応じてレプリカごとに異なる動作を行えるようになります。#34455 を解決します。#34504Anton Popov)。
  • デフォルトのテーブルエンジンを設定し、ENGINE を指定せずにテーブルを作成できるようにしました。 #34187 (Ilya Yatsishin).
  • テーブル関数 format(format_name, data) を追加しました。 #34125 (Kruglov Pavel).
  • clickhouse-local において、標準入力で渡された場合でもファイル名に基づいてフォーマットを検出できるようにしました。 #33829 (Kruglov Pavel).
  • values テーブル関数にスキーマ推論を追加。#33811 をクローズ。#34017Kruglov Pavel)。
  • 設定のリロード時にサーバーの TLS 証明書を動的に再読み込みできるようにしました。 #15764 をクローズしました。 #15765johnskopis)。 #31257Filatenkov 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 用の新しい各種関数を追加: edgeLengthKmexactEdgeLengthKmexactEdgeLengthMexactEdgeLengthRadsnumHexagons#33621 (Bharat Nallan)。
  • String/FixedString 型からビット部分列を抽出するための関数 bitSlice を追加。#33360 (RogerYK)。
  • meanZTest 集約関数を実装しました。 #33354 (achimbab)。
  • T検定集約関数に信頼区間を追加。 #33260 (achimbab).
  • 関数 addressToLineWithInlines を追加し、#26211 をクローズ。 #33467SuperDJY)。
  • #!# を 1 行コメントの開始として認識されるようにしました。#34138 をクローズしました。#34230Aaron Katz)。

実験的機能

  • テキスト分類用の関数。言語および文字セットの検出をサポート。#23271 を参照。#33314Nikolay Degterinsky)。
  • MemoryTracker にメモリオーバーコミットを追加。ソフトなメモリ上限を表すメモリ制限用の guaranteed 設定を追加。ハードメモリ上限に到達した場合、MemoryTracker は最もオーバーコミットしているクエリをキャンセルしようとする。新しい設定 memory_usage_overcommit_max_wait_microseconds は、クエリが別のクエリの停止をどの程度の時間待機できるかを指定する。#28375 をクローズ。#31182Dmitry Novik)。
  • WindowView でストリームとテーブルの JOIN を有効化。#33729vxider)。
  • MaterializedMySQL(実験的機能)で SETYEARTIME および GEOMETRY データ型をサポート。#18091#21536#26361 を修正。#33429zzsmdfj)。
  • projection がデフォルトで有効な場合のさまざまな問題を修正。各問題は個別のコミットで説明されている。#33678 に対応するもの。これにより #34273 が修正される。#34305Amos Bird)。

パフォーマンスの改善

  • ソートキーの先頭部分がすでに並び替え済みである場合に optimize_read_in_order をサポートするようにしました。例えば、テーブルに ORDER BY (a, b) というソートキーがあり、クエリで WHERE a = const ORDER BY b という句を使用している場合、完全なソートを行う代わりに、ソートキーの順序で読み出すことで対応するようになります。 #32748 (Anton Popov).
  • パーティション分割挿入を行うテーブル関数 URLS3FileHDFS のパフォーマンスを改善しました。#34348 をクローズ。#34510Maksim Kita)。
  • clickhouse-keeper のパフォーマンスを複数点で改善。 #34484 #34587 (zhanglistar).
  • FlatDictionary が辞書データのロード性能を改善。 #33871 (Maksim Kita).
  • mapPopulateSeries 関数のパフォーマンスを改善します。 #33944 をクローズします。 #34318Maksim Kita)。
  • ファイルライクなテーブルエンジンにおける仮想カラム _file_pathLowCardinality に変更されました ― これにより、複数ファイルに対するクエリが高速になります。#34300 をクローズします。#34317flynn)。
  • データパーツの読み込みを高速化しました。以前は並列化されておらず、設定 part_loading_threads は有効になっていませんでした。#4699 を参照してください。#34310alexey-milovidov)。
  • LineAsString フォーマットのパフォーマンスを改善しました。これにより、#34303 がクローズされます。#34306alexey-milovidov)。
  • quantilesExact{Low,High} を、sort の代わりに nth_element を使用するように最適化しました。 #34287 (Danila Kutenin)。
  • Regexp フォーマットのパフォーマンスをわずかに向上させました。 #34202 (alexey-milovidov).
  • スカラーサブクエリの解析を一部改善しました。 #34128 (Federico Rodriguez)。
  • ORDER BY 句でのタプルを、ORDER BY 句での個別列とほぼ同じくらい高速にします。複数列の ORDER BY 向けには特別な最適化があります:https://github.com/ClickHouse/ClickHouse/pull/10831。これをタプル列にも適用すると有益です。#34060Amos Bird)。
  • マテリアライズドビューの実行時に使用するスカラーサブクエリキャッシュを再設計し、再導入しました。 #33958 (Raúl Marín).
  • memcmpSmall 関数に x86-64 AVX-512 サポートを追加してメモリ比較を高速化することで、ORDER BY の処理性能をわずかに向上させました。これは ClickHouse を自前でコンパイルした場合にのみ有効です。 #33706 (hanqf-git).
  • キーごとの区間が多数存在する場合の range_hashed 辞書のパフォーマンスを改善しました。 #23821 を修正。 #33516Maksim Kita)。
  • S3 に対して insert および merge を行う場合、可能な限り並列でファイルを書き込みます (TODO: マージ済みか確認する)。 #33291 (Nikolai Kochetov).
  • clickhouse-keeper のパフォーマンスを改善し、NuRaft ライブラリ内の複数のメモリリークを修正しました。 #33329 (alesapin)。

改善

  • インラインデータを含むクエリで、clickhouse-client による非同期インサートをサポートしました。 #34267 (Anton Popov).
  • 関数 dictGetdictHas は、辞書のキー構造と異なるキー引数が渡された場合、そのキー引数を辞書のキー構造に暗黙的にキャストします。 #33672 (Maksim Kita)。
  • range_hashed 辞書の改善。複数の attribute がある場合の読み込み時間のパフォーマンスを向上。attribute なしで辞書を作成できるようにした。区間の startendNullable 型の場合の戦略を指定するオプションを追加。convert_null_range_bound_to_open のデフォルトは true#29791 をクローズ。範囲型として Float, Decimal, DateTime64, Int128, Int256, UInt128, UInt256 を指定できるようにした。RangeHashedDictionaryInt64 型を超える範囲値のサポートを追加。#28322 をクローズ。範囲ルックアップの種類を指定するオプション range_lookup_strategy を追加。min, max を指定可能で、デフォルトは min#21647 をクローズ。割り当て済みバイト数の計算を修正。ComplexKeyHashedDictionary の場合の system.dictionaries における型名を修正。#33927 (Maksim Kita)。
  • flathashedhashed_array の各ディクショナリで、属性を空のまま作成することがサポートされ、キーの読み取りおよび dictHas の使用にも対応しました。 #33820 を修正しました。 #33918Maksim 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" &lt; data.format と書くだけで実行できるようになりました。 #34495 (Kruglov Pavel).
  • CREATE/ALTER/DROP ROW POLICY の権限は、グローバルな *.* に加えて、テーブル単位または database.* 単位でも付与できるようになりました。 #34489 (Vitaly Baranov).
  • s3 への任意のサイズのファイルのエクスポートを可能にしました。2 つの新しい設定 s3_upload_part_size_multiply_factors3_upload_part_size_multiply_parts_count_threshold を追加しました。今後は、単一のクエリから S3 に対してアップロードされたパート数が s3_upload_part_size_multiply_parts_count_threshold に達するたびに、s3_min_upload_part_sizes3_upload_part_size_multiply_factor 倍されます。#34244 を修正しました。 #34422alesapin)。
  • URL ストレージ / テーブル関数の使用時に、グロブ指定された URL について、見つからない (404) URL をスキップできるようにしました。あわせて #34359 もクローズしました。 #34392 (Kseniia Sumarokova)。
  • clickhouse-local のデフォルト入力および出力フォーマットであり、--input-format と --output-format で上書き可能です。 #30631 をクローズ。 #34352李扬)。
  • clickhouse-formatmax_query_size および max_parser_depth オプションを追加しました。これにより #30528 をクローズしました。#34349李扬)。
  • クライアント起動前の入力処理を改善。#34308 への対応です。#34336Amos Bird)。
  • PostgreSQL 互換のために REGEXP_MATCHES および REGEXP_REPLACE 関数のエイリアスを追加。#30885 をクローズ。#34334李扬)。
  • 一部のサーバーは、HTTP リクエストに User-Agent ヘッダーが含まれていることを前提としています。HTTP リクエストに、次の形式の User-Agent ヘッダーを追加しました: User-Agent: ClickHouse/VERSION_STRING。 #34330 (Saad Ur Rahman)。
  • 一部のケースで DEADLOCK_AVOIDED エラーが発生するのを回避するため、TRUNCATE クエリでテーブルロックを取得する前にマージをキャンセルするようにしました。 #34302 を修正。 #34304 (tavplubix)。
  • ログ内の "Cancelled merging parts" メッセージはエラーではないため、その重大度を変更しました。これにより #34148 がクローズされました。 #34232 (alexey-milovidov)。
  • PostgreSQL 形式のキャスト演算子 :: を、[] および . 演算子(配列およびタプルのインデックス指定)を使用する式と組み合わせて使用できるようにしました。 #34229 (Nikolay Degterinsky).
  • parseDateTimeBestEffort 関数で YYYYMMDD-hhmmss 形式を認識するようになりました。これにより #34206 がクローズされます。 #34208 (alexey-milovidov).
  • Regexp フォーマットでのパース時に、行の途中に含まれる改行(キャリッジリターン)を許可しました。これにより #34200 が解決されました。#34205 (alexey-milovidov).
  • ディクショナリの PRIMARY KEYPRIMARY KEY (id, value) としてパースできるようにしました。以前は PRIMARY KEY id, value のみがサポートされていました。#34135 をクローズしました。#34141Maksim Kita)。
  • splitByChar の結果の要素数を制限するオプション引数を追加。#34081 をクローズ。#34140李扬)。
  • clickhouse-client の複数行編集時の使い勝手を改善します。これは #31123 のフォローアップです。#34114Amos Bird)。
  • MsgPack の入出力フォーマットに UUID のサポートを追加。#34065 (Kruglov Pavel).
  • OpenTelemetry 用のトレーシングコンテキストは、gRPC クライアントのメタデータから伝播されるようになりました(この変更は gRPC クライアント-サーバープロトコルに関係します)。 #34064 (andremarianiello)。
  • ON CLUSTER 句を伴うあらゆる種類の SYSTEM クエリをサポートするようになりました。 #34005 (小路)。
  • max_untracker_memory 未満のメモリしか使用していないクエリのメモリ使用量の算出を改善しました。 #34001 (Azat Khuzhin).
  • 小文字と大文字の文字が異なるバイト数で表現される場合の、UTF-8 文字列に対する大文字小文字を区別しない検索の問題を修正しました。例としては ß があります。これにより #7334 がクローズされました。#33992Harry Lee)。
  • clickhouse-local で標準入力(stdin)からフォーマットとスキーマを自動検出できるようにしました。#33960 (Kruglov Pavel)
  • 複数のディスクがファイルシステム上で同じパスを使用している誤った設定の場合でも正しく処理できるようにしました。 #29072#33905 (zhongyuankai)。
  • S3 プロキシを取得する際に、名前解決されたすべての IP アドレスを試行するようにしました。S3 プロキシが使用されることはまれで、主に Yandex Cloud で使用されています。#33862 (Nikolai Kochetov)。
  • EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String) クエリをサポートしました。これにより、EXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String') が返されます。 #33819 (李扬).
  • Map(Key, Value) から Array(Tuple(Key, Value)) へのキャストのサポートを追加しました。 #33794 (Maksim Kita).
  • Bool データ型に対して、いくつかの改善と修正を行いました。 #33244 を修正します。 #33737Kruglov Pavel)。
  • OpenTelemetry の trace-id をビッグエンディアン順でパースして保存するようにしました。 #33723 (Frank Chen)。
  • fromUnixTimestamp64 ファミリの関数を改良しました。Int64 に変換可能な任意の整数値を受け付けるようになりました。これにより次の Issue がクローズされました: #14648#33505Andrey Zvonov)。
  • _shard_num の定数ベースの実装を shardNum() 関数による実装に置き換えました(#7624#27020 を参照)。これは、(#16947 で見つかったもののような)潜在的な問題を回避するためです。#33392Azat Khuzhin)。
  • Decimal 型と Float 型の二項演算(加算、減算、乗算、除算、least、greatest)をサポート。 #33355 (flynn).
  • max_threads の自動検出で cgroups の制限を考慮するようにしました。 #33342 (JaySon).
  • clickhouse-keeper に新しい設定 min_session_timeout_ms を追加しました。これにより、clickhouse-keeper はクライアントセッションのタイムアウト時間を、min_session_timeout_mssession_timeout_ms の設定に基づいて決定するようになります。 #33288 (JackyWoo).
  • 関数 hex および binUUID データ型をサポートするようになりました。 #32170 (Frank Chen).
  • 名前にドットを含むサブカラムの読み込みの不具合を修正しました。特に、要素名にドットが含まれている場合の Nested カラムの読み込みを修正しました(例: Nested(`keys.name` String, `keys.id` UInt64, values UInt64))。#34228Anton Popov)。
  • VALUES を使用してテーブルに挿入した場合に parallel_view_processing = 0 が機能しない問題を修正。 - query_views_logview_duration_ms がマテリアライズドビューに対して正しく設定されない問題を修正。 #34067 (Raúl Marín)
  • ZooKeeper から取得したテーブル構造の解析処理を修正: ZooKeeper のメタデータをローカルのメタデータと正規形で比較するようにしました。これにより、ClickHouse のバージョン間で正規的な関数名が変更される場合にも対応しやすくなります。 #33933 (sunny).
  • LDAP との連携で一部の文字を適切にエスケープするようにしました。 #33401 (IlyaTsoi).

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

  • 非バンドルビルドのサポートを削除。#33690 (Azat Khuzhin).
  • テストが、等しい要素に対する非安定ソートの結果に依存しないようにするため、ソート後のデバッグビルドで等しい要素の区間をランダム化する処理を追加し、等しい要素の並び順に依存していた場合の問題を防止。#34393 (Maksim Kita).
  • スタイルチェックに詳細な出力を追加。#34289 (Mikhail f. Shiryaev).
  • 廃止されたため、clickhouse-test の Debian パッケージを削除。#33948 (Ilya Yatsishin).
  • OS 由来のパッケージを誤って使用してしまう可能性を排除し、hermetic(再現可能な)ビルドを強制するために、ビルドシステムに複数の改善を実施。#33695 (Amos Bird).

バグ修正(公式の stable または prestable リリースにおけるユーザーから見える誤動作)

  • allow_experimental_parallel_reading_from_replicasmax_parallel_replicas が 1 の場合に使用したときに発生していたアサーションの問題を修正しました。これにより #34525 が解決されます。 #34613 (Nikita Mikhaylov)。
  • 空の配列を読み取る際にまれに発生し、Data compressed with different methods エラーを引き起こす可能性のあったバグを修正しました。これは、ほとんどが空の配列であるデータの場合に再現する可能性がありますが、常に発生するわけではありません。また、ORDER BY ... DESC を用いた降順での逆方向の読み取り時に発生します。このエラーが発生する可能性は極めて低いものです。 #34327 (Anton Popov)。
  • 小さい整数型の値を丸める場合に round / roundBankers が誤った結果を返す問題を修正しました。#33267 をクローズ。#34562李扬)。
  • 複数のファイルを S3 または HDFS から読み込んでいる場合、クエリのキャンセルが即時に行われないことがありました。 #34301 を修正。 #34397 に関連。 #34539Dmitry Novik)。
  • 例外 Chunk should have AggregatedChunkInfo in MergingAggregatedTransform を修正しました(optimize_aggregation_in_order = 1 かつ distributed_aggregation_memory_efficient = 0 の場合)。#34526 を修正しました。#34532Anton Popov)。
  • インデックス解析時の整数と浮動小数点数の比較を修正しました。以前は、誤って一部のグラニュールの読み取りをスキップしてしまう可能性がありました。#34493 を修正します。#34528Anton Popov)。
  • URL エンジンの圧縮サポートを修正。#34524 (Frank Chen).
  • files のスキーマ自動検出で発生する可能性があるエラー 'file_size: Operation not supported' を修正。#34479 (Kruglov Pavel).
  • テーブル削除時に発生しうるレースコンディションを修正。 #34416 (Kseniia Sumarokova).
  • ショートサーキット評価時の関数実行で発生する可能性のあるエラー Cannot convert column Function to mask を修正しました。#34171 をクローズします。#34415Kruglov Pavel)。
  • URL ソースからのスキーマ推論時に起こりうるクラッシュを修正しました。 #34147 をクローズしました。 #34405Kruglov Pavel)。
  • UDF のアクセス権限チェックが、本来あるべきグローバルレベルではなくデータベースレベルで行われていました。 #34281 をクローズします。 #34404 (Maksim Kita)。
  • エンジンに Memory を使用するデータベースに対する SHOW CREATE DATABASE クエリ結果内の誤ったエンジン構文を修正しました。これにより #34335 が解決されました。#34345alexey-milovidov)。
  • レプリケーションキューが破損した状態になったり「intersecting parts」エラーが発生したりする可能性があった、極めてまれなレースコンディションをいくつか修正しました。#34297 (tavplubix).
  • プログレスバーの幅を修正しました。文字数単位の整数値に誤って丸められていました。 #34275 (alexey-milovidov)。
  • サーバー間通信時の client information フィールド current_user/current_address の扱いを修正しました(このパッチ以前は current_user/current_address が前のクエリから引き継がれたままになっていました)。 #34263 (Azat Khuzhin).
  • optimize_aggregation_in_order=1 を指定したクエリ処理中に特定の例外が発生した場合のメモリリークを修正。 #34234 (Azat Khuzhin).
  • 実行中のクエリ数を示すメトリクス Query を修正しました。最近のいくつかのリリースでは常に 0 になっていました。 #34224 (Anton Popov)。
  • テーブル関数 s3 のスキーマ推論を修正しました。 #34186 (Kruglov Pavel).
  • HDFSS3URL ストレージエンジンで発生しうる、追加の接続が確立されることにつながる可能性のある、まれだが無害なレースコンディションを修正しました。 #34172 (alesapin).
  • S3 のようなリモートファイルシステム上にデータを格納する MergeTree テーブルエンジンファミリーで LowCardinality カラムを読み込む際、まれに「Cannot read all data」というエラーが発生する不具合を修正しました(S3 上の仮想ファイルシステムは本番運用にはまだ準備ができていない実験的機能です)。 #34139 (alesapin).
  • ネイティブプロトコルが変更された場合に、Distributed テーブルへの挿入が失敗する問題を修正します。直近の変更はバージョン 22.1 で導入されたため、そのバージョンへアップグレードした後に Distributed テーブルへの挿入が失敗する場合があります。#34132 (Anton Popov)。
  • File テーブルエンジンにおいて、#33960 によって導入された可能性のあるデータレースを修正。#34111 をクローズ。#34113Kruglov Pavel)。
  • ZooKeeper 接続喪失後にごくまれに "intersecting parts" エラーが発生し得た軽微なレースコンディションを修正しました。 #34096 (tavplubix).
  • Native フォーマットでの非同期インサートを修正。 #34068 (Anton Popov).
  • replicated access storage と keeper(clickhouse-server に組み込み)を同時に使用した場合にサーバーが起動できなくなる原因となっていた不具合を修正しました。default user の設定ではなく、keeper ソケットのタイムアウト用として keeper_server.socket_receive_timeout_seckeeper_server.socket_send_timeout_sec の 2 つの設定を導入しました。#33973 を修正。#33988alesapin)。
  • フッターが破損した ORC ファイルをパースする際に発生していたセグメンテーションフォルトを修正。#33797 をクローズ。#33984Kruglov Pavel)。
  • クエリパラメータ(プリペアドステートメント)からの IPv6 の解析を修正し、IPv6 から文字列への変換も修正。#33928 をクローズ。#33971Kruglov Pavel)。
  • ネストされたタプルの読み取り時に発生するクラッシュを修正。#33838 を解決。#33956Anton Popov)。
  • 分散クエリにおけるリテラル引数付きの関数 array および tuple の扱いを修正しました。以前はこれにより Not found columns 例外がスローされる可能性がありました。 #33938 (Anton Popov).
  • 集約関数コンビネータ -If が、Nullable のフィルタ引数を正しく処理できていませんでした。この修正により #27073 がクローズされました。 #33920 (alexey-milovidov).
  • リモートディスク読み取り時に発生しうるレースコンディションを修正しました(S3 上の仮想ファイルシステムは、本番利用にはまだ準備ができていない実験的機能です)。 #33912 (Amos Bird).
  • 識別子ではない引数を持つラムダ式を使用して SQL UDF が作成された場合にクラッシュする問題を修正しました。#33866 をクローズしました。 #33868Maksim Kita)。
  • スパースカラムの使用を修正しました(実験的設定 ratio_of_defaults_for_sparse_serialization を有効にすると利用できます)。#33849Anton Popov)。
  • SYSTEM RESTORE REPLICA クエリで、レプリカが実際には readonly であるにもかかわらず replica is not readonly という論理エラーが発生していた問題を修正しました。#33806 を修正します。#33847tavplubix)。
  • 圧縮が有効な場合(デフォルト)に発生する clickhouse-keeper のメモリリークを修正。 #33840 (Azat Khuzhin).
  • 共通の型が利用できない場合のインデックス解析を修正。 #33833 (Amos Bird).
  • JSONEachRowJSONCompactEachRow のスキーマ推論を修正。 #33830 (Kruglov Pavel).
  • redis ソースを使用し大量のキーを扱う外部ディクショナリの利用を修正。 #33804 (Anton Popov).
  • サーバー側で「Connection reset by peer」エラーを引き起こしていたクライアントのバグを修正。#33309 をクローズ。#33790Kruglov 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 が解決されました。#33679Amos Bird)。
  • 名前付き HTTP セッション内で CREATE TEMPORARY TABLE AS SELECT が実行された場合に、現在のデータベースを正しく判定できるようにしました。これは非常にまれなユースケースです。これにより #8340 が解決されました。 #33676 (alexey-milovidov)。
  • ソート、LIMIT BYARRAY JOIN、ラムダ関数を含む一部のクエリを許可します。これにより、#7462 がクローズされます。#33675alexey-milovidov)。
  • 「zero copy replication」(現在開発中であり、本番環境では使用すべきでない機能)において、TTL によるデータ移動時にデータが重複してしまう不具合を修正しました。#33643 を修正します。#33642alesapin)。
  • optimize_aggregation_in_order = 1 の場合における GroupingAggregatedTransform 内のエラー「Chunk should have AggregatedChunkInfo」を修正しました。#33637 (Azat Khuzhin)。
  • テーブルにドットを含む名前の Nested カラムが存在し、そのカラムに対してデフォルト値が生成される場合(例: 挿入時にそのカラムが指定されていない場合)に発生することがある Bad cast from type ... to DB::DataTypeArray エラーを修正しました。#28762 の継続対応です。#33588Alexey Pavlenko)。
  • lz4 ファイルへのエクスポートが修正されました。 #31421 をクローズしました。 #31862 (Kruglov Pavel)。
  • group_by_overflow_modeany(近似的な GROUP BY)に設定されていて、LowCardinality 型の単一列で集約を行った場合に発生する可能性があったクラッシュを修正しました。 #34506 (DR).
  • gRPC クライアント-サーバー間プロトコル経由での一時テーブルへの挿入を修正しました。#34347 の issue #2 を解決します。#34364Vitaly Baranov)。
  • #19429 の問題を修正。#34225Vitaly Baranov)。
  • Issue #18206 を修正。#33977Vitaly Baranov)。
  • このPRにより、同一のユーザーディレクトリリスト内で複数のLDAPストレージを使用できるようになります。これは以前は動作していましたが、LDAPテストが無効化されていたため(これらはtestflowsテストの一部です)、動作しなくなっていました。 #33574 (Vitaly Baranov).

ClickHouse リリース v22.1, 2022-01-18

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

  • 関数 leftright は、以前はパーサー内で実装されていましたが、現在は完全な機能を備えた関数として実装されています。エイリアスなしで left または right 関数を含む分散クエリは、クラスタ内に異なるバージョンの clickhouse-server が含まれている場合に、例外をスローする可能性があります。クラスタをアップグレード中にこのエラーが発生した場合は、すべてのノードが同じバージョンになるように、クラスタ全体のアップグレードを完了してください。また、この問題を回避するには、クエリ内のカラムにエイリアス(AS something)を追加することもできます。 #33407 (alexey-milovidov).
  • このバージョンから、スカラーサブクエリによるリソース使用量が完全に計上されるようになりました。この変更により、スカラーサブクエリで読み取られた行が query_log に記録されるようになります。スカラーサブクエリがキャッシュされている場合(繰り返し利用、または複数行に対して呼び出される場合)、読み取られた行は 1 回だけカウントされます。この変更により、スカラーサブクエリを実行している間でも、KILL 文でクエリを終了させたり、進捗を報告したりできるようになります。 #32271 (Raúl Marín).

新機能

  • 入力フォーマット向けのデータスキーマ自動推論を実装しました。テーブル関数 fileurls3hdfs および clickhouse-local のパラメータでは、構造を省略(または auto のみを記述)できるようにしました。テーブルエンジン FileHDFSS3URLMergeBufferDistributed および ReplicatedMergeTree(新しいレプリカを追加する場合)に対する CREATE クエリでも、構造を省略できるようにしました。 #32455 (Kruglov Pavel).
  • file/hdfs/s3/url テーブル関数および HDFS/S3/URL テーブルエンジン、さらに SELECT INTO OUTFILEINSERT FROM INFILE において、ファイル拡張子からフォーマットを自動検出するようにしました #33565 (Kruglov Pavel)。#30918 をクローズしました。#33443 (OnePiece)。
  • サポートを受ける際に使用する診断データ収集ツール。#33175Alexander Burmak)。
  • Zoo/Keeper によるクラスタの自動検出。これにより、すべてのサーバーの設定を変更することなく、クラスタにレプリカを追加できます。 #31442 (vdimir)。
  • ClickHouse から Apache Hive にアクセスするための Hive テーブルエンジンを実装しました。これにより、次が実装されます: #29245#31104 (taiyang-li)。
  • 集計関数 cramersVcramersVBiasCorrectedtheilsUcontingency を追加しました。これらの関数は、カテゴリカル値同士の依存関係(連関の尺度)を計算します。すべての関数は、実装にクロス集計(値のペアに対するヒストグラム)を用いています。任意の離散値(必ずしも数値である必要はありません)に対する相関係数のようなものと考えることができます。 #33366alexey-milovidov)。初期実装は Vanyok-All-is-OKantikvist によるものです。
  • テーブル関数 hdfsCluster を追加しました。これにより、指定したクラスタ内の複数ノードから、s3Cluster と同様に HDFS 上のファイルを並列に処理できるようになりました。 #32400 (Zhichang Yu).
  • AWS S3 をバックエンドとするディスクの場合と同様の方法で、Azure Blob Storage をバックエンドとするディスクのサポートを追加しました。 #31505 (Jakub Kuklis)。
  • CREATE VIEWCOMMENT を使用可能にしました(すべての VIEW 種別が対象)。 #31062 (Vasily Nemkov).
  • 設定が変更された際に、リッスンポートおよびプロトコルを動的に再初期化するようにしました。 #30549 (Kevin Michel).
  • leftrightleftUTF8rightUTF8 関数を追加しました。負のオフセット(文字列末尾からのオフセット)を指定した場合の substringUTF8 関数の実装上のエラーを修正しました。#33407 (alexey-milovidov).
  • H3 座標系用に新しい関数 h3HexAreaKm2h3CellAreaM2h3CellAreaRads2 を追加。 #33479 (Bharat Nallan).
  • MONTHNAME 関数を追加。#33436usurai)。
  • 関数 arrayLast を追加し、#33390 をクローズしました。 #33415 では関数 arrayLastIndex を追加しました。 #33465Maksim Kita)。
  • 関数 decodeURLFormComponentdecodeURLComponent とはやや異なる形で追加しました。 #10298 をクローズしました。 #33451SuperDJY)。
  • プレーンなメトリクスとタグ付きメトリクスで GraphiteMergeTree のロールアップルールを分割できるようにしました(オプションの rule_type フィールド)。 #33494 (Michail Safronov).

パフォーマンスの改善

  • すべての下位テーブルが PREWHERE をサポートしている Merge エンジンのテーブルに対して、条件を PREWHERE(設定 optimize_move_to_prewhere)に移動できるようになりました。 #33300 (Anton Popov).
  • URL ストレージにおける glob パターンの処理をより効率的にしました。これにより、リトライ付きで数百万件の URL を並列に容易にクエリできるようになりました。 #32866 をクローズ。 #32907 (Kseniia Sumarokova).
  • パーサにおける指数関数的バックトラッキングを回避しました。これにより #20158 がクローズされます。 #33481 (alexey-milovidov).
  • untuple 関数の乱用により、クエリ解析の計算量が指数関数的に増大する問題がありました(fuzzer により発見)。これにより #33297 がクローズされます。 #33445 (alexey-milovidov).
  • 文字列属性を持つディクショナリに対して、割り当てられるメモリ量を削減しました。 #33466 (Maksim Kita).
  • reinterpret 関数のパフォーマンスをわずかに改善しました。 #32587 (alexey-milovidov).
  • 影響は小さい変更です。極めてまれなケースとして、いくつかのデータパーツがマージされた後に、すべてのレプリカでそのデータパーツが失われた場合、後続のクエリでパーティションプルーニング中にスキップされるパーティション数が少なくなる可能性があります。実質的な影響はほとんどありません。 #32220 (Azat Khuzhin).
  • サイズ計算ロジックを最適化することで、clickhouse-keeper の書き込みパフォーマンスを改善しました。 #32366 (zhanglistar).
  • 単一パーツの projection のマテリアライズを最適化しました。これにより #31669 がクローズされます。 #31885 (Amos Bird).
  • system テーブルのクエリパフォーマンスを改善しました。 #33312 (OnePiece).
  • ボリューム間で移動可能な MergeTree パーツの選択を最適化しました。 #33225 (OnePiece).
  • 連番キーに対する sparse_hashed dict のパフォーマンスを修正しました(誤ったハッシュ関数の使用)。 #32536 (Azat Khuzhin).

実験的機能

  • 分散クエリにおいて sample key を使用しない場合でも、シャード内の複数レプリカからの並列読み取りが可能になりました。この機能を有効化するには、allow_experimental_parallel_reading_from_replicas = 1 を設定し、max_parallel_replicas を任意の値に設定します。これにより #26748 がクローズされました。#29279Nikita Mikhaylov)。
  • 疎シリアライゼーションを実装しました。これにより、多数のデフォルト値(ゼロ)を含むカラムに対してディスク使用量を削減し、一部のクエリのパフォーマンスを向上できます。ratio_for_sparse_serialization を設定することで有効化できます。カラムについて、デフォルト値の数と全値の数の比率がこのしきい値を上回る場合、そのカラムには疎シリアライゼーションが動的に選択されます。シリアライゼーション方式(デフォルトまたは疎)はパーツ内の各カラムごとに固定されますが、パーツ間で異なる場合があります。#22535Anton Popov)。
  • MaterializedMySQL テーブルスキーマをカスタマイズするための "TABLE OVERRIDE" 機能を追加しました。#32325Stig Bakken)。
  • EXPLAIN TABLE OVERRIDE クエリを追加しました。#32836Stig Bakken)。
  • MaterializedPostgreSQL に対して TABLE OVERRIDE 句をサポートしました。RFC: #31480#32749Kseniia Sumarokova)。
  • 共有データに対するゼロコピーマークの ZooKeeper パスを変更しました。「ゼロコピーレプリケーション」は本番非対応の機能(開発初期段階)であり、そもそも使用すべきではありません。ただし、もし既に使用している場合は、この変更があることを念頭に置いてください。#32061ianton-ru)。
  • WINDOW VIEW の watch クエリに対して EVENTS 句をサポートしました。#32607vxider)。
  • clickhouse-keeper における、明示的なダイジェストハッシュを用いた ACL を修正しました。これにより ZooKeeper と挙動が一致し、生成されたダイジェストが常に受け入れられるようになりました。#33249小路)。#33246
  • パーツのデタッチ時に予期せずプロジェクションが削除される問題を修正しました。#32067Amos Bird)。

改善点

  • 1970-01-01 00:00:00 より前の時刻を生成する日時変換関数は、オーバーフローするのではなく、0 に飽和するようになりました。#29953Amos Bird)。また、日付切り捨て関数の結果が Unix エポック以前になる場合にインデックス解析で発生していたバグも修正されています。
  • クライアントでリソース使用状況(CPU の合計使用量、RAM の合計使用量、ホストごとの最大 RAM 使用量)を常に表示するようにしました。 #33271 (alexey-milovidov).
  • Bool 型のシリアライズおよびデシリアライズを改善し、値の範囲チェックを追加。 #32984 (Kruglov Pavel).
  • SET クエリまたは HTTP リクエスト内のクエリパラメータを使用して無効な設定が指定された場合、エラーメッセージには、その無効な設定文字列と類似した候補(存在する場合)が含まれます。 #32946 (Antonio Andelic).
  • clickhouse-client および clickhouse-local の設定名を誤って入力した場合にヒントを表示するようにしました。これにより #32237 がクローズされました。#32841凌涛)。
  • マテリアライズドビューで仮想カラムを使用できるようにしました。 #11210 をクローズ。 #33482 (OnePiece).
  • 必要に応じて、clickhouse-keeper で IPv6 を無効化できる設定を追加しました。これにより #33381 がクローズされました。#33450Wu Xueyang)。
  • 現在の Git リビジョンに関する情報を system.build_options に追加。#33431taiyang-li)。
  • clickhouse-local--max_memory_usage_in_client オプションでメモリを追跡するようにしました。#33341 (Azat Khuzhin).
  • 関数 intervalLengthSum で負の区間も扱えるようにしました。それらの長さも合計に含まれます。これにより #33323 が解決されました。 #33335alexey-milovidov)。
  • LineAsString は出力フォーマットとして使用できるようになりました。これにより #30919 が解決されました。#33331Sergei Trifonov)。
  • クラスター構成で <secure>1</secure> の代替として <secure/> をサポート。 #33270 をクローズ。 #33330 (SuperDJY)。
  • Ctrl+C を 2 回押すと、実行中のクエリの完了を待たずに clickhouse-benchmark が即座に終了します。これにより#32586 が解決されました。#33303 (alexey-milovidov)。
  • parseDateTimeBestEffort 関数でミリ秒精度の Unix タイムスタンプをサポートしました。 #33276 (Ben).
  • Arrow / Parquet / ORC 形式の外部テーブルからデータを読み込んでいる間でもクエリをキャンセルできるようにしました。大きなファイルかつ設定 input_format_allow_seeks が false の場合に、キャンセルできない問題がありました。 #29678 をクローズします。 #33238 (Kseniia Sumarokova)。
  • テーブルエンジンが SETTINGS 句をサポートしている場合、設定をキーと値のペア形式またはコンフィグ経由で渡せるようにします。MySQL にこのサポートを追加しました。 #33231 (Kseniia Sumarokova).
  • 必要に応じて Nullable なプライマリキーの使用を正しく禁止するようにしました。これは #32780 に対応するものです。#33218Amos Bird)。
  • まだ何も取得されていない場合に備えて、PostgreSQL 接続にリトライ処理を追加。#33199 をクローズ。#33209Kseniia Sumarokova)。
  • 外部ディクショナリ用の設定キーを検証するようにしました。 #33095#33130 (Kseniia Sumarokova)。
  • clickhouse-local 内でプロファイル情報を送信するようにしました。#33093 をクローズしました。#33097 (Kseniia Sumarokova)。
  • 短絡評価: 関数 throwIf をサポート。 #32969 をクローズ。 #32973Maksim Kita)。
  • (これは非公式ビルドでのみ発生します)。圧縮された Decimal、String、FixedString、Array カラムへのデータ挿入時に発生していたセグメンテーションフォルトを修正しました。これにより #32939 が解決されます。#32940N. Kolotov)。
  • サブクエリを SQL のユーザー定義関数として指定できるようにしました。例: CREATE FUNCTION test AS () -> (SELECT 1)#30755 をクローズしました。 #32758Maksim Kita)。
  • gRPC の圧縮サポートを改善しました #28671#32747 (Vitaly Baranov)。
  • WAL が無効な場合、サーバーのシャットダウン時またはテーブルのデタッチ時に、すべてのインメモリデータパーツをフラッシュするようにしました。 #32742 (nauta)。
  • MySQL の接続タイムアウトを制御できるようにしました(以前は辞書ソースに対してのみサポートされていました)。#16669 を解決しています。従来はデフォルトの connect_timeout の値がかなり小さく設定されていましたが、現在は設定可能になりました。#32734 (Kseniia Sumarokova)。
  • ストレージ MongoDB 向けに authSource オプションのサポートを追加。#32594 をクローズ。#32702Kseniia Sumarokova)。
  • genarateRandom テーブル関数で Date32 型をサポートしました。 #32643 (nauta).
  • クエリ種別ごとに同時実行クエリ数を制御するための設定 max_concurrent_select_queries および max_concurrent_insert_queries を追加。#3575 をクローズ。#32609SuperDJY)。
  • Protobuf 形式でデータを読み込む際に、ネストされた構造で列が欠損している場合の扱いを改善しました。https://github.com/ClickHouse/ClickHouse/pull/31988 のフォローアップです。#32531Vitaly Baranov)。
  • MongoDB エンジンで空のクレデンシャルを許可しました。#26267 をクローズ。#32460Kseniia Sumarokova)。
  • 例外を引き起こす可能性のあるウィンドウ関数に対する一部の最適化を無効化しました。 #31535 をクローズしました。 #31620 をクローズしました。 #32453Kseniia Sumarokova)。
  • MongoDB 5.0 への接続をサポートしました。#31483#32416 をクローズしました(Kseniia Sumarokova)。
  • Decimal 型と Float 型の比較を可能にします。#22626 をクローズ。 #31966 (flynn)。
  • StorageExecutableStorageExecutablePoolExecutableDictionaryExecutablePoolDictionaryExecutableUserDefinedFunctions 向けに command_read_timeoutcommand_write_timeout 設定を追加しました。command_read_timeout 設定は、コマンドの stdout からデータを読み取る際のタイムアウトをミリ秒単位で制御します。command_write_timeout 設定は、コマンドの stdin へデータを書き込む際のタイムアウトをミリ秒単位で制御します。ExecutableUserDefinedFunctionExecutableDictionaryStorageExecutable 向けに command_termination_timeout 設定を追加しました。ExecutableUserDefinedFunction 向けに execute_direct 設定を追加し、デフォルト値は true です。ExecutableDictionaryExecutablePoolDictionary 向けに execute_direct 設定を追加し、デフォルト値は false です。#30957Maksim Kita)。
  • ビットマップ集約関数は、範囲外の引数に対してラップアラウンドせず、正しい結果を返すようになりました。 #33127 (DR).
  • FROM INFILE ステートメントを含む誤ったクエリの解析を修正。#33521Kruglov Pavel)。
  • パスにグロブが含まれる場合は S3 への書き込みを許可しないようにしました。 #33142 (Kruglov Pavel).
  • バッチモードで単一クエリを実行する際、clickhouse-client--echo オプションが使用されていませんでした。 #32843 (N. Kolotov).
  • clickhouse-local で --database オプションを使用できるようにしました。#32797Kseniia Sumarokova)。
  • SQL の通常関数 file にあった驚くほどひどいコードを修正しました。これによりシンボリックリンクもサポートされるようになりました。#32640alexey-milovidov)。
  • パーツ移動後に system.parts 内のデータパーツの modification_time を更新するように修正 #32964#32965save-my-heart)。
  • 潜在的な問題ではあるが悪用は不可能: 配列のリサイズ時に整数オーバーフローが発生する可能性があります。 #33024 (varadarajkumar).

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

  • ClickHouse の AArch64 (ARM) 版向けにパッケージ、機能テスト、および Docker ビルドを追加。#32911Mikhail f. Shiryaev)。#32415
  • ClickHouse を musl-libc でビルドできるよう準備。デフォルトでは有効になっていない。#33134alexey-milovidov)。
  • FreeBSD 上でインストールスクリプトが動作するように修正。この変更により #33384 がクローズされる。#33418alexey-milovidov)。
  • GitHub Actions のワークフロー向けに actionlint を追加し、act --list でワークフローファイルを検証して、ワークフロー構文の正当性を確認できるようにした。#33612Mikhail f. Shiryaev)。
  • Nullable な primary key 機能向けのテストを追加。さまざまな型や MergeTree の種類に対するテストに加え、ランダム生成データを用いたテストを追加。#33228Amos Bird)。
  • 不安定なテスト(flaky tests)を Web ブラウザで可視化するためのシンプルなツールを追加。#33185alexey-milovidov)。
  • 共有ビルド向けに hermetic build を有効化。主に開発者向け。#32968Amos Bird)。
  • libc++ および libc++abi を最新バージョンに更新。#32484Raúl Marín)。
  • 外部 .NET クライアント(ClickHouse.Client)用の統合テストを追加。#23230Oleg V. Kozlyuk)。
  • git 情報を clickhouse バイナリファイルに埋め込むようにした。これにより、clickhouse バイナリファイルからソースコードのリビジョンを容易に取得できる。#33124taiyang-li)。
  • ConfigProcessor から不要なコードを削除。Yandex 固有のコードはもはや使用されていない。このコードには軽微な欠陥が 1 つ含まれていた。この欠陥は #33032Mallik Hassan により報告されており、この変更により #33032 がクローズされる。#33026alexey-milovidov)。

バグ修正(公式の stable または prestable リリースにおけるユーザーに見える誤動作)

  • フォーマットのパース処理に関する複数の修正を行いました。これは、clickhouse-server が攻撃者による書き込みアクセスに対して開かれている場合に関連します。Native フォーマット向けに特別に細工された入力データによって、未初期化メモリの読み取りやクラッシュが発生する可能性があります。これは、clickhouse-server が攻撃者による書き込みアクセスに対して開かれている場合に関連します。 #33050 (Heena Bansal)。Apache Avro バイナリフォーマットにおける Apache Avro Union 型のインデックス範囲外アクセスの問題を修正しました。 #33022 (Harry Lee)。Native フォーマットで LowCardinality データをデシリアライズする際に発生する、LowCardinality データにおけるヌルポインタ参照を修正しました。 #33021 (Harry Lee)。
  • ClickHouse Keeper ハンドラは、応答を送信した際に操作を正しく削除するようになりました。 #32988 (JackyWoo).
  • クォータ計算のオフバイワン誤りの可能性: クォータの上限には達していなかったにもかかわらず、上限超過と判定されていた。この修正により #31174 が解決される。#31656sunny)。
  • String 型から IPv4 型または IPv6 型への CAST 処理と、その逆方向の CAST 処理を修正しました。変換失敗時のエラーメッセージを修正しました。 #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
  • リモートサーバー上での実行中に発生する Unknown aggregate function nothing のような例外が発生する問題を修正しました。これにより #16689 が修正されました。 #26074 (hexiaoting).
  • 分散クエリにおいて、データベースを明示していない JOIN で誤ったデータベースが使用される問題を修正 (修正対象: #10471)。 #33611 (Azat Khuzhin)。
  • ファイルへの2回目の挿入後に発生する Apache Avro フォーマットにおけるセグメンテーションフォールトを修正。#33566 (Kruglov Pavel).
  • スキーマに Dictionary 型が含まれている場合に発生していた Apache Arrow フォーマットでのセグメンテーションフォールトを修正しました。#33507 がクローズされます。#33529Kruglov Pavel)。
  • クエリ外で指定された offset および limit の設定がビューに対して誤って適用される場合があります。#33289 #33518hexiaoting)をクローズ。
  • デフォルトのネストされた LowCardinality 列を持つテーブルへの挿入時に発生する可能性のある例外 Block structure mismatch を修正。#33028 を解決。#33504Nikolai Kochetov)。
  • DDL を使用して作成された場合の range_hashed の range min および range max 属性に対して使用される辞書の式を修正。#30809 をクローズ。#33478Maksim Kita)。
  • 並行して DROP が実行されているマテリアライズドビューへの INSERT で起こり得る use-after-free を修正しました(Azat Khuzhin)。
  • EOF を越えて読み込まないようにする(Linux カーネルのバグに対するワークアラウンド)。このバグはカーネル 3.14〜5.9 で再現可能であり、発生には index_granularity_bytes=0(つまり adaptive index granularity を無効にする設定)が必要です。#33372Azat Khuzhin)。
  • SYSTEM SUSPEND および SYSTEM ... THREAD FUZZER コマンドはアクセス制御の対象になっていませんでしたが、修正されました。著者: Kevin Michel。 #33333 (alexey-milovidov)。
  • 辞書の COMMENTsystem.tablessystem.dictionaries に表示されない問題を修正しました。Dictionary エンジンのコメントを変更できるようにしました。#33251 をクローズします。#33261Maksim Kita)。
  • 非同期INSERT(async_insert 設定を有効化したもの)をクエリログに記録するようにしました。以前はこの種のクエリはクエリログに記録されていませんでした。#33239 (Anton Popov)。
  • 外部データベースに対するクエリで WHERE 1 = 0 式が送信される問題を修正。#33152 をクローズ。#33214Kseniia Sumarokova)。
  • MaterializedPostgreSQL の DDL 検証を修正しました。materialized_postgresql_allow_automatic_update の設定を修正しました。#29535 をクローズしました。#33200Kseniia Sumarokova)。未使用のレプリケーションスロットが常に削除されるようにしました。#26952 で判明。#33187Kseniia Sumarokova)。デフォルト以外のスキーマを持つテーブルに対する MaterializedPostreSQL の detach/attach(レプリケーションからの削除 / 追加)処理を修正しました。#29535 で判明。#33179Kseniia Sumarokova)。DROP MaterializedPostgreSQL database の処理を修正しました。#33468Kseniia Sumarokova)。
  • メトリクス StorageBufferBytes が誤って算出される場合がありました。 #33159 (xuyatian)。
  • local_filesystem_read_prefetch または remote_filesystem_read_prefetch が有効な状態で LowCardinality カラムを読み取る場合に発生していた Invalid version for SerializationLowCardinality key column エラーを修正。 #33046 (Nikolai Kochetov).
  • 空のファイルを読み込む際の s3 テーブル関数の不具合を修正しました。#33008 をクローズ。#33037Kseniia 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 で導入されました。#32976Kruglov Pavel)。
  • 位置引数でない引数に対して positional argument out of bounds のような例外がスローされる問題を修正。#31173#event-5789668239 をクローズ。#32961Kseniia Sumarokova)。
  • HTTP クエリから set を構築している最中に予期しない EOF が発生した場合の未定義動作 (UB) を修正(つまり、クライアントが途中で接続を中断した場合。例: timeout 0.15s curl -Ss -F '[email protected];' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s' かつ t.csv が十分大きい場合)。#32955Azat Khuzhin)。
  • replaceRegexpAll 関数のリグレッションを修正しました。一致した部分文字列が空文字列の場合に、この関数が正しく動作しない問題がありました。これにより #32777 が解決されます。また、#30245 も解決されます。#32945alexey-milovidov)。
  • ORC フォーマットのストライプ読み取りを修正。 #32929 (kreuzerkrieg)。
  • topKWeightedState が一部の入力型でエラーになる問題がありました。#32487#32914vdimir)。
  • マテリアライズドビューで発生する例外 Single chunk is expected from view inner query (LOGICAL_ERROR) を修正。#31419 を解決。#32862Nikolai Kochetov)。
  • リモートファイルシステムからの非同期読み取りに対する lazy seek を使用した最適化を修正。 #32803 をクローズ。 #32835Kseniia Sumarokova)。
  • MergeTree テーブルエンジンは、実行中の mutation が多すぎる場合やメモリ消費が高い場合に、一部の mutation をサイレントにスキップしてしまう可能性がありましたが、これを修正しました。 #17882 を修正しました。 #32814 (tavplubix)。
  • MV ブロックを処理する際にスカラーサブクエリキャッシュを再利用しないようにしました。これにより、スラカーサブクエリがソーステーブルを参照している場合のバグは修正されますが、その代わりに MV 定義内のすべてのスカラーサブクエリが各ブロックごとに計算されることになります。 #32811 (Raúl Marín).
  • MySQL エンジンを使用するデータベースが MySQL サーバーに接続できない場合に、サーバーが起動に失敗することがある問題を修正しました。Fixes #14441. #32802 (tavplubix).
  • fuzzBits 関数の使用時に発生していたクラッシュを修正し、#32737 をクローズ。#32755SuperDJY)。
  • Kafka / RabbitMQ 上での、GROUP BY (列のリスト)GROUP BY tuple(...) としてパースされる)を使用したマテリアライズドビューにおける Column is not under aggregate function エラーを修正しました。これにより、#32668 および #32744 が修正されました。 #32751Nikolai Kochetov)。
  • TTL ... DELETE WHERE ... および TTL ... GROUP BY ... モードを使用する ALTER TABLE ... MATERIALIZE TTL クエリを修正。#32695 (Anton Popov)。
  • テーブルエンジンが Distributed または Merge であり、その基盤となる MergeTree テーブルのソートキーの先頭部分に単調関数を含む場合の optimize_read_in_order 最適化を修正しました。 #32670 (Anton Popov).
  • マテリアライズドビューの出力先が JOIN テーブルまたは SET テーブルである場合に発生していた LOGICAL_ERROR 例外を修正しました。 #32669 (Raúl Marín).
  • Google Cloud Storage への multipart アップロードを利用した S3 への挿入で、アップロードがアボートされる場合があります。 #32504. #32649 (vdimir).
  • チャネル作成を遅延させることで、RabbitMQ ストレージの起動時に発生する可能性のあった例外を修正しました。 #32584 (Kseniia Sumarokova).
  • DROP TABLEINSERT が並列に実行される場合のテーブルのライフタイム管理を修正し、use-after-free が発生する可能性のある問題を防止しました。 #32572 (Azat Khuzhin).
  • CustomSeparatedTemplateRegexpMsgPack および JSONAsString フォーマットを使用した非同期インサートの問題を修正しました。これらのフォーマットを使用した非同期インサートは、以前はデータを一切読み込めていませんでした。 #32530 (Kruglov Pavel)。
  • 分散テーブル上の groupBitmapAnd 関数を修正。#32529minhthucdao)。
  • fuzzer により検出された JOIN のクラッシュを修正し、#32458 をクローズ。#32508vdimir)。
  • Apache Arrow でカラムが重複する場合の適切な処理。 #32507 (Dmitriy Mokhnatkin).
  • 分散クエリにおいて、一部のテーブル列名が ALL または DISTINCT の場合にエラーを引き起こしていた、曖昧なクエリのフォーマットに関する問題を修正しました。これにより #32391 がクローズされます。#32490alexey-milovidov)。
  • まだマテリアライズされていない skipping index を使用しようとするクエリで発生する失敗を修正しました。 #32292 および #30343 を解決します。 #32359Anton Popov)。
  • 同一カラムに 2 つ以上の行ポリシーが存在する場合、同一セッション内の 2 つ目以降のクエリで SELECT クエリが正しく動作しなくなる問題を修正。 #31606#32291 (SuperDJY)。
  • 負の unix タイムスタンプ(1970-01-01 より前)に対して小数部が反転してしまっていた、DateTime64 への小数精度付き unix タイムスタンプ変換を修正しました。 #32240 (Ben).
  • レプリケーションキューの一部のエントリが、Directory tmp_merge_<part_name>Part ... (state Deleting) already exists, but it will be deleted soon などのエラーとともに、temporary_directories_lifetime(デフォルトでは 1 日)にわたってハングすることがありました。この問題は修正されました。#29616 を修正します。 #32201tavplubix)。
  • クライアント/サーバーのクラッシュを引き起こす可能性があった APPLY lambda カラムトランスフォーマのパース処理を修正しました。 #32138 (Kruglov Pavel).
  • 短い文字列に対して末尾に余分なバイトを追加してしまっていた base64Encode を修正。 #31797 (Kevin Michel).
  • ウィンドウ関数に LowCardinality 引数が指定された場合にクラッシュ(または誤った結果)が発生する可能性がある不具合を修正しました。#31114 を修正。#31888Nikolai Kochetov)。
  • DROP TABLE system.query_log sync コマンドがハングアップする問題を修正。 #33293 (zhanghuajie)。

2021年の変更履歴

  • ClickHouse リリース 22.12, 2022-12-15
  • ClickHouse リリース 22.11, 2022-11-17
  • ClickHouse リリース 22.10, 2022-10-25
  • ClickHouse リリース 22.9, 2022-09-22
  • ClickHouse リリース 22.8, 2022-08-18
  • ClickHouse リリース 22.7, 2022-07-21
  • ClickHouse リリース 22.6, 2022-06-16
  • ClickHouse リリース 22.5, 2022-05-19
  • ClickHouse リリース 22.4, 2022-04-19
  • ClickHouse リリース v22.3-lts, 2022-03-17
  • ClickHouse リリース v22.2, 2022-02-17
  • ClickHouse リリース v22.1, 2022-01-18
  • 2021年の変更履歴