2020年変更履歴
ClickHouseリリース 20.12
ClickHouseリリース v20.12.5.14-stable, 2020-12-28
バグ修正
- マージ時の AIO を使用した書き込みを無効化しました。これは、マージ中に主キー列のデータが極めてまれに破損する可能性があるためです。#18481 (alesapin)。
Nullable(String)型の引数でtoType(...)関数(toDate、toUInt32など)を実行した際に発生するvalue is too shortエラーを修正しました。これらの関数は、例外をスローする代わりに、パースエラー時にはNULLを返すようになりました。#7673 を修正しました。#18445 (tavplubix)。- ワイドパーツからコンパクトパーツへのマージを制限しました。縦方向マージの場合、結果パーツが壊れる原因となっていました。#18381 (Anton Popov)。
- テーブル
system.settings_profile_elementsへのデータの投入処理を修正しました。この PR により #18231 が修正されました。#18379 (Vitaly Baranov)。 - 2 レベル集計を使用している際に、
Distinctコンビネータ付きの集約関数で発生する可能性があったクラッシュを修正しました。#17682 を修正しました。#18365 (Anton Popov)。 - クエリ
MODIFY COLUMN ... REMOVE TTLが実際には列の TTL を削除しない不具合を修正しました。#18130 (alesapin)。
ビルド/テスト/パッケージングの改善
ClickHouseリリース v20.12.4.5-stable, 2020-12-24
バグ修正
- デュアル IPv4/IPv6 スタック構成のマシンにおいて、サーバーから
clickhouse-odbc-bridgeプロセスに到達できない問題を修正しました。また、ODBC 辞書の更新が不正なクエリで実行される、もしくはクラッシュを引き起こす問題を修正しました。おそらく #14489 がクローズされます。 #18278 (Denis Glazachev). - Enum 型と Int 型間のキー比較の問題を修正しました。これにより #17989 が解決されます。 #18214 (Amos Bird).
MaterializeMySQLデータベースエンジンで一意キー変換時にクラッシュする問題を修正しました。これにより #18186 および #16372 が解決されます。 #18211 (Winter Zhang).- S3 URL の解析処理で発生していた
std::out_of_range: basic_stringを修正しました。 #18059 (Vladimir Chebotarev). - 一部のテーブルが MySQL から ClickHouse に同期されない問題を修正しました。この問題は、
MaterializeMySQLが MySQL のプレフィックスインデックスの変換をサポートしていなかったことが原因でした。これにより #15187 および #17912 が解決されます。 #17944 (Winter Zhang). - クエリに
ARRAY JOINが含まれている場合に、クエリ最適化によって誤った結果が生成される問題を修正しました。 #17887 (sundyli). topK集約関数で発生し得るセグメンテーションフォルトを修正しました。これにより #17404 がクローズされます。 #17845 (Maksim Kita).- サーバーがデーモンモードで動作している場合に
system.stack_traceテーブルが空になる問題を修正しました。 #17630 (Amos Bird).
ClickHouse リリース v20.12.3.3-stable, 2020-12-13
後方互換性のない変更
- デフォルトで
use_compact_format_in_distributed_parts_namesを有効化しました(詳細はドキュメントを参照してください)。 #16728 (Azat Khuzhin). Fileエンジンを使用するテーブルを作成する際に、ファイルフォーマットに関連するユーザー設定(例:format_csv_delimiter)をSETTINGS句で指定できるようにし、すべてのINSERTとSELECTでこれらの設定が使用されるようにしました。現在のユーザーセッションで変更されたファイルフォーマット設定、または DML クエリ自身のSETTINGS句で指定された設定は、もはやそのクエリには影響しません。 #16591 (Alexander Kuzmenkov).
新機能
*.xz圧縮/解凍のサポートを追加しました。これにより、file()関数で*.xzを使用できるようになります。これにより #8828 がクローズされました。#16578(Abi Palagashvili)。- クエリ
ALTER TABLE ... DROP|DETACH PART 'part_name'を導入しました。#15511(nvartolomei)。 - 新しい ALTER UPDATE/DELETE IN PARTITION 構文を追加しました。#13403(Vladimir Chebotarev)。
- JSON 入出力フォーマットを使用する際に、名前付きタプルを JSON オブジェクトとしてフォーマットできるようにしました。
output_format_json_named_tuples_as_objects設定で制御され、デフォルトでは無効です。#17175(Alexander Kuzmenkov)。 - TSV および CSV フォーマットで、デフォルトで enum 値をその ID として入力できるようにしました。#16834(Kruglov Pavel)。
- Nullable、LowCardinality、Array、Tuple について、ネストした型が String の場合に COLLATE をサポートしました。また、ColumnString.cpp 内の照合に関連するコードをリファクタリングしました。#16273(Kruglov Pavel)。
- 新しい
tcpPort関数は、このサーバーが待ち受けている TCP ポートを返します。#17134(Ivan)。 - 新しい数学関数を追加しました:
acosh,asinh,atan2,atanh,cosh,hypot,log1p,sinh。#16636(Konstantin Malanchev)。 - 異なるレプリカ間でマージを分散できるようにしました。
execute_merges_on_single_replica_time_thresholdMergeTree 設定を導入しました。#16424(filimonov)。 - SQL 標準との互換性のために
aggregate_functions_null_for_empty設定を追加しました。このオプションはクエリ内のすべての集約関数を書き換え、末尾に-OrNullサフィックスを追加します。10273 を実装しています。#16123(flynn)。 - DateTime、DateTime64 のパース処理を更新し、文字列の Date リテラル形式を受け付けるようにしました。#16040(Maksim Kita)。
clickhouse-clientで--history_fileパラメータを使用して、履歴ファイルへのパスを変更できるようにしました。#15960(Maksim Kita)。
バグ修正
- ごくまれなケースでサーバーが接続を受け付けなくなる問題を修正しました。 #17542 (Amos Bird).
- Windows Subsystem for Linux 上で動作する ClickHouse の
AtomicデータベースでRENAMEクエリを実行した際に発生していたFunction not implementedエラーを修正しました。#17661 を解決。#17664(tavplubix)。 in_memory_parts_enable_walが無効になっている場合は、WAL からパーツを復元しないように変更しました。 #17802 (detailyang)。- MergeTreeWriterSettings の
max_compress_block_sizeがmin_compress_block_sizeで初期化されていたという誤りを修正。 #17833 (flynn)。 - 削除対象テーブルの最大サイズに関する例外メッセージが誤って表示されていました。 #17764 (alexey-milovidov).
Distributedテーブルへの挿入時に空き領域が不足している場合に発生する可能性があったセグメンテーションフォルトを修正しました。 #17737 (tavplubix).- ClickHouse が MySQL サーバーへの接続を再開できない問題を修正しました。 #17681 (Alexander Kazakov).
pool_sizeが 1 より大きい場合のレースコンディションが原因で、ON CLUSTERクエリの実行時にクラスタが circular(cross)replicated かどうかが誤って判定されてしまう可能性がありました。これは修正されています。 #17640 (tavplubix).- MergeTree テーブルで発生した例外
fmt::v7::format_errorをバックグラウンドでログ出力できるようになりました。これにより #17613 が修正されました。#17615(alexey-milovidov)。 - マルチラインクエリで対話モードの clickhouse-client を使用した場合、シングルラインコメントが誤ってクエリ全体の末尾まで適用されていました。この変更により #13654 が修正されました。 #17565(alexey-milovidov)。
- 対応するミューテーションが別のレプリカ上で kill されていた場合に
ALTERクエリがハングする問題を修正。 #16953 を修正。 #17499(alesapin)。 - ClickHouse によって mark キャッシュサイズが小さく見積もられてしまう問題を修正しました。これは、多数の小さいファイルに marks が含まれている場合に発生することがあります。 #17496 (alesapin)。
- 設定
optimize_redundant_functions_in_order_by有効時のORDER BYの動作を修正。 #17471 (Anton Popov). - 誤った最適化が原因で
DISTINCTの後に発生する可能性があった重複を修正。 #17294 を修正。 #17296(li chengxiang)。 #17439(Nikolai Kochetov)。 LowCardinality型を含むJOINテーブルからの読み取り時に発生するクラッシュを修正しました。#17228 を解決。#17397(Nikolai Kochetov)。toInt256(inf)のスタックオーバーフローを修正。Int256 は実験的な機能です。#17235 をクローズ。#17257(flynn)。LIMITを含む分散クエリで記録されることがあるUnexpected packet Data received from clientエラーを修正。 #17254 (Azat Khuzhin)。- サブクエリに
constカラムが含まれている場合に set インデックスが正しく無効化されない問題を修正しました。これにより #17246 を修正しました。#17249(Amos Bird)。 - インデックス比較に用いられる型が異なる場合に誤ったインデックス解析が行われる可能性があった問題を修正しました。これにより #17122 が修正されます。#17145(Amos Bird)。
- クラッシュを引き起こしていた ColumnConst の比較処理を修正しました。これにより、#17088 の問題が解決しました。#17135(Amos Bird)。
- MaterializeMySQL(実験的機能)に対して複数の修正を行いました。 #16923 を修正しました。 #15883 を修正しました。 MySQL の
binlog_checksumを変更した場合に発生する MaterializeMySQL の SYNC 失敗の問題を修正しました。 #17091(Winter Zhang)。 - 非リーダーの ReplicatedMergeTree テーブルに対する
ON CLUSTERクエリが無期限にハングする可能性のあるバグを修正。 #17089 (alesapin). some_tableがAS table_function()として作成されている場合に、CREATE TABLE ... AS some_tableクエリでクラッシュが発生する問題を修正しました。 #16944 を解決。 #17072 (tavplubix).- 関数
fuzzBitsの未完成な実装によるバグ。関連 issue: #16980。#17051(hexiaoting)。 - CFA レジスタが RAX の場合に LLVM の libunwind が誤動作する問題を修正しました。これは LLVM の libunwind におけるバグです。このバグに対するワークアラウンドは既に実装済みです。#17046(alexey-milovidov)。
LIMITを含むクエリなど、実行中にキャンセルされる可能性があるリモートクエリで、不要なネットワークエラーが発生しないようにしました。 #17006 (Azat Khuzhin).- OFFSET 句のみを含むクエリに対して、デフォルトでは無効になっている
optimize_distributed_group_by_sharding_key設定を修正しました。 #16996 (Azat Khuzhin)。 - JOIN を伴う Distributed テーブル上の Merge テーブルの不具合を修正。 #16993 (Azat Khuzhin).
- double から大きな整数型(128、256 ビット)へキャストする際に誤った結果が返される問題を修正しました。大きな整数型のサポートは実験的機能です。 #16986 (Mike).
ALTER TABLE ... MODIFY COLUMN ... NewTypeの実行後、ALTERがまだ完了していない状態で、変更中のカラムに対してWHERE句を含むSELECTが実行されるとサーバーがクラッシュする可能性があった問題を修正。 #16968 (Amos Bird).clickhouse-git-importで blame 情報が正しく計算されていませんでした。#16959(alexey-milovidov)。- 単調関数を用いた ORDER BY の最適化を修正しました。Issue #16107 を修正。#16956(Anton Popov)。
optimize_aggregators_of_group_by_keys設定が有効な場合における GROUP BY と JOIN の最適化を修正。 #12604 を修正。 #16951 (Anton Popov)。ORDER BYを含むクエリで発生しうるIllegal type of argumentエラーを修正しました。#16580 を解決。#16928(Nikolai Kochetov)。- InterpreterShowAccessQuery 内の不自然なコードを修正。#16866 (tavplubix)
- 関数
timeSeriesGroupSum使用時に ClickHouse サーバーがクラッシュするのを防止します。この関数は新しい ClickHouse のリリース以降では削除されています。 #16865 (filimonov)。 - クエリプロファイラがオンで、いくつかの関数に対して非同期アンワインドテーブルが(おそらく)壊れている glibc バージョンを使用する OS 上に ClickHouse がインストールされている場合に発生する、まれなサイレントクラッシュを修正しました。これにより #15301 および #13098 が修正されます。#16846(alexey-milovidov)。
- 引数なしで
anyを使用したときにクラッシュする問題を修正しました。#16803 対応。cc @azat。#16826(Amos Bird)。 - ディスクにテーブルメタデータを書き込む際にメモリを確保できない場合、破損したメタデータファイルが書き込まれてしまうことがあります。 #16772 (alexey-milovidov)。
- パーティション述語を伴う単純なクエリ最適化を修正。 #16767 (Azat Khuzhin).
transform_null_in設定が有効な場合に、複数列やタプルに対するIN演算子の動作を修正。 #15310 を修正。 #16722(Anton Popov)。- MySQL プロトコル経由の INSERT クエリに対して、影響を受けた行数を返すようにしました。以前の ClickHouse では常に 0 が返されていましたが、これを修正しました(#16605)。#16715(Winter Zhang)。
- 'if' サフィックス付きの集約関数を使用している場合に発生するリモートクエリの失敗を修正。Fixes #16574 Fixes #16231 #16610 (Winter Zhang).
- 最適化された trivial count クエリおよび system.tables における
select_sequential_consistencyに起因する一貫しない動作を修正。 #16309 (Hao Chen)。
改善
- TTL、mutation、または collapsing merge アルゴリズムにより間引かれた結果、空になったパーツを削除します。 #16895 (Anton Popov).
- Distributed テーブルにおける非同期送信時のディレクトリ名のコンパクト形式を有効化:
use_compact_format_in_distributed_parts_namesはデフォルトで 1 に設定されています。 #16788 (Azat Khuzhin). - S3 にデータが書き込まれていない場合はマルチパートアップロードを中止する。#16840 (Pavel Kovalenko)。
- エラー発生時に
format_avro_schema_registry_urlの IP アドレスを再解決するようにしました。 #16985 (filimonov). - system.distribution_queue 内の data_path に含まれるパスワードをマスクする。 #16727 (Azat Khuzhin).
- 存在しないカラムを column transformer で置き換えようとした場合にエラーをスローするようにしました。 #16183 (hexiaoting).
- すべてのスレッドが同時に動作するのに十分なメモリを確保できない場合は、並列パースをオフにします。また、誰かが非常に巨大な行(> min_chunk_bytes_for_parallel_parsing)を挿入しようとしたときに、「Memory limit exceeded」といった例外が発生する可能性があります。これは、パース対象の各チャンクが(1 行以上からなる)独立した文字列集合である必要があるためです。 #16721 (Nikita Mikhaylov).
- インストールスクリプトは、常に設定フォルダー内にサブディレクトリを作成するようにしました。これはカスタム設定を用いた Docker ビルドにのみ関係します。 #16936 (filimonov)。
- JSONEachRow、JSONCompactEachRow、および RegexpRow 入力フォーマットにおけるエラーメッセージの文法を修正。 #17205 (nico piderman).
SOURCE(CLICKHOUSE(...))のデフォルトのhostおよびportパラメータを現在のインスタンスにし、デフォルトのuserの値を'default'にしました。 #16997 (vdimir).ATTACH/DETACH TABLE <DICTIONARY>を実行した際に、よりわかりやすいエラーメッセージを出力するようにしました。この PR 以前は、detach table <dict>は動作するものの、メモリ上のメタデータが不正な形式になっていました。 #16885 (Amos Bird)。- cutToFirstSignificantSubdomainWithWWW() を追加しました。 #16845 (Azat Khuzhin).
- 誤った設定が指定された場合(
metric_log.collect_interval_millisecondsが欠落している)、サーバーが起動を拒否して例外メッセージを出力するようになりました。 #16815 (Ivan). - 分散 DDL の設定が存在しない場合に出力される例外メッセージを改善しました。これにより #5075 が修正されました。#16769(Nikita Mikhaylov)。
- ユーザビリティの向上:
CREATE TABLEクエリ内でCODEC式の位置が誤っている場合に表示される構文エラーメッセージで、より適切な提案が行われるようにしました。これにより #12493 が修正されました。 #16768(alexey-milovidov)。 - Distributed エンジンの起動時に、非同期 INSERT 用の空ディレクトリを削除するようにしました。 #16729 (Azat Khuzhin).
- nginx サーバーをプロキシとして介して S3 を利用するための回避策です。現在の Nginx は
http://domain.com?deleteのようなパスが空の URL を受け付けませんが、標準の aws-sdk-cpp はこの形式の URL を生成します。このコミットでは修正を加えた aws-sdk-cpp バージョンを使用し、このような場合にhttp://domain.com/?deleteのようにパスとして「/」を含む URL を生成するようにしています。 #16709 (ianton-ru)。 - 同じサイズの整数型および浮動小数点数型に対して
reinterpretAs*関数が動作するようにしました。 16640 を実装。 #16657(flynn)。 - これで、サーバーを再起動することなく、
config.xml内の<auxiliary_zookeepers>設定を変更して再読み込みできるようになりました。#16627 (Amos Bird)。 - リモートリソースへの HTTPS 接続で SNI をサポートしました。これにより、SNI を必須とする Cloudflare サーバーへの接続が可能になります。この変更によって #10055 が修正されました。#16252(alexey-milovidov)。
- SNI を必要とする
clickhouse-serverのセキュアなエンドポイントへの接続を可能にしました。これは、clickhouse-serverが TLS プロキシの背後でホストされている場合に利用できます。 #16938 (filimonov)。 - マテリアライズドビューのループが作成された場合に発生する可能性のあるスタックオーバーフローを修正しました。これにより #15732 がクローズされました。 #16048 (alexey-milovidov)。
- MergeTree テーブルエンジンファミリー向けのバックグラウンドタスク処理の実装を簡素化しました。ユーザーから見える変更はありません。 #15983 (alesapin).
- MaterializeMySQL(実験的機能)の改善。MySQL の同期ユーザーに誤った権限が設定されている場合に、必要な同期権限を示す例外をスローするようにしました。 #15977 (TCeason).
indexOf()が BloomFilter を使用するようになりました。 #14977 (achimbab).
パフォーマンスの改善
- Floyd-Rivest アルゴリズムを使用します。ClickHouse における部分ソートのユースケースではこれが最適とされています。ベンチマークは https://github.com/danlark1/miniselect およびこちら にあります。#16825(Danila Kutenin)。
ReplicatedMergeTreeエンジンファミリーは、レプリケーションのフェッチ処理専用のスレッドプールを使用するようになりました。プールのサイズは設定background_fetches_pool_sizeによって制限され、サーバーの再起動により調整できます。デフォルト値は 3 であり、最大並列フェッチ数が 3 であることを意味します(これにより 10G ネットワークを十分に活用できます)。#520 を修正。#16390(alesapin)。quantileTDigestの状態が制御不能に増大する問題を修正しました。#16680(hrissan)。EXPLAINにVIEWサブクエリの説明を追加しました。VIEWに対する limit push down 最適化を制限しました。Distributedのローカルレプリカをクエリプランに追加しました。#14936(Nikolai Kochetov)。- ORDER BY に式があり、かつ
max_threads> 0 の場合のoptimize_read_in_order/optimize_aggregation_in_orderを修正しました。#16637(Azat Khuzhin)。 - 非常に多数の
MergeTreeテーブルに対するMergeテーブルからの読み取りパフォーマンスを修正しました。#7748 を修正。#16988(Anton Popov)。 - 完全一致によるパーティションのプルーニングを安全に行えるようになりました。有用なケースとして、テーブルが
intHash64(x) % 100でパーティション分割されていて、クエリ条件が x ではなく、そのままintHash64(x) % 100に対して記述されている場合があります。#16253(Amos Bird)。
実験的機能
ビルド/テスト/パッケージングの改善
- イメージビルドに関するテストカバレッジを改善。 #17233 (alesapin).
- 埋め込みタイムゾーンデータをバージョン 2020d に更新(あわせて cctz を最新版の master に更新)。 #17204 (filimonov).
- Poco における UBSan レポートを修正。これにより #12719 がクローズ。 #16765 (alexey-milovidov).
- サードパーティライブラリを UBSan でインストゥルメントしないように変更。 #16764 (alexey-milovidov).
- キャッシュディクショナリにおける UBSan レポートを修正。これにより #12641 がクローズ。 #16763 (alexey-milovidov).
- 無限大の浮動小数点数を整数に変換しようとした際の UBSan レポートを修正。これにより #14190 がクローズ。 #16677 (alexey-milovidov).
ClickHouse リリース 20.11
ClickHouse リリース v20.11.7.16-stable, 2021-03-02
改良
バグ修正
- BloomFilter インデックスのクラッシュを修正。#19757 を解決。#19884(Maksim Kita)。
- system.text_log が有効になっている場合にデッドロックが発生する可能性がありました。これにより #19874 が修正されました。 #19875(alexey-milovidov)。
- 以前のバージョンでは、関数 arrayEnumerateUniq に対する想定外の引数により、クラッシュや無限ループが発生する可能性がありました。これにより #19787 が解決されました。#19788(alexey-milovidov)。
- 算術型と文字列型の厳密な比較を行う際に発生していたスタックオーバーフローを修正しました。 #19773 (tavplubix).
bitmapAndnot関数で発生していたセグメンテーションフォルトを修正しました。 #19668 を解決します。 #19713 (Maksim Kita)。- 一部の big integers を扱う関数では、セグメンテーションフォルトが発生する場合があります。big integers は実験的な機能です。これにより #19667 がクローズされました。#19672(alexey-milovidov)。
LowCardinality引数に対するneighbor関数の誤った結果を修正。 #10333 に対応。 #19617(Nikolai Kochetov)。- 切断後に
Connection内のCompressedWriteBufferで発生していた use-after-free 問題を修正。 #19599 (Azat Khuzhin). DROP/DETACH TABLE table ON CLUSTER cluster SYNCクエリがハングする可能性があった問題を修正しました。 #19568 を修正。 #19572 (tavplubix)。CREATE DICTIONARYクエリのid式を修正。 #19571 (Maksim Kita)。- merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read を 0/UINT64_MAX に設定した場合に発生する SIGSEGV を修正。 #19528 (Azat Khuzhin).
addMonth関数が特定の方法で細工された引数とともに呼び出された場合、(メモリ読み取り時の)バッファオーバーフローが発生する可能性がありました。これにより #19441 を修正しました。また、#19413 も修正しました。 #19472(alexey-milovidov)。- いずれかのファイルで空のデータブロックが見つかった場合、その分散バッチを破損しているものとしてマークするように変更しました。 #19449 (Azat Khuzhin).
- Uber H3 ライブラリで発生し得るバッファオーバーフローの問題を修正しました。詳しくは https://github.com/uber/h3/issues/392 を参照してください。これにより #19219 がクローズされました。 #19383 (alexey-milovidov).
system.partsのstateカラムを修正しました(順序が不正なため、このカラムをクエリした際にLOGICAL_ERRORが発生していた問題)。 #19346 (Azat Khuzhin).- エラー
Cannot convert column now64() because it is constant but values of constants are different in source and resultを修正。 #7156 の続き。 #19316(Nikolai Kochetov)。 ALTERおよびDROPクエリの同時実行時に、ReplicatedMergeTree テーブルの処理がハングする可能性がある不具合を修正しました。 #19237 (alesapin).ORCフォーマットのファイルを無限に読み続けてしまう問題を修正しました(#10580 で導入された不具合)。#19095 を修正します。#19134(Nikolai Kochetov)。- 起動時に、ClickHouse が
LowCardinality(Nullable(...))から圧縮コーデックを読み取れず、例外Attempt to read after EOFを送出していたバグを修正しました。 #18340 を修正しました。 #19101(alesapin)。 TemplateまたはCustomSeparatedフォーマットを使用して HTTP インターフェイス経由でデータを挿入する際に発生していたThere is no checkpointエラーを修正しました。#19021 を解決。#19072(tavplubix)。- 古い構文で作成された
MergeTreeテーブルに対するMODIFY TTLクエリを制限するようにしました。以前はクエリ自体は成功していましたが、実際には何の効果もありませんでした。#19064(Anton Popov)。 - Enum 型の引数に対して
groupUniqArrayが正しい型を返すようにしました。これにより #17875 が解決されました。#19019(alexey-milovidov)。 - 関数
ignoreをLowCardinality引数と共に使用した場合に発生する可能性のあったExpected single dictionary argument for functionエラーを修正しました。#14275 を修正。#19016(Nikolai Kochetov)。 TinyLogエンジンを使用するテーブルへのLowCardinality列の挿入に関する不具合を修正しました。関連する #18629 を解決。#19010(Nikolai Kochetov)。optimize_move_functions_out_of_anyを無効化しました。この最適化は常に正しく動作するとは限らないためです。これにより #18051 がクローズされます。これにより #18973 がクローズされます。 #18981(alexey-milovidov)による変更です。- シャットダウン時にごくまれに発生していたデッドロックを修正。 #18977 (tavplubix).
- 一部のエスケープされたテキスト(
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')のような)を含むミューテーションが誤ってシリアライズされるバグを修正しました。#18878 を解決。#18944(alesapin)。 - Attach partition で mutation がリセットされるようにしました。 #18804. #18935 (fastio).
- clickhouse-local のシャットダウン時に発生しうるハングアップを修正しました。これにより #18891 を解決します。 #18893 (alexey-milovidov).
- 単項関数と Nullable 型に対応した If コンビネータを修正。 #18806 (Azat Khuzhin).
network_compression_method設定がグローバルにデフォルト以外の値に設定されている場合、非同期分散INSERT文がサーバーによって拒否されることがあります。これにより #18741 が修正されます。 #18776 (alexey-milovidov)。Nullable(String)からNullable(Decimal(P, S))へNULLをCASTしようとした際に発生するAttempt to read after eofエラーを修正しました。Nullable(String)の文字列から Decimal をパースできない場合、関数CASTはNULLを返すようになりました。#7690 を修正しました。#18718(Winter Zhang)。- 引数の数が一致しない Logger の問題を修正。 #18717 (sundyli)。
- FixedString データ型のサポートを追加しました。MySQL から ClickHouse へデータをレプリケートする際に、例外「Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)」が発生していました。このパッチはバグ #18450 を修正します。また、#6556 も修正します。#18553(awesomeleo)。
RIGHTまたはFULLJOIN を使用するサブクエリの後にORDER BYを使用した際に発生する可能性のあるPipeline stuckエラーを修正。 #18550 (Nikolai Kochetov).- 対応するミューテーションを kill した後に
ALTERクエリがハングする可能性のあるバグを修正。thread fuzzer によって検出された。#18518 (alesapin). - マージ時の AIO を使った書き込みを無効化しました。マージ中に主キー列のデータがごくまれではあるものの破損する可能性があるためです。 #18481 (alesapin).
- 結果を事前に計算できない場合には、解析段階でサブクエリに対する定数畳み込みを無効化しました。 #18446 (Azat Khuzhin).
Nullable(String)型の引数に対してtoType(...)関数(toDate、toUInt32など)を実行した際に発生していたvalue is too shortエラーを修正しました。これらの関数は、パースエラー時に例外をスローするのではなくNULLを返すようになりました。 #7673 を修正。 #18445(tavplubix)。- ワイドパーツからコンパクトパーツへのマージを制限しました。垂直マージの場合、壊れた結果パーツが生成されてしまう問題がありました。 #18381 (Anton Popov).
- テーブル
system.settings_profile_elementsへのデータ投入処理を修正。この PR は #18231 を修正します。#18379(Vitaly Baranov)。 - 定数引数を持つバイナリ関数に対するインデックス解析を修正し、誤ったクエリ結果が返される不具合を修正しました。これにより #18364 が解決されました。#18373(Amos Bird)。
- 二段階集約を使用している場合に、
Distinctコンビネータを用いた集約関数で発生する可能性のあるクラッシュを修正。#17682 を修正。#18365(Anton Popov)。 tableから少なくとも 1 列を選択できる場合、SELECT count() FROM tableを実行できるようになりました。この PR で #10639 が修正されました。 #18233(Vitaly Baranov)。SELECT JOINは、結合される各テーブルに対するSELECT権限を必要とするようになりました。この PR で #17654 を修正しました。 #18232 (Vitaly Baranov).MergeTree*からの読み取り時に、read backoff(ログ内に<Debug> MergeTreeReadPool: Will lower number of threadsというメッセージが出力される状況)が発生した場合に、クエリ結果が不完全になる可能性がある問題を修正。#16423 で導入された不具合であり、#18137 を修正するもの。#18216(Nikolai Kochetov)。- クエリ
MODIFY COLUMN ... REMOVE TTLが実際にはカラムの TTL を削除しない不具合を修正。#18130(alesapin)。 - 述語オプティマイザにおける非決定的関数の扱いを修正しました。これにより #17244 が解決されます。 #17273 (Winter Zhang)。
MOVEまたはREPLACE PARTITIONの後、存在しないパーツを待ち続けて Mutation がハングすることがあり、まれなケースではDETACHやDROP PARTITIONの後にも発生する可能性がありました。この問題は修正されています。 #15537 (tavplubix).
ビルド/テスト/パッケージングの改善
ClickHouse リリース v20.11.6.6-stable, 2020-12-24
バグ修正
IPv4/IPv6 stackのデュアルスタック構成を持つマシン上で、サーバーからclickhouse-odbc-bridgeプロセスに接続できない問題を修正し、さらに不正な形式のクエリを使用して ODBC ディクショナリの更新が行われる場合やクラッシュを引き起こす場合の問題を修正しました。これにより #14489 が解決された可能性があります。 #18278 (Denis Glazachev)。- Enum 型と Int 型間のキー比較を修正しました。これにより #17989 が修正されました。#18214(Amos Bird)。
MaterializeMySQLデータベースエンジンにおける一意キー変換時のクラッシュを修正しました。これにより #18186、#16372、#18211 が修正されます(Winter Zhang)。- S3 URL の解析で発生していた
std::out_of_range: basic_stringを修正しました。 #18059 (Vladimir Chebotarev). - MaterializeMySQL で MySQL のプレフィックスインデックスの変換がサポートされていなかったため、一部のテーブルが MySQL から ClickHouse に同期されない問題を修正しました。これにより、#15187、#17912、#17944 の問題が解決されました(Winter Zhang)。
ARRAY JOINを含むクエリで、クエリ最適化により誤った結果が生成される問題を修正しました。 #17887 (sundyli).topK集約関数で発生する可能性があったセグメンテーションフォルトを修正。これにより #17404 がクローズされます。 #17845(Maksim Kita)。in_memory_parts_enable_walが無効な場合は、WAL からパーツを復元しません。 #17802 (detailyang).- ClickHouse が MySQL サーバーへの再接続に失敗する問題を修正しました。 #17681 (Alexander Kazakov).
- パーティション述語使用時における
optimize_trivial_count_queryの不整合な動作を修正しました。 #17644 (Azat Khuzhin). - サーバーがデーモンモードで動作している場合に
system.stack_traceテーブルが空になっていた問題を修正しました。 #17630 (Amos Bird)。 - MergeTree テーブルのバックグラウンドで、例外
fmt::v7::format_errorがログに記録され得る不具合を修正しました。これにより #17613 が修正されました。 #17615 (alexey-milovidov)。 clickhouse-clientを対話モードで複数行クエリとともに使用した際に、単一行コメントが誤ってクエリ全体に適用されてしまう不具合を修正しました。これにより #13654 が解決されました。 #17565 (alexey-milovidov)。- 極めてまれなケースでサーバーが接続を受け付けなくなることがある問題を修正しました。 #17542 (alexey-milovidov).
- 対応するミューテーションが別のレプリカ上で kill された場合に
ALTERクエリがハングする問題を修正しました。この変更により #16953 が修正されました。 #17499 (alesapin)。 - ClickHouse によって mark キャッシュのサイズが過小評価されていたバグを修正しました。これは、多数の小さな mark を含むファイルが存在する場合に発生することがあります。 #17496 (alesapin).
optimize_redundant_functions_in_order_by設定を有効化している場合のORDER BYを修正しました。 #17471 (Anton Popov).- 誤った最適化により
DISTINCTの後に重複が発生する可能性があった問題を修正しました。これにより #17294 が修正されました。 #17296(li chengxiang)。 #17439(Nikolai Kochetov)。 LowCardinality型を含むJOINテーブルからの読み取り時に発生していたクラッシュを修正しました。これにより #17228 が解決されました。#17397(Nikolai Kochetov)。- サブクエリ内に
constカラムが存在する場合に fixed set インデックスが無効化される問題を修正しました。これにより #17246 が解決されています。 #17249 (Amos Bird). - インデックス比較に用いられる型が異なる場合に、誤ったインデックス解析が行われる可能性があった問題を修正しました。これにより #17122 が解決されました。 #17145(Amos Bird)。
- クラッシュの原因となっていた
ColumnConstの比較処理を修正しました。これにより #17088 が解決されました。 #17135 (Amos Bird). - リーダーでない
ReplicatedMergeTreeテーブルに対するON CLUSTERクエリが無期限にハングする可能性のあった不具合を修正しました。 #17089 (alesapin). fuzzBits関数で fuzzer によって見つかったバグを修正しました。これにより #16980 が解決されます。 #17051 (hexiaoting)。LIMITを含むクエリなど、実行中にキャンセルされる可能性があるリモートクエリで、不要なネットワークエラーが発生しないようにしました。 #17006 (Azat Khuzhin).- double 型からのキャスト時に、128 および 256 ビットの整数型で誤った結果になる問題を修正しました。 #16986 (Mike).
- エラー発生時には
format_avro_schema_registry_urlの IP アドレスを再解決するようにしました。 #16985 (filimonov). ALTER TABLE ... MODIFY COLUMN ... NewTypeの実行中に、その変更対象列にWHERE句を含むSELECTが実行され、ALTERがまだ完了していない場合にサーバーがクラッシュする可能性があった問題を修正しました。 #16968 (Amos Bird).clickhouse-git-importにおいて blame 情報が正しく算出されていませんでした。 #16959 (alexey-milovidov)。- 単調関数を用いた ORDER BY の最適化を修正しました。#16107 を解決。#16956(Anton Popov)。
optimize_aggregators_of_group_by_keys設定を有効にした状態での GROUP BY と JOIN の最適化を修正しました。これにより #12604 が修正されました。 #16951 (Anton Popov).- インストールスクリプトは常に、設定ディレクトリ内にサブディレクトリを作成する必要があります。これはカスタム設定を用いた Docker ビルドにのみ該当します。#16936 (filimonov).
ORDER BYを含むクエリで発生する可能性のあったIllegal type of argumentエラーを修正しました。これにより #16580 が解決されました。#16928(Nikolai Kochetov)。- WriteBufferFromS3 にデータが一切書き込まれなかった場合、マルチパートアップロードを中止するようにしました。 #16840 (Pavel Kovalenko).
- 引数なしで
anyを使用した際に発生していたクラッシュを修正しました。これにより #16803 を解決しました。 #16826 (Amos Bird)。 - MySQL プロトコル経由の
INSERTクエリに対して、影響を受けた行数を返すべきところで ClickHouse が常に 0 を返していた問題を修正しました。これにより #16605 が解決されます。 #16715 (Winter Zhang)。 - TDigest が制御不能に肥大化する問題を修正しました。 #16680 (hrissan).
- Aggregate 関数で
ifサフィックスを使用した場合にリモートクエリが失敗する問題を修正しました。これにより #16574 #16231 #16610 が修正されました(Winter Zhang)。 select_sequential_consistencyにより最適化された自明な COUNT クエリおよび system.tables において発生していた挙動の不整合を修正しました。 #16309 (Hao Chen)。- ColumnTransformer が存在しないカラムを置き換えようとした場合にエラーをスローするようにしました。 #16183 (hexiaoting).
ClickHouse リリース v20.11.3.3-stable, 2020-11-13
バグ修正
query profilerが有効で、かつ一部の関数に対して(おそらく)壊れた非同期アンワインドテーブルを持つ glibc バージョンの OS 上に ClickHouse がインストールされている場合に、まれに発生する予告なくクラッシュする問題を修正しました。これにより #15301 が修正されます。あわせて #13098 も修正されます。 #16846(alexey-milovidov)。
ClickHouse リリース v20.11.2.1, 2020-11-11
後方互換性のない変更
distributed_ddl設定セクションで、あるprofileが指定されていた場合、そのプロファイルがサーバー起動時にdefaultプロファイルの設定を上書きしてしまう可能性がありました。これは修正されており、現在では分散 DDL クエリの設定がグローバルなサーバー設定に影響しないようになっています。 #16635(tavplubix)。- キー(ソートキー、プライマリキー、パーティションキーなど)で、比較不能なデータ型(
AggregateFunctionなど)の使用を禁止しました。 #16601(alesapin)。 ANALYZEとASTクエリを削除し、enable_debug_queries設定は非推奨にしました。これは、フル機能版のEXPLAINクエリの一部となったためです。 #16536(Ivan)。- 集約関数
boundingRatio、rankCorr、retention、timeSeriesGroupSum、timeSeriesGroupRateSum、windowFunnelが誤って大文字小文字を区別しない扱いになっていました。設計どおり、これらの名前は大文字小文字を区別するように変更しました。SQL 標準で定義されている関数、他の DBMS との互換性のために作成された関数、あるいはそれらと類似した関数のみが大文字小文字非依存であるべきです。 #16407(alexey-milovidov)。 rankCorr関数がデータ不足の場合にnanを返すようにしました #16124。 #16135(hexiaoting)。- バージョン 20.5 より古いバージョンからアップグレードする際に、ローリングアップデートを実行し、クラスタ内に 20.5 以上と 20.5 未満の両方のバージョンが存在する状態で、古いバージョンの ClickHouse ノードを再起動すると、新しいバージョンが存在する状況で古いバージョンが起動することになり、
Part ... intersects previous partエラーを引き起こす場合があります。このエラーを防ぐには、まずクラスタ内のすべてのノードに新しいclickhouse-serverパッケージをインストールしてから再起動を行ってください(つまり、clickhouse-serverを再起動する際には、新しいバージョンで起動するようにします)。
新機能
- ローカルに存在しないユーザーに対するユーザーディレクトリとして LDAP のサポートを追加しました。 #12736 (Denis Glazachev).
- 現在実行中のバックグラウンドフェッチを表示する
system.replicated_fetchesテーブルを追加しました。 #16428 (alesapin). - 設定
date_time_output_formatを追加しました。#15845(Maksim Kita)。 - ClickHouse に簡易的な Web UI を追加しました。 #16158 (alexey-milovidov)。
- 長さデリミタなしで単一の protobuf メッセージを一度に読み書きできるようにしました。 #15199 (filimonov).
- OpenTelemetry の初期サポートを追加しました。ClickHouse は現在、Native および HTTP プロトコル経由で OpenTelemetry の traceparent ヘッダーを受け取り、場合によってはそれらを下流に渡します。実行されたクエリのトレーススパンは、
system.opentelemetry_span_logテーブルに保存されます。 #14195 (Alexander Kuzmenkov)。 CREATE TABLEクエリのカラムリスト内で主キーを指定できるようにしました。他の SQL 方言との互換性を保つために必要です。 #15823 (Maksim Kita).ORDER BY句を含む SELECT クエリでOFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}を実装しました。これはLIMITを指定するための SQL 標準の方法です。 #15855 (hexiaoting)。errorCodeToName関数 - エラーコードに対応する名前を返します(query_logなどを分析する際に有用です)。system.errorsテーブル - エラーが何回発生したかを表示します(system_events_show_zero_valuesの設定に従います)。#16438 (Azat Khuzhin)。untuple関数を追加しました。これは、名前付きタプルを展開することで SELECT 句に新しいカラムを導入できる特殊な関数です。 #16242 (Nikolai Kochetov, Amos Bird).- これにより、クエリパラメータとして識別子を指定できるようになりました。これらのパラメータはテーブルオブジェクトやカラムとして利用できます。 #16594 (Amos Bird)。
- MergeTree BloomFilter インデックスで big integer 型(UInt256、Int128、Int256)および UUID データ型のサポートを追加しました。big integer 型は実験的な機能です。 #16642 (Maksim Kita).
farmFingerprint64関数(非暗号学的な文字列ハッシュ)を追加しました。 #16570 (Jacob Hayes)。log_queries_min_query_duration_msを追加しました。この設定値で指定した時間よりも遅いクエリのみがquery_log/query_thread_logに記録されます(つまり、MySQL のslow_query_logのようなものです)。 #16529 (Azat Khuzhin).Alpineをベースとした Docker イメージを作成できるようにしました。Ubuntu 20.04 のあらかじめコンパイルされたバイナリと glibc コンポーネントを使用します。 #16479 (filimonov).toUUIDOrNull、toUUIDOrZeroキャスト関数を追加しました。 #16337 (Maksim Kita).max_concurrent_queries_for_all_users設定を追加しました。利用例については #6636 を参照してください。#16154(nvartolomei)。- clickhouse-client に新しいオプション
print_query_idを追加しました。これにより、クライアントが生成した現在のクエリ ID を用いて任意の文字列を組み立てることができます。また、clickhouse-client でクエリ ID をデフォルトで出力するようにしました。 #15809 (Amos Bird). tidとlogTrace関数を追加。これにより #9434 がクローズされます。#15803(flynn)。- 時間差を人間が読みやすい形式の文字列に整形する関数
formatReadableTimeDeltaを追加 ... #15497 (Filipe Caixeta). - マルチディスク構成におけるボリューム用に
disable_mergesオプションを追加しました。 #13956 (Vladimir Chebotarev).
実験的機能
- 新しい関数
encrypt,aes_encrypt_mysql,decrypt,aes_decrypt_mysqlが追加されました。これらの関数は動作が遅いため、実験的な機能として扱われています。#11844 (Vasily Nemkov)。
バグ修正
system.distribution_queueのdata_pathに含まれるパスワードをマスクするよう変更しました。 #16727 (Azat Khuzhin).transform_null_in設定が有効になっている場合に、複数のカラムやタプルに対するIN演算子の動作を修正。#15310 を修正。#16722(Anton Popov)。- クエリ対象のテーブルにサンプリングが定義されていない場合、設定
max_parallel_replicasが正しく動作していませんでした。この変更により #5733 が修正されました。 #16675 (alexey-milovidov). - max_threads > 0 かつ ORDER BY 句に式が含まれる場合の optimize_read_in_order/optimize_aggregation_in_order の不具合を修正。 #16637 (Azat Khuzhin).
DEFAULT式の計算において、(実際に発生する可能性はきわめて低いものの)名前の衝突が起こりうる問題がありました。これにより #9359 が修正されました。 #16612 (alexey-milovidov)。query_thread_log.query_duration_msの単位を修正しました。 #16563 (Azat Khuzhin).- MySQL マスター -> MySQL スレーブ -> ClickHouse MaterializeMySQL エンジンという構成で使用する際の不具合を修正しました。
MaterializeMySQLは実験的な機能です。#16504 (TCeason)。 Decimalを引数に取るよう特別に作られたround関数の呼び出しが、整数のゼロ除算を引き起こしていました。これにより #13338 が修正されました。 #16451 (alexey-milovidov)。- Distributed テーブル向けの DROP TABLE を修正(INSERT とのレースコンディションを解消)。 #16409 (Azat Khuzhin).
- レプリケーションキュー内の非常に大きなエントリの処理を修正しました。非常に大きなエントリは、テーブル構造が極端に大きい場合(1 MB近い場合)に
ALTERクエリで発生することがあります。これにより、#16307 の問題が修正されています。#16332(alexey-milovidov)。 - フィルタリング用のセットが作成されていなかったために戻りデータの一部がドロップされる可能性があった不整合な動作を修正しました。 #16308 (Nikita Mikhaylov).
- sharding_key における
dictGetを修正(および、関数コンテキストが永続的に保持される同様の箇所)。 #16205 (Azat Khuzhin). OPTIMIZEコマンドを実行しようとした際にclickhouse-localで例外が送出される問題を修正しました。#16076 を修正。#16192(filimonov)。- #15780 の回帰バグを修正しました。例えば
indexOf([1, 2, 3], toLowCardinality(1))は現在は禁止されていますが、本来は許可されるべきです。#16038(Mike)。 - MySQL データベースに関するバグを修正しました。データベースエンジンとして使用されている MySQL サーバーがダウンしている場合、本来は不要であるにもかかわらず、停止しているサーバーからテーブルを取得しようとして一部のクエリが Exception を発生させていました。たとえば、クエリ
SELECT ... FROM system.partsは MergeTree テーブルだけを対象に動作すべきであり、MySQL データベースには一切アクセスすべきではありません。 #16032 (Kruglov Pavel). ALTER MODIFY COLUMN ... DEFAULT ...で列の型と互換性のない DEFAULT 値を指定した場合、例外がスローされるようになりました。 #15854 を修正。 #15858(alesapin)。- IPv4CIDRToRange/IPv6CIDRToRange 関数が const IP 列値を受け取れるように修正しました。 #15856 (vladimir-golovchenko).
改善点
INTERVAL '1 hour'をINTERVAL 1 HOURと同等として扱い、Postgres などとの互換性を保つようにしました。これにより #15637 が修正されました。#15978(flynn)。- CSV、TSV、JSON の各入力フォーマットで、列挙型の値を数値 ID でパースできるようにしました。 #15685 (vivarum)。
- JBOD アーキテクチャおよび
MergeTreeストレージ向けの、より良い読み取りタスクスケジューリング。読み取りスレッド数の下限として機能する新しい設定項目read_backoff_min_concurrencyが追加されました。 #16423 (Amos Bird)。 Avroフォーマットに不足していたLowCardinalityのサポートを追加。 #16521 (Mike).S3を nginx サーバーをプロキシとして利用するためのワークアラウンド。現在の nginx はhttp://domain.com?deleteのようなパスが空の URL を受け付けませんが、無改造の aws-sdk-cpp はこの形式の URL を生成します。このコミットではパッチ適用済みの aws-sdk-cpp を使用し、このようなケースではパスに "/" を付与したhttp://domain.com/?deleteのような URL を生成するようにしています。 #16814 (ianton-ru)。- 入力データのパースエラーに対する診断を改善し、
Cannot read all dataエラー発生時に行番号を表示するようにしました。#16644 (alexey-milovidov). minMapとmaxMapの挙動をより期待どおりのものにしました。結果から 0 の値をスキップしなくなります。#16087 を修正しました。#16631(Ildus Kurbangaliev)。- ZooKeeper 設定の実行時更新を改善しました。 #16630 (sundyli).
SETTINGS句は可能な限り早い段階で適用します。これにより、クエリ内でより多くの設定を変更できるようになります。これによって #3178 が解決されました。#16619(alexey-milovidov)。event_time_microsecondsフィールドは、従来の UInt64 ではなく、Decimal64 で保存されるようになりました。 #16617 (Nikita Mikhaylov)。- パラメータ化された関数を
APPLYカラムトランスフォーマーで使用できるようになりました。 #16589 (Amos Bird). Atomicデータベースにおいて、削除済みテーブルのデータをクリーンアップするバックグラウンドタスクのスケジューリングを改善しました。テーブルに実際のデータディレクトリが存在しない場合、Atomicデータベースはテーブルのデータディレクトリへの壊れたシンボリックリンクを作成しません。#16584 (tavplubix)。WITH句 (CTE) 内のサブクエリは、その名前を使って同じWITH句内の先行するサブクエリを参照できるようになりました。 #16575 (Amos Bird).system.query_thread_logに current_database を追加。 #16558 (Azat Khuzhin).- 現在のインスタンスで既にコミット済み、または古くなったパーツを detached ディレクトリに取り込めるようにしました。これは、別のクラスタからテーブルを移行し、N 対 1 のシャードマッピングを行う場合に有用です。また、現在の fetchPartition 実装との一貫性も保たれます。 #16538 (Amos Bird).
RabbitMQ向けに複数の改善を行いました:#16263 に関するバグを修正し、イベントループの存続期間を短縮するとともに、より効率的なキュー設定を追加しました。#16426(Kseniia Sumarokova)。quantileDeterministic関数のデバッグアサーションを修正しました。以前のバージョンでは、ネットワーク経由で転送されるデータ量が最大で 2 倍になる可能性がありましたが、バグが存在していたわけではありません。この変更により #15683 が解決されます。 #16410(alexey-milovidov)。TablesToDropQueueSizeメトリクスを追加しました。これは、バックグラウンドでのデータ削除を待っている削除対象テーブルの数に等しい値です。 #16364 (tavplubix)。- クライアントが接続を切断した場合の診断情報が改善されました。以前のバージョンでは、
Attempt to read after EOFやBroken pipeといった例外がサーバー側にログ出力されていました。新しいバージョンでは、代わりに情報メッセージとしてClient has dropped the connection, cancel the query.が出力されます。#16329 (alexey-milovidov). - Set/Join テーブルエンジン向けに、total_rows/total_bytes(system.tables 由来)のサポートを追加しました。 #16306 (Azat Khuzhin).
- 現在は、MergeTree テーブルエンジンファミリーでは
ORDER BYなしでPRIMARY KEYを指定できるようになりました。 #15591 をクローズしました。 #16284(alesapin)。 - システムに tmp フォルダーが存在しない場合(chroot 環境や設定ミスなど)、
clickhouse-localは現在のディレクトリ内に一時的なサブフォルダーを作成します。#16280 (filimonov)。 - named tuple などのネストされたデータ型をサブタイプとしてサポートする機能を追加しました。#15587 を修正。#16262(Ivan)。
DROP DATABASEに対するdatabase_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNCのサポート。 #16127 (Azat Khuzhin).allow_nondeterministic_optimize_skip_unused_shards設定を追加(シャーディングキーにおいてrand()やdictGet()のような非決定的関数を許可するため)。#16105(Azat Khuzhin)。- HTTP 経由のクエリに対する
memory_profiler_step/max_untracked_memoryを修正しました(テストを含む)。これらの値を XML 設定でグローバルに調整しても効果がない問題も修正しました。これらの設定はそもそも適用されず、デフォルト値(4MB)のみが使用されていたためです。HTTP クエリの最もルートとなる ThreadStatus のquery_idを修正しました(query_id読み取り後に QueryScope を初期化することで対応)。#16101(Azat Khuzhin)。 - クラスタ設定の
<internal_replication>オプションに関係なく、ALTER ... ON CLUSTERクエリを実行できるようになりました。 #16075 (alesapin)。 suggestionsの読み込みにより終了時にclickhouse-clientがクラッシュする可能性がある、まれな問題を修正しました。これにより #16035 が修正されました。 #16047 (alexey-milovidov)。- 複合キーを持つ
Redisディクショナリに対してcacheレイアウトのサポートを追加しました。 #15985 (Anton Popov). - 誤設定(
connections_with_failover_max_triesを 0 に設定した場合)で発生するクエリのハング(無限ループ)の問題を修正。 #15876 (Azat Khuzhin). - 一部のログメッセージのレベルを information から debug に変更し、すべてのクエリで information メッセージが表示されないようにしました。これにより #5293 が解決しました。 #15816 (alexey-milovidov)。
- 誤解を招きかねない結果を避けるために、
MemoryTrackingInBackground*メトリクスを削除しました。これにより #15684 が修正されました。#15813(alexey-milovidov)。 zookeeper-dump-treeツールに再接続処理を追加。 #15711 (alexey-milovidov).CREATE TABLE table AS table_function(...)クエリで列リストを明示的に指定できるようにしました。#9249 と #14214 を修正しました。 #14295 (tavplubix).
パフォーマンスの改善
SELECT FINALにおいてパーティションをまたいだパートのマージを行わないようにしました。#15938 (Kruglov Pavel).-OrNullおよび-OrDefault集約関数のパフォーマンスを改善しました。#16661 (alexey-milovidov).quantileMergeのパフォーマンスを改善しました。以前のバージョンでは極端に遅くなっていました。これにより #1463 が解決されます。#16643 (alexey-milovidov).- 論理関数のパフォーマンスを少し改善しました。#16347 (alexey-milovidov).
- MergeTree テーブルエンジンにおけるマージ割り当てのパフォーマンスを改善しました。ユーザーからは見えない変更です。#16191 (alesapin).
- ハッシュテーブルを事前確保することで、
hashed/sparse_hashed辞書のロードを高速化しました。#15454 (Azat Khuzhin). - これまで単純だった
countの最適化が、やや複雑なものになりました。パーティション式と完全に一致する述語も最適化できるようになりました。また、max_parallel_replicas > 1のときに誤ったcountを返していた #11092 も修正されます。#15074 (Amos Bird).
ビルド/テスト/パッケージングの改善
- ステートレステスト向けの flaky チェックを追加しました。これにより、マージ前の段階で潜在的に flaky な機能テストを事前に検出できます。 #16238 (alesapin).
- アマルガメーションではなく、
croaringに対して適切なバージョンを使用するようにしました。 #16285 (sundyli). ya.makeビルドシステム (Arcadia) 向けのビルドファイル生成を改善しました。 #16700 (alexey-milovidov).MaterializeMySQLデータベースエンジン向けに MySQL BinLog ファイルチェックツールを追加しました。MaterializeMySQLは実験的な機能です。 #16223 (Winter Zhang).- 実行可能でないファイルに対する実行ビットをチェックするようにしました。Windows から誤って実行属性付きでコミットしてしまうことがよくあります。 #15843 (alexey-milovidov).
- ヘッダーファイル内の
#pragma onceをチェックするようにしました。 #15818 (alexey-milovidov). - libhdfs3 内の不正なコードスタイル
&vector[idx]を修正しました。これにより libcxx のデバッグビルドが通るようになります。あわせて https://github.com/ClickHouse-Extras/libhdfs3/pull/8 も参照してください。 #15815 (Amos Bird). - Mac OS 上の、ある雑多なサンプルツールのビルドを修正しました。なお、CI では Mac OS 上でサンプルはビルドしておらず (ClickHouse バイナリのみをビルドしています)、そのためほぼ確実にまた壊れます。この変更は #15804 を修正します。 #15808 (alexey-milovidov).
- Sys/V init スクリプトを簡素化しました。 #14135 (alexey-milovidov).
db_generatorにboost::program_optionsを追加し、ユーザビリティを向上させました。これにより #15940 が解決されました。 #15973 (Nikita Mikhaylov).
ClickHouse リリース 20.10
ClickHouse リリース v20.10.7.4-stable, 2020-12-24
バグ修正
IPv4/IPv6デュアルスタック環境のマシンにおいて、サーバーからclickhouse-odbc-bridgeプロセスに到達できない問題を修正し、さらに、不正なクエリで ODBC 辞書の更新が行われた場合や、その結果クラッシュが発生する場合の問題を修正しました。これにより、おそらく #14489 がクローズされます。 #18278 (Denis Glazachev)。- Enum 型と Int 型間のキー比較を修正しました。これにより #17989 が修正されました。#18214 (Amos Bird)。
MaterializeMySQLデータベースエンジンにおける一意キー変換時のクラッシュを修正しました。これにより #18186、#16372、#18211 が修正されました(Winter Zhang)。- S3 URL の解析処理で発生していた
std::out_of_range: basic_stringを修正しました。 #18059 (Vladimir Chebotarev). - MySQL から ClickHouse への同期時に、一部のテーブルが同期されていなかった問題を修正しました。この問題は、MaterializeMySQL で MySQL のプレフィックスインデックスの変換がサポートされていなかったことが原因でした。この修正により、#15187、#17912、#17944 が解決されました(Winter Zhang)。
topK集約関数で起こりうるセグメンテーションフォルトを修正しました。これにより #17404 が解決されました。#17845 (Maksim Kita).in_memory_parts_enable_walが無効になっている場合、WALからパーツを復元しないようにしました。 #17802 (detailyang)。- ClickHouse が MySQL サーバーへの接続再開に失敗する問題を修正しました。 #17681 (Alexander Kazakov).
- サーバーをデーモンモードで実行しているときに
system.stack_traceテーブルが空になる問題を修正。 #17630 (Amos Bird). clickhouse-clientを対話モードで複数行クエリとともに使用した際、単一行コメントが誤ってクエリの末尾まで適用されてしまう問題を修正しました。これにより #13654 が解決されました。 #17565 (alexey-milovidov)。- ごくまれなケースでサーバーが接続を受け付けなくなる問題を修正しました。 #17542 (alexey-milovidov).
- 別のレプリカ上で対応する mutation が kill された場合に
ALTERクエリがハングする問題を修正しました。これにより #16953 が修正されました。 #17499 (alesapin)。 - ClickHouse が mark キャッシュのサイズを過小評価していたバグを修正しました。これは、多数の小さな mark を含むファイルが存在する場合に発生する可能性があります。 #17496 (alesapin)。
optimize_redundant_functions_in_order_by設定有効時のORDER BYの動作を修正しました。 #17471 (Anton Popov)。- 誤った最適化により
DISTINCTの後に発生する可能性があった重複行を修正しました。#17294 を修正。#17296(li chengxiang)。#17439(Nikolai Kochetov)。 LowCardinality型を含むJOINテーブルからの読み取り時に発生していたクラッシュを修正しました。これにより #17228 が解決されます。 #17397 (Nikolai Kochetov)。- サブクエリ内に
const列が存在する場合の固定セットインデックスの無効化処理の問題を修正しました。これにより #17246 が解消されます。 #17249 (Amos Bird)。 - クラッシュを引き起こしていた
ColumnConstの比較を修正しました。これにより #17088 が解決しました。 #17135 (Amos Bird)。 - 非リーダーの
ReplicatedMergeTreeTablesに対するON CLUSTERクエリが無期限にハングする可能性のあったバグを修正しました。 #17089 (alesapin)。 fuzzBits関数で fuzzer によって検出されたバグを修正しました。これにより #16980 が解決されます。 #17051 (hexiaoting).LIMITを含むクエリなど、実行中にキャンセルされる可能性があるリモートクエリに対して、不要なネットワークエラーの発生を回避しました。 #17006 (Azat Khuzhin).- double からキャストした際に、128 ビットおよび 256 ビットの大きな整数で誤った結果が返される問題を修正しました。 #16986 (Mike).
- エラー発生時に
format_avro_schema_registry_urlの IP アドレスを再解決するようにしました。 #16985 (filimonov). ALTER TABLE ... MODIFY COLUMN ... NewTypeの実行後、ALTERがまだ完了していない状態で、変更中のカラムに対してWHERE句を含むSELECTが実行された場合にサーバーがクラッシュする可能性のある問題を修正しました。 #16968 (Amos Bird)。clickhouse-git-importで blame 情報が正しく計算されていませんでした。#16959 (alexey-milovidov)。- 単調な関数に対する ORDER BY の最適化を修正しました。これにより #16107 が解決されました。 #16956 (Anton Popov).
optimize_aggregators_of_group_by_keys設定を有効にした状態でのGROUP BYとJOINの最適化を修正しました。これにより #12604 が修正されました。 #16951 (Anton Popov).- インストールスクリプトは常に設定ディレクトリ内にサブディレクトリを作成する必要があります。これはカスタム設定を使用した Docker ビルドにのみ関係します。 #16936 (filimonov)。
ORDER BYを含むクエリで発生する可能性のあるIllegal type of argumentエラーを修正しました。この修正により #16580 が解決されました。 #16928(Nikolai Kochetov)。WriteBufferFromS3にデータが書き込まれなかった場合、マルチパートアップロードを中止するよう変更しました。 #16840 (Pavel Kovalenko).- 引数なしで
anyを使用した際に発生していたクラッシュを修正しました。これにより、#16803 が解決しました。#16826(Amos Bird)。 - MySQL プロトコル経由の
INSERTクエリに対し、影響を受けた行数ではなく常に 0 を返していた ClickHouse の動作を修正しました。これにより #16605 が修正されました。#16715(Winter Zhang)。 TDigestのサイズが制御不能に増大する問題を修正しました。 #16680 (hrissan)。- 集約関数でサフィックス
ifを使用した際に発生していたリモートクエリの失敗を修正しました。これにより #16574、#16231、#16610 が修正されました(Winter Zhang)。
ClickHouse リリース v20.10.4.1-stable, 2020-11-13
バグ修正
- クエリプロファイラが有効で、かつ一部の関数に対して非同期アンワインドテーブルが(おそらく)壊れている glibc バージョンの OS 上に ClickHouse がインストールされている場合に発生する、まれなサイレントクラッシュを修正しました。これにより #15301 が修正されます。また #13098 も修正されます。 #16846(alexey-milovidov)。
- 複数の列およびタプルに対する
IN演算子と、transform_null_in設定が有効な場合の動作を修正しました。 #15310 を修正します。 #16722(Anton Popov)。 - max_threads>0 かつ ORDER BY に式を含む場合の optimize_read_in_order / optimize_aggregation_in_order の問題を修正しました。 #16637(Azat Khuzhin)。
- 入力から AVRO をパースする際に、型から LowCardinality を取り除くようにしました。 #16188 を修正します。 #16521(Mike)。
- MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine という構成で、MySQL Slave で
slave_parallel_workerが有効な場合に、GTID セットを適切に縮小することでメタデータの急激な増加を修正しました。これにより #15951 が修正されます。 #16504(TCeason)。 - Distributed テーブルに対する DROP TABLE(INSERT と競合する可能性がある場合)の問題を修正しました。 #16409(Azat Khuzhin)。
- レプリケーションキュー内の非常に大きなエントリの処理を修正しました。非常に大きなエントリは、テーブル構造が極端に大きい(約 1 MB)場合の ALTER クエリで発生する可能性があります。これにより #16307 が修正されます。 #16332(alexey-milovidov)。
- MySQL データベースに関するバグを修正しました。データベースエンジンとして使用している MySQL サーバーがダウンしているとき、一部のクエリが、不要であるにもかかわらず無効なサーバーからテーブルを取得しようとして例外をスローしていました。たとえば、クエリ
SELECT ... FROM system.partsは MergeTree テーブルだけを対象とし、MySQL データベースには一切触れるべきではありません。 #16032(Kruglov Pavel)。
改良
- S3 を nginx サーバーをプロキシとして使用する場合のワークアラウンドを追加しました。Nginx は現在、http://domain.com?delete のようにパスが空の URL を受け付けませんが、標準の aws-sdk-cpp はこの形式の URL を生成します。このコミットではパッチ適用済みの aws-sdk-cpp バージョンを使用し、このようなケースでは http://domain.com/?delete のように、パスとして "/" を持つ URL を生成します。 #16813(ianton-ru)。
ClickHouse リリース v20.10.3.30, 2020-10-28
後方互換性のない変更
multiple_joins_rewriter_versionを廃止し、最初のバージョンの joins rewriter を削除しました。#15472 (Artem Zuikov)。format_regexp_escaping_rule設定(Regexpフォーマットに関連)のデフォルト値をRaw(サブパターン全体を 1 つの値として読み取ることを意味します)に変更し、ユーザーが期待する挙動により近づけました。#15426 (alexey-milovidov)。- SQL で入れ子の複数行コメント
/* comment /* comment */ */のサポートを追加しました。これは SQL 標準に準拠しています。#14655 (alexey-milovidov)。 - MergeTree の設定(
max_replicated_merges_with_ttl_in_queueおよびmax_number_of_merges_with_ttl_in_pool)を追加し、バックグラウンドプールおよびレプリケーションキューにおける TTL 付きマージの数を制御できるようにしました。この変更により、削除用 TTL を使用している場合に限り、古いバージョンとの互換性が失われます。それ以外の場合、レプリケーションの互換性は保たれます。すべてのシャードレプリカを一度にアップデートするか、すべてのレプリカのアップデートが完了するまでSYSTEM STOP TTL MERGESを実行することで、非互換性の問題を回避できます。レプリケーションキューに非互換なエントリが入った場合は、まずSYSTEM STOP TTL MERGESを実行し、その後、非互換な TTL マージが割り当てられたパーティションに対してALTER TABLE ... DETACH PARTITION ...を実行してください。そのパーティションは単一のレプリカで再度アタッチします。#14490 (alesapin)。 - 20.5 より古いバージョンからアップグレードする際にローリングアップデートを実施しており、かつクラスタ内に 20.5 以上のバージョンと 20.5 未満のバージョンが混在している場合、新しいバージョンが存在する状態で古いバージョンの ClickHouse ノードを再起動して古いバージョンが起動すると、
Part ... intersects previous partエラーが発生する可能性があります。このエラーを防ぐには、まずクラスタ内のすべてのノードに新しい clickhouse-server パッケージをインストールし、その後で再起動を行ってください(つまり、clickhouse-server を再起動したときに、新しいバージョンで起動するようにします)。
新機能
- バックグラウンドでのデータ再圧縮。MergeTree テーブルエンジンファミリーで
TTL ... RECOMPRESS codec_nameを指定できるようにしました。 #14494 (alesapin). - 並列クォーラム挿入を追加しました。これにより #15601 が解決されました。 #15601 (Latysheva Alexandra)。
- データの永続性をさらに強固に保証するための追加設定。レプリケーションを行わない構成で有用。 #11948 (Anton Popov).
- 重複したブロックが、ローカルには存在しない(レプリカからまだフェッチされていない)レプリカに書き込まれた場合でも、それを無視せずローカルにも書き込み、レプリケーションが正常に成功した場合と同じ効果が得られるようにします。 #11684 (alexey-milovidov).
- 現在、クエリコンテキスト内で名前付きサブクエリを導入するために
WITH <identifier> AS (subquery) ...をサポートしました。これにより #2416 および #4967 がクローズされました。#14771(Amos Bird)。 enable_global_with_statement設定を導入しました。この設定により、最初の SELECT のWITH句が同じレベルの他の SELECT クエリへ伝播し、さらにWITH句内のエイリアスをサブクエリから参照可能になります。 #15451 (Amos Bird)。- クラスタ間クエリ実行のセキュリティを強化(
initial_userを現在のクエリユーザーとして扱うように変更)。 #13156 (Azat Khuzhin). #15551 (Azat Khuzhin). - カラムプロパティおよびテーブルの TTL を削除できるようにしました。
ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_removeとALTER TABLE REMOVE TTLというクエリを追加しました。どちらの操作も軽量で、メタデータレベルで実行されます。 #14742 (alesapin). - フォーマット
RawBLOBを追加しました。これは、エスケープや区切り文字を一切使用せずに単一の値を入出力するためのものです。これにより #15349 が解決されました。 #15364 (alexey-milovidov)。 - ビッグエンディアンのバイト列を UUID に変換できる
reinterpretAsUUID関数を追加しました。 #15480 (Alexander Kuzmenkov). force_data_skipping_indices設定を実装。 #15642 (Azat Khuzhin).- Pretty 形式で結果を行番号付きで出力するための設定
output_format_pretty_row_numbersを追加しました。これにより #15350 が解決されました。#15443(flynn)。 - クエリ難読化ツールを追加しました。これにより、より多くのクエリを共有してより良いテストを行えるようになります。これにより #15268 がクローズされました。#15321(alexey-milovidov)。
- テーブル関数
null('structure')を追加しました。 #14797 (vxider). formatReadableQuantity関数を追加しました。これは、大きな数値を人が読みやすい形式にするのに役立ちます。 #14725 (Artem Hnilov)。- 改行で区切られた複数行を受け取り、各行全体を 1 つの String フィールドとしてパースするフォーマット
LineAsStringを追加。#14703 (Nikita Mikhaylov), #13846 (hexiaoting). - 文字列配列としてデータを出力する
JSONStringsフォーマットを追加しました。 #14333 (hcz). Regexpフォーマットに「Raw」列フォーマットのサポートを追加しました。これにより、エスケープ規則を一切適用せずに、部分パターンをそのまま抽出できます。 #15363 (alexey-milovidov).TSV出力形式におけるNULL表現を設定可能にしました。これは設定output_format_tsv_null_representationによって制御され、デフォルトは\Nです。これにより #9375 が解決されました。なお、この設定は出力形式にのみ影響し、TSV入力形式でサポートされるNULL表現は\Nのみです。#14586(Kruglov Pavel)。MaterializeMySQLで Decimal データ型をサポート。MaterializeMySQLは実験的機能です。 #14535 (Winter Zhang).- 新機能を追加:
SHOW DATABASES LIKE 'xxx'。#14521(hexiaoting)。 - 任意の Git リポジトリをサンプルデータセットとして ClickHouse にインポートするためのスクリプトを追加しました。 #14471 (alexey-milovidov).
- これからは、
INSERTステートメントで、カラムリスト内でカラムトランスフォーマーと組み合わせてアスタリスク(およびそのバリエーション)を使用できるようになりました。 #14453 (Amos Bird). - 分散クエリに対して、リーフノードで読み取る最大行数/バイト数を制限するための新しいクエリ複雑度制限設定
max_rows_to_read_leafとmax_bytes_to_read_leafを追加しました。制限はローカル読み取りにのみ適用され、ルートノードでの最終マージ処理は 除外 されます。 #14221 (Roman Khavronenko)。 - 設定ファイルの
<replicated_merge_tree>セクションでReplicatedMergeTree*ストレージ用の設定をユーザーが指定できるようにしました。これは<merge_tree>セクションと同様に動作します。ReplicatedMergeTree*ストレージでは、<merge_tree>と<replicated_merge_tree>の両方のセクションで指定された設定が併せて適用されますが、<replicated_merge_tree>の設定の方が優先されます。system.replicated_merge_tree_settingsテーブルを追加しました。#13573 (Amos Bird)。 mapPopulateSeries関数を追加しました。 #13166 (Ildus Kurbangaliev).- MySQL の
decimal型(ClickHouse のDecimalとして)およびサブ秒精度を持つdatetime型(DateTime64として)をサポートしました。 #11512 (Vasily Nemkov)。 event_time_microsecondsフィールドをsystem.text_log、system.trace_log、system.query_logおよびsystem.query_thread_logテーブルに追加しました。 #14760 (Bharat Nallan)。system.asynchronous_metric_logおよびsystem.metric_logテーブルにevent_time_microseconds列を追加。 #14514 (Bharat Nallan).system.query_logおよびsystem.query_thread_logテーブルにquery_start_time_microsecondsフィールドを追加。 #14252 (Bharat Nallan)。
不具合修正
- メモリが上限に関係なく過剰に確保されてしまうケースを修正しました。これにより #14560 がクローズされます。 #16206 (alexey-milovidov).
executable辞書のソースがハングする問題を修正しました。以前のバージョンでは、いくつかのフォーマット(例:JSONEachRow)を使用した場合、子プロセスが何らかの出力を行うまでデータが子プロセスに供給されませんでした。この修正により #1697 および #2455 が解決します。#14525(alexey-milovidov)。- 関数
dictGet内で例外が発生した場合の二重解放を修正しました。これは、辞書のロード時にエラーが発生した場合に起こり得ました。 #16429 (Nikolai Kochetov). GROUP BYのTOTALS/ROLLUP/CUBE修飾子と、GROUP BYキーに対するmin/max関数の組み合わせを修正。 #16393 を修正。 #16397(Anton Popov)。- prefer_localhost_replica=0 および internal_replication を使用する非同期 Distributed INSERT を修正。 #16358 (Azat Khuzhin).
- TwoLevelStringHashTable の実装において、メモリリークを引き起こす可能性のある深刻なバグを修正しました。 #16264 (Amos Bird).
- lambda 内での誤った集約により特定のケースで発生するセグフォルトを修正。 #16082 (Anton Popov).
ReplicatedVersionedCollapsingMergeTreeに対するALTER MODIFY ... ORDER BYクエリがハングする問題を修正。これにより #15980 が解決されます。 #16011 (alesapin)。MaterializeMySQL(実験的機能):照合順序名と文字セット名のパーサーを修正し、文字列型でのlength = 0をサポートしました。 #16008 (Winter Zhang)。- 複雑なキーを持つディクショナリで
directレイアウトを使用できるようにしました。 #16007 (Anton Popov). - 一定期間アイドル状態になった後にレプリケーションエラーが発生した場合に、レプリカが 5~10 分間ハングする問題を防ぐようにしました。#15987 (filimonov).
- Atomic データベースエンジンにおいて、MaterializedView への挿入またはそこからの選択を行っている最中に対象テーブルを同時に削除するとまれに発生していたセグメンテーションフォルトを修正しました。 #15984 (tavplubix).
- 設定プロファイルの解析におけるあいまいさを修正しました。
CREATE USER ... SETTINGS profile readonlyは、readonly 制約付きの設定profileを使用するのではなく、readonlyという名前のプロファイルを使用しているものとして解釈されるようになりました。これにより #15628 が修正されました。#15982(Vitaly Baranov)。 MaterializeMySQL(実験的機能): データベースの作成に失敗した際にクラッシュする問題を修正。 #15954 (Winter Zhang).- Atomic データベースエンジンにおいて、テーブルが並行してリネームされている場合に
DROP TABLE IF EXISTSがTable ... does not existエラーで失敗する問題を修正しました。複数テーブルに対していくつかの DDL クエリ(DROP DATABASEやRENAME TABLEなど)を並行実行した際にまれに発生するデッドロックを修正しました。DROP/DETACH TABLEを並行して実行しているときにDROP/DETACH DATABASEがTable ... does not existで失敗する問題を修正しました。#15934 (tavplubix). WHERE、PREWHERE、GLOBAL INを含むクエリをDistributedテーブルに対して実行した場合に、結果が誤って空になってしまう問題を修正しました。#15792 の修正。#15933(Nikolai Kochetov)。- #12513 を修正: クエリを再解析した際に、同じエイリアスを持つ差分式が発生する問題。 #15886 (Winter Zhang)。
- RBAC 実装において、極めてまれに発生しうるデッドロックを修正。 #15875 (Vitaly Baranov)。
ALTER MODIFY COLUMNクエリの実行後に実行されたSELECT ... ORDER BY DESCクエリでBlock structure mismatchという例外が発生していた問題を修正しました。#15800 を修正します。#15852(alesapin)。MaterializeMySQL(実験的機能):select count()の不正確な結果を修正。#15767 (tavplubix)。- 仮想カラムのみを選択するクエリに関するいくつかのケースを修正しました。以前は
Not found column _nothing in blockという例外がスローされることがありました。これにより #12298 が修正されました。#15756(Anton Popov)。 - Atomic データベースで inner テーブルを持つマテリアライズドビューを DROP する処理を修正しました(MV の inner テーブルに対する再帰的な DROP TABLE によりワーカースレッドがハングし、その結果として後続のすべての DROP TABLE がハングする問題)。 #15743 (Azat Khuzhin).
- 最初の試行で失敗した場合に、パーツを別のディスク/ボリュームへ移動できるようになりました。 #15723 (Pavel Kovalenko).
ARRAY JOINを含むMV向けクエリの場合に、MATERIALIZED VIEWへの挿入時に発生することがあるCannot find columnエラーを修正しました。 #15717 (Nikolai Kochetov).max_replicated_logs_to_keep設定のデフォルト値が低すぎた問題を修正しました。この問題により、レプリカが頻繁に失われる可能性がありました。クローン元として最新のレプリカを選択することで、失われたレプリカの復旧プロセスを改善しました。また、失われたレプリカから古いパーツを削除せず、代わりにデタッチするようにしました。 #15701 (tavplubix).- MySQL を利用する辞書およびテーブルで発生するまれなレースコンディションを修正。 #15686 (alesapin).
- AMQP-CPP における無害なレースコンディションを修正。 #15667 (alesapin)。
Bufferテーブルから、宛先テーブルと構造が異なるテーブルを読み取る際に発生していたエラーCannot add simple transform to empty Pipeを修正しました。この問題は、クエリに対して宛先テーブルが空の結果を返す場合に発生する可能性がありました。 #15529 を修正。 #15662(Nikolai Kochetov)。- S3 を使用した MergeTree への挿入時のエラー処理を適切化。S3 上の MergeTree は実験的機能です。 #15657 (Pavel Kovalenko)。
- S3 テーブル関数のバグを修正しました:URL から取得したリージョンが S3 クライアントの設定に反映されていませんでした。 #15646 (Vladimir Chebotarev)。
- クエリプランの
ReadFromStorageステップにおけるリソースの解放順序を修正しました。まれにクラッシュを引き起こす可能性がありました。#15610 に関連している可能性があります。#15645(Nikolai Kochetov)。 - 読み取り専用テーブルのデタッチ時に
ReadonlyReplicaメトリクスを減算するようにしました。#15592 (sundyli). VALUES、LIMIT、またはIN演算子の右辺でJSON*関数の結果を使用した場合に発生していたElement ... is not a constant expressionエラーの問題を修正しました。#15589 (tavplubix).- 例外発生時にクエリがより速く終了するようになりました。例外が発生した場合には、リモートレプリカでの実行をキャンセルします。 #15578 (Azat Khuzhin).
- エラーメッセージ
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system callが発生しないようにします。これにより #15541 が修正されます。#15557(alexey-milovidov)。 - イニシエータにデータベースが存在しない場合に、IN を含むクエリおよび Distributed テーブルで発生する
Database <db> does not exist.エラーを修正。 #15538 (Artem Zuikov). - Mutation が、
MOVEやREPLACE PARTITIONの後、またはまれにDETACHやDROP PARTITIONの後に、存在しないパーツを待ち続けてハングすることがありました。この問題は修正されました。 #15537 (tavplubix). LIKEで同じパターンを実行した後に、ILIKE演算子が大文字小文字を区別しない動作をしなくなる不具合を修正。 #15536 (alesapin).- データに存在しない列を選択した際に、その列が同様にデータに存在しない他の列に依存している場合に発生する
Missing columnsエラーを修正。#15530 の不具合を修正。#15532(alesapin)。 - 単一のパラメータが ReplicatedMergeTree に渡された場合に、それを無視するのではなくエラーを発生させるようにしました。 #15516 (nvartolomei).
- DDLWorker におけるイベントサブスクリプションのバグを修正しました。このバグにより、まれに
ON CLUSTERでクエリがハングする可能性がありました。このバグは #13450 で導入されたものです。#15477(alesapin)。 boundingRatio集約関数の第 2 引数の型が不正な場合に、適切なエラーを返すようにしました。 #15407 (detailyang).- #15365 の修正: MySQL エンジン使用のデータベースを
ATTACHすると、クエリコンテキストがないために例外がスローされる問題を修正。#15384(Winter Zhang)。 SELECTクエリ内でカラムトランスフォーマーが複数回出現する場合の挙動を修正しました。 #15378 (Amos Bird)。S3ストレージでの圧縮を修正しました。 #15376 (Vladimir Chebotarev).SELECT toStartOfDay(today())のようなクエリが、time_zone 引数が空であるとエラーになって失敗するバグを修正。 #15319 (Bharat Nallan)。- MergeTree テーブルのリネーム処理とバックグラウンドでのクリーンアップ処理の間に発生するレースコンディションを修正。 #15304 (alesapin).
- システムログが有効な状態でのサーバー起動時にまれに発生するレースコンディションを修正しました。 #15300 (alesapin).
MySQLエンジンを使用する同一テーブルへのサブクエリが多数含まれるクエリがハングする問題を修正しました。以前は、1 つのクエリ内で同じMySQLテーブルへのサブクエリが 16 個を超えると、ハングしたままになっていました。 #15299 (Anton Popov).- QueryLog における MSan の報告を修正。
memory_usageフィールドで未初期化メモリが使用されていました。#15258 (alexey-milovidov). - Merge テーブルに対する JOIN を含むクエリで、GROUP BY 句で発生する 'Unknown identifier' エラーを修正。 #15242 (Artem Zuikov).
LowCardinality型でjoinGetを使用した際にインスタンスがクラッシュする不具合を修正しました。これにより #15214 が解決されます。#15220(Amos Bird)。- テーブルエンジン
Bufferにおいて、ALTERクエリ実行後に新しいスキーマのデータをBufferに挿入できなくなるバグを修正しました。 #15117 を解決。 #15192(alesapin)。 - MySQL 列定義パケット内の Decimal フィールドのサイズを調整。 #15152 (maqroll).
join_algorithm='auto'におけるData compressed with different methodsエラーを修正。join_algorithm='partial_merge'の場合、左テーブルの結合キーの型として LowCardinality を保持するようにしました。 #15088 (Artem Zuikov).jemallocを更新し、アフィニティマスク付きのpercpu_arenaを修正しました。 #15035 (Azat Khuzhin). #14957 (Azat Khuzhin).- すでに String と FixedString の間ではパディング付き比較を使用しています(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333)。この PR は同じロジックをフィールド比較にも適用し、FixedString を主キーとして使用する際の挙動を正しくします。これにより #14908 が解決されます。#15033(Amos Bird)。
- 関数
barが意図的に細工された特定の引数で呼び出された場合、バッファオーバーフローが発生する可能性がありました。これにより #13926 が解決されました。 #15028(alexey-milovidov)。 - Mac OS 上の Docker 環境で clickhouse-server を実行している際に、Atomic データベースで DDL クエリを実行すると発生していた
Cannot rename ... errno: 22, strerror: Invalid argumentエラーを修正しました。 #15024 (tavplubix). - メモリ制限を超過し、HashJoin から MergeJoin に切り替える必要がある場合に、RIGHT または FULL JOIN で join_algorith='auto' が指定されているとクラッシュする問題を修正しました。 #15002 (Artem Zuikov).
- これで、
number_of_free_entries_in_pool_to_execute_mutationとnumber_of_free_entries_in_pool_to_lower_max_size_of_mergeの設定値をbackground_pool_sizeと同じ値に設定できるようになりました。 #14975 (alesapin)。 - サブクエリに
finalizeAggregation関数が含まれている場合に述語プッシュダウンが正しく動作しない問題を修正。 #14847 を解決。 #14937(filimonov)。 - 論理コアごとの CPU 周波数を
system.asynchronous_metricsに公開するようにしました。これにより #14923 が修正されました。#14924(Alexander Kuzmenkov)。 MaterializeMySQL(実験的な機能):.metadata.tmp File existsエラーを修正。 #14898(Winter Zhang)。extractAllGroups関数の一部の呼び出しで「Memory limit exceeded」エラーが発生する可能性があった問題を修正しました。これにより #13383 が解決されました。#14889(alexey-milovidov)。- ファイルディスクリプタを使用した StorageFile への INSERT を試みた際に発生する SIGSEGV を修正。 #14887 (Azat Khuzhin).
cache辞書で発生するセグメンテーションフォールトを修正しました #14837。#14879(Nikita Mikhaylov)。MaterializeMySQL(実験的機能):MySQL の binlog イベントのパース処理において、MaterializeMySQLデータベースエンジンでAttempt to read after eofおよびPacket payload is not fully readが発生していた原因のバグを修正しました。#14852 (Winter Zhang)。SELECTクエリにおいて、参照しているカラムがDEFAULT式を持ち、その式が、同様にDEFAULTを持つ別のカラムに依存しているが、そのカラムがクエリ内に含まれずディスク上にも存在しない場合に、まれに発生するエラーを修正しました。#14531 の一部を修正します。#14845(alesapin)。from_zkインクルードオプションを使用して設定ファイルを ZK から取得する必要がある場合に、サーバーが起動時に ZooKeeper との通信中にハングする可能性があった問題を修正しました。これにより #14814 が解決されました。#14843(Alexander Kuzmenkov)。- 符号付き型に対する
Int -> Intの縮小キャストにおける単調性の誤検出を修正しました。これにより、誤ったクエリ結果につながる可能性がありました。このバグは #14513 で明らかになりました。#14783(Amos Bird)。 Replace列トランスフォーマは、識別子をクローンした AST で置き換える必要があります。これにより #14695 が解決されます。#14734 (Amos Bird)。ALTER ... MODIFY QUERYを実行した際、マテリアライズドビューのメタデータでデフォルトのデータベース名が欠落していた問題を修正しました。 #14664 (tavplubix).ALTER UPDATEのミューテーションで、代入式にNullableカラムがあり、定数値(UPDATE x = 42のような)を設定した場合に、カラムに誤った値が入る、またはセグメンテーションフォルトが発生するバグを修正。#13634、#14045 を修正。#14646(alesapin)。- 結果列の Decimal スケールが誤っていたために、Decimal の乗算結果が不正になっていた問題を修正。 #14603 (Artem Zuikov).
NullableのLowCardinality型に対する関数hasを修正。 #14591 (Mike).- StorageReplicatedMergeTree エンジンの CreateQuery 実行中に発生した ZooKeeper の例外の後で、データディレクトリをクリーンアップするようにしました。 #14563 (Bharat Nallan).
- 非常に大きなパラメータによるオーバーフローで発生する可能性があった、
-Resampleコンビネータ付き関数のまれなセグメンテーションフォルトを修正しました。 #14562 (Anton Popov). Nullable(String)を Enum 型に変換する際のバグを修正しました。これは #12745 によって導入されたもので、この修正により #14435 が解決されます。 #14530 (Amos Bird)。- 誤っていた
Nullableカラムのソート順を修正しました。これにより #14344 が解決されました。 #14495 (Nikita Mikhaylov)。 currentDatabase()関数をON CLUSTERDDL クエリで使用できない問題を修正。 #14211 (Winter Zhang)。MaterializeMySQL(実験的な機能):MaterializeMySQLデータベースエンジンで発生していたPacket payload is not fully readエラーを修正しました。 #14696(BohuTANG)。
改善
- 新しく作成されるデータベースでは、デフォルトで
Atomicデータベースエンジンが有効になります。 #15003 (tavplubix). - サブタイプを持つカラムに対して、
DeltaやT64などの専用コーデックを指定できるようにしました。#12551 を実装し、#11397 と #4609 を修正しました。 #15089(alesapin)。 - ZooKeeper 設定の動的リロード。 #14678 (sundyli).
- これにより、クラスタ設定の
<internal_replication>の設定に関係なく、ALTER ... ON CLUSTERクエリを実行できるようになりました。 #16075 (alesapin). joinGetが複数キーでのルックアップをサポートするようになりました。 #12418 に続く変更です。 #13015 (Amos Bird)。Atomicデータベースに対してNO DELAYまたはSYNCが指定されている場合、DROP/DETACH TABLEが実際に完了するまで待機するようになりました。 #15448 (tavplubix).ALTERクエリを使用して、VersionedCollapsingMergeTreeのバージョン列のデータ型を変更できるようになりました。 #15442 (alesapin)。- レプリケーテッドテーブル作成時の
zookeeper_pathにおいて、{database}、{table}、{uuid}マクロを展開するようにしました。サーバー再起動後にzookeeper_pathが不正になる可能性がある場合には、RENAME TABLEを許可しないようにしました。#6917 を修正。#15348(tavplubix)。 - 関数
nowはタイムゾーンを指定する引数を受け取れるようになりました。これにより 15264 がクローズされました。 #15285 (flynn)。 /docker-entrypoint-initdb.d/内のすべてのスクリプトの実行が完了するまで、ClickHouse サーバーへの接続を許可しないようにしました。 #15244 (Aleksei Kozharin).EXPLAIN PLANクエリにoptimize設定を追加しました。有効な場合、クエリプランレベルの最適化が適用されます。デフォルトで有効になっています。 #15201 (Nikolai Kochetov).- CAST の引数の数が不正な場合に適切な例外メッセージを出力するようにしました。これにより #13992 が解決しました。 #15029(alexey-milovidov)。
- データパーツ挿入時に TTL move を無効化するオプションを追加。 #15000 (Pavel Kovalenko).
- ミューテーションを実行する際にキー制約を無視します。このプルリクエストがない場合、
force_index_by_date = 1またはforce_primary_key = 1のときにミューテーションを実行することはできません。#14973(Amos Bird)。 - ZooKeeper セッションの有効期限切れが原因で以前の DROP 試行が失敗していた場合でも、Replicated テーブルを DROP できるようにしました。これにより #11891 が修正されました。 #14926 (alexey-milovidov)。
- 分散テーブルに対して
SETTINGSを伴うSELECTを実行した際に、本来不要な設定制約違反が発生する問題を修正しました。 #14876 (Amos Bird). load_balancing_first_offsetというクエリ設定を追加し、最初のレプリカを明示的に指定できるようにしました。これはFIRST_OR_RANDOMロードバランシング戦略と併用され、レプリカ間のワークロードを制御できます。 #14867 (Amos Bird)。EXPLAINの結果にSETとJOINのサブクエリを表示するようにしました。 #14856 (Nikolai Kochetov).- ストレージエンジン
Distributedでマルチボリュームのストレージ構成を使用できるようにしました。 #14839 (Pavel Kovalenko). - 同じ timespec から
query_start_timeとquery_start_time_microsecondsを生成します。#14831(Bharat Nallan)。 StorageJoinとStorageSetの永続化を無効化する機能の追加。この機能はdisable_set_and_join_persistencyを設定することで制御されます。また、この PR は issue #6318 を解決しました。#14776 (vxider)。- これで、
COLUMNSを使ってカラムのリストを包み、その後でカラムトランスフォーマーを適用できるようになりました。 #14775 (Amos Bird)。 - マージ処理の調査を改善するため、
system.mergesテーブルにmerge_algorithmを追加しました。 #14705 (Amos Bird). - ZooKeeper の exists watch が原因となる可能性のあるメモリリークを修正。#14693 (hustnn)。
- 分散 DDL の並列実行を可能にしました。 #14684 (Azat Khuzhin).
QueryMemoryLimitExceededイベントカウンターを追加しました。これにより #14589 がクローズされました。#14647(fastio)。- クエリフォーマットの末尾にある空白をいくつか修正。 #14595 (Azat Khuzhin).
- ClickHouse は
partition exprとkey exprを別のものとして扱います。partition exprは関連するカラムを含む minmax インデックスを構築するために使用され、一方primary key exprは式として保存されます。ユーザーはしばしば、partition by i / 1000のように、より粗い粒度でテーブルをパーティション化することがあります。しかし、二項演算子は単調ではなく、この PR ではその問題の修正を試みています。これは他のユースケースにも有益となる可能性があります。#14513(Amos Bird)。 DiskS3のアクセスチェックをスキップできるオプションを追加しました。s3ディスクは実験的な機能です。#14497(Pavel Kovalenko)。- 進行中の S3 リクエストがある場合に、サーバーのシャットダウン処理を高速化しました。 #14496 (Pavel Kovalenko)。
SYSTEM RELOAD CONFIGは再読み込みに失敗した場合、例外をスローし、以前の users.xml を引き続き使用するようになりました。バックグラウンドでの定期的な再読み込み処理も、再読み込みに失敗した場合には以前の users.xml をそのまま使用し続けます。 #14492 (Vitaly Baranov).clickhouse-clientのスクリプトモードにおいて、VALUES 形式でインラインデータを含む INSERT ステートメントに対し、改行に加えてセミコロンもデータ終端文字としてサポートしました。#12288 をクローズしました。 #13192(Alexander Kuzmenkov)。- コンパクトパーツでカスタムコーデックをサポートしました。 #12183 (Anton Popov).
パフォーマンスの改善
- 小さなパーツに対して、デフォルトでコンパクトパーツを有効にしました。これにより、頻繁な挿入処理をより効率的に(4〜100倍高速に)処理できるようになります。 #11913 (alexey-milovidov).
quantileTDigestのパフォーマンスを改善しました。これにより #2668 が修正されます。 #15542 (Kruglov Pavel).- AggregatingInOrderTransform/optimize_aggregation_in_order におけるメモリ使用量を大幅に削減しました。 #15543 (Azat Khuzhin).
- 256ビット乗算を高速化しました。 #15418 (Artem Zuikov).
- ワイド整数のベース型として (u)int64_t を使用することで、256ビット型のパフォーマンスを改善しました。従来のワイド整数はベース型として 8ビット型を使用していました。 #14859 (Artem Zuikov).
- 垂直マージの一時データを保存する際に、一時ディスクを明示的に使用するようにしました。 #15639 (Grigory Pervakov).
- ループ内で複数回の DeleteObject を呼び出す代わりに、1つの S3 DeleteObjects リクエストを使用するようにしました。機能上の変更は一切なく、integration/test_log_family_s3 など既存のテストでカバーされています。 #15238 (ianton-ru).
DateTime <op> DateTimeが誤って遅い汎用実装を選択していた問題を修正しました。これにより #15153 が修正されます。 #15178 (Amos Bird).FixedString型の GROUP BY キーのパフォーマンスを改善しました。 #15034 (Amos Bird).- clickhouse-server を起動する際、コードセグメントのみを
mlockするようにしました。以前のバージョンでは、デバッグ情報を含むすべてのマップ済み領域がメモリにロックされていました。デバッグ情報は通常別ファイルに分割されますが、そうでない場合、メモリ使用量が 2〜3 GiB 増加する原因になっていました。 #14929 (alexey-milovidov). - Link Time Optimization により、ClickHouse バイナリのサイズが小さくなりました。
ビルド/テスト/パッケージングの改善
- 本番向け ClickHouse のビルドには、clang-11 を使用するようになりました。 #15239 (alesapin)。
- 現在、CIでは clang-11 を使用して ClickHouse をビルドしています。#14846 (alesapin)。
- バイナリビルド(Linux、Darwin、AArch64、FreeBSD)で使用するコンパイラを clang-11 に切り替えました。 #15622 (Ilya Yatsishin).
- これですべてのテスト用イメージが
llvm-symbolizer-11を使用するようになりました。#15069 (alesapin)。 - llvm-11 を使用してビルドできるようにしました。 #15366 (alexey-milovidov).
clang-tidy-10からclang-tidy-11に切り替えました。 #14922 (alexey-milovidov).- LLVM の experimental pass manager をデフォルトで使用するようにしました。#15608 (Danila Kutenin).
- どの C++ 翻訳単位に対しても、ビルド時間を 10 分以内、メモリ使用量を 10 GB 以内に制限しました。これにより #14925 が修正されました。#15060(alexey-milovidov)。
- テスト実行とプロファイル実行を分離し、パフォーマンス テストをより安定し代表性の高いものにします。 #15027 (alexey-milovidov).
- パフォーマンス テストの信頼性を高めるための変更です。
madviseを用いてプロセスの実行可能メモリを動的に再マッピングし、Transparent Huge Pages を使用することで実現しています。これにより、パフォーマンス テストの不安定性の主な原因である iTLB ミスの回数を減らすことができます。 #14685 (alexey-milovidov)。 - python3 へ変換。これにより #14886 をクローズします。#15007(Azat Khuzhin)。
- サーバーが応答しなかった場合は、機能テストを即座に失敗させるようにしました。これにより #15262 がクローズされました。 #15267 (alexey-milovidov)。
- 設定ファイルなしで AArch64 版の clickhouse-server を実行できるようにしました。これにより #15174 への対応が容易になります。 #15266 (alexey-milovidov).
- CI の Docker イメージを改善: ZooKeeper を廃止し、テスト用設定のインストールを単一のスクリプトに統一しました。 #15215 (alesapin)。
- 高速テストスクリプトでの CMake オプションの引き渡しを修正しました。#14711 のエラーを解消しました。#15155 (alesapin)。
- 1回のコマンド実行でハードウェアベンチマークを行うスクリプトを追加しました。 #15115 (alexey-milovidov).
- 大きなテスト
test_dictionaries_all_layouts_and_sourcesを、いくつかの小さなテストに分割しました。 #15110 (Nikita Mikhaylov)。 - AVX-512 対応サーバー上での base64 に関する MSan レポートを修正しました。これにより #14006 が解決されます。#15030(alexey-milovidov)。
- すべての integration テスト用 *.py ファイルのコードを再フォーマットし、クリーンアップ。 #14864 (Bharat Nallan).
- CI で見つかった MaterializeMySQL の空トランザクションに起因する不安定なテストケースを修正しました。 #14854 (Winter Zhang).
- ビルドを少し高速化しました。#14808(alexey-milovidov)。
- 未使用のヘッダーを削除してビルドを少し高速化。 #14714 (alexey-milovidov).
- OSX におけるビルド失敗を修正。 #14761 (Winter Zhang).
- OS 上で ccache が見つかった場合、CMake でデフォルト有効化します。 #14575 (alesapin).
- ClickHouse リポジトリで CI ビルドの設定を制御できるようにしました。 #14547 (alesapin).
- CMake ファイルでは: - いくつかのオプション説明の一部を、該当オプションの直前にあるコメントへ移動。 -
optionのデフォルト値において、0 をOFF、1 をONに置き換え。 - オプションにいくつかの説明とドキュメントへのリンクを追加。 -FUZZERオプションを置き換え(同じ機能を有効化するENABLE_FUZZINGオプションが別に存在するため)。 -ENABLE_TESTSがあるため、ENABLE_GTEST_LIBRARYオプションを削除。PR の詳細な説明については次を参照: #14711 (Mike)。 - バイナリを少し小さくしました(デバッグ版では約 50 MB の削減)。#14555(Artem Zuikov)。
- ConfigProcessor でファイルパスを連結する際に std::filesystem::path を使用します。 #14558 (Bharat Nallan).
- 負の大きな整数値で呼び出された場合に
bitShiftLeft()で発生するデバッグアサーションを修正しました。 #14697 (Artem Zuikov).
ClickHouse リリース 20.9
ClickHouse リリース v20.9.7.11-stable, 2020-12-07
パフォーマンスの改善
- 非常に多数の
MergeTreeテーブルにまたがるMergeテーブルからの読み取りパフォーマンスを改善しました。#7748 を修正します。 #16988(Anton Popov)。
バグ修正
in_memory_parts_enable_walが無効になっている場合、WAL からパーツを復元しないようにしました。 #17802 (detailyang)Distributedテーブルへの挿入時に十分な空き領域がない場合に発生していたセグメンテーションフォルトを修正しました。 #17737 (tavplubix).- ClickHouse が MySQL サーバーへの再接続に失敗する問題を修正しました。 #17681 (Alexander Kazakov).
- Windows Subsystem for Linux 上で動作する ClickHouse の
AtomicデータベースでRENAMEクエリを実行した際に発生していたFunction not implementedエラーを修正しました。これにより #17661 が解決されています。 #17664(tavplubix)。 clickhouse-clientを対話モードで複数行クエリとともに使用した場合、1 行コメントが誤ってクエリの終わりまで適用されていました。これにより #13654 が修正されました。 #17565 (alexey-milovidov)。- 非常にまれな場合にサーバーが接続を受け付けなくなる可能性がある問題を修正しました。 #17542 (alexey-milovidov).
- 別のレプリカで対応するミューテーションが kill された場合に
ALTERクエリがハングしてしまう問題を修正しました。#16953 を修正。#17499(alesapin)。 - ClickHouse による mark キャッシュサイズの見積もりが過小になっていたバグを修正しました。これは、mark を含むごく小さいファイルが多数存在する場合に発生する可能性があります。#17496 (alesapin).
- 設定
optimize_redundant_functions_in_order_by有効時のORDER BYを修正しました。 #17471 (Anton Popov). - 誤った最適化により
DISTINCTの後に発生する可能性があった重複を修正。#17294 を解決。#17296(li chengxiang)。#17439(Nikolai Kochetov)。 LowCardinality型のデータをJOINテーブルから読み取る際に発生するクラッシュを修正。#17228 を修正。#17397(Nikolai Kochetov)。- サブクエリに const カラムが存在する場合の set インデックス無効化の問題を修正しました。これにより #17246 が修正されました。 #17249 (Amos Bird).
- クラッシュの原因となっていた ColumnConst の比較処理を修正しました。これにより #17088 が解決しました。#17135 (Amos Bird).
some_tableがAS table_function()で作成されていた場合にCREATE TABLE ... AS some_tableクエリで発生していたクラッシュを修正。 #16944 を修正。 #17072 (tavplubix)。- funciton fuzzBits 関数のバグ修正。関連 issue: #16980。#17051(hexiaoting)。
LIMITを含むクエリなど、実行中にキャンセルされる可能性があるリモートクエリで、不要なネットワークエラーが発生しないようにしました。 #17006 (Azat Khuzhin).- TODO. #16866 (tavplubix).
- MySQL プロトコル経由の INSERT クエリに対して、影響を受けた行数を返すようにしました。以前の ClickHouse は常に 0 を返していましたが、これを修正しました。これにより #16605 が解決されました。#16715(Winter Zhang)。
ビルド/テスト/パッケージングの改善
ClickHouse リリース v20.9.6.14-stable, 2020-11-20
改善
- SNI を要求する
clickhouse-serverのセキュアエンドポイントに接続できるようにしました。これはclickhouse-serverが TLS プロキシの背後でホストされている場合に有効です。#16938(filimonov)。 - 条件付き集約関数(例:
avgIf,sumIf,maxIf)が対象の行が存在せず、引数が Nullable 型の場合にNULLを返すようにしました。#13964(Winter Zhang)。
バグ修正
- リーダーではない ReplicatedMergeTree テーブルに対する
ON CLUSTERクエリが無期限にハングする可能性があるバグを修正しました。#17089(alesapin)。 - エラー発生時に
format_avro_schema_registry_urlの IP を再度名前解決するようにしました。#16985(filimonov)。 SELECTが変更中のカラムに対するWHERE句を持ち、ALTER TABLE ... MODIFY COLUMN ... NewTypeがまだ完了していない場合に、サーバーがクラッシュする可能性がある問題を修正しました。#16968(Amos Bird)。- インストールスクリプトが必ず設定フォルダ内にサブディレクトリを作成するようにしました。これはカスタム設定を使った Docker ビルドにのみ関係します。#16936(filimonov)。
ORDER BYを含むクエリでIllegal type of argumentエラーが発生する可能性がある問題を修正しました。#16580 を修正します。#16928(Nikolai Kochetov)。WriteBufferFromS3に一切データが書き込まれていない場合、マルチパートアップロードを中止するようにしました。#16840(Pavel Kovalenko)。- 引数なしで
anyを使用した際にクラッシュする問題を修正しました。#16803 に対応しています。cc @azat。#16826(Amos Bird)。 transform_null_in設定が有効な状態で、複数カラムおよびタプルに対するIN演算子が正しく動作しない問題を修正しました。#15310 を修正します。#16722(Anton Popov)。max_threads>0かつORDER BYに式を含む場合のoptimize_read_in_order/optimize_aggregation_in_orderの問題を修正しました。#16637(Azat Khuzhin)。- #16574 および #16231 を修正します。
ifサフィックス付きの集約関数を使用した際にリモートクエリが失敗する問題を修正しました。#16610(Winter Zhang)。 - 例外発生時にクエリがより速く終了するようになりました。例外が発生した場合、リモートレプリカ上での実行をキャンセルします。#15578(Azat Khuzhin)。
ClickHouse リリース v20.9.5.5-stable, 2020-11-13
バグ修正
- クエリプロファイラが有効で、かつ ClickHouse が一部の関数について非同期アンワインドテーブルが(おそらく)壊れている glibc バージョンの OS にインストールされている場合に発生しうる、まれなサイレントクラッシュを修正しました。これにより #15301 および #13098 が修正されます。 #16846(alexey-milovidov)。
- 入力から Avro をパースする際に、型から LowCardinality が削除されるようにしました。 #16188 を修正します。 #16521(Mike)。
- MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL エンジンの構成で、MySQL Slave 上で
slave_parallel_workerが有効な場合に、GTID セットを適切に縮小することでメタデータの急激な増加を修正しました。これにより #15951 が修正されます。 #16504(TCeason)。 - Distributed テーブルに対する DROP TABLE(INSERT との競合条件あり)を修正しました。 #16409(Azat Khuzhin)。
- レプリケーションキュー内の非常に大きなエントリの処理を修正しました。非常に大きなエントリは、テーブル構造が極端に大きい(約 1 MB)場合に ALTER クエリ内で発生する可能性があります。これにより #16307 が修正されます。 #16332(alexey-milovidov)。
- フィルタリング用の集合が作成されなかったために返却データの一部がドロップされる可能性があった、一貫性のない動作を修正しました。 #16308(Nikita Mikhaylov)。
- MySQL データベースに関するバグを修正しました。データベースエンジンとして使用されている MySQL サーバーがダウンしているとき、一部のクエリが、本来不要であるにもかかわらず無効なサーバーからテーブルを取得しようとして例外をスローしていました。たとえば、
SELECT ... FROM system.partsクエリは MergeTree テーブルのみを対象に動作すべきであり、MySQL データベースには一切アクセスすべきではありません。 #16032(Kruglov Pavel)。
ClickHouse リリース v20.9.4.76-stable (2020-10-29)
バグ修正
- 関数
dictGetで例外が発生した場合に二重解放が起きる問題を修正しました。これは、辞書の読み込み時にエラーが発生していた場合に起こり得ました。 #16429 (Nikolai Kochetov). GROUP BYでWITH TOTALS/ROLLUP/CUBE修飾子やグループ化キーに対するmin/max関数を併用した場合の不具合を修正。#16393 を解決。#16397(Anton Popov)。- prefer_localhost_replica=0 および internal_replication 使用時の非同期 Distributed INSERT を修正。 #16358 (Azat Khuzhin).
- TwoLevelStringHashTable の実装において、メモリリークを引き起こす可能性がある、非常にひどいコード上の誤りを修正しました。このバグがこれほど長い間潜んでいたことに驚いています... #16264 (Amos Bird).
- メモリが制限値に関係なく過剰に割り当てられる可能性があった問題を修正しました。これにより #14560 が解決されました。 #16206 (alexey-milovidov).
ReplicatedVersionedCollapsingMergeTreeに対するALTER MODIFY ... ORDER BYクエリがハングする問題を修正。これにより #15980 が修正されます。 #16011 (alesapin)。- collate 名および charset 名のパーサーを修正し、文字列型での
length = 0のサポートを追加。#16008 (Winter Zhang)。 - 複雑なキーを持つ辞書で direct レイアウトを使用可能にしました。 #16007 (Anton Popov).
- 一定期間非アクティブな状態が続いた後にレプリケーションエラーが発生した場合、レプリカが 5〜10 分間ハングしてしまう問題を防止しました。 #15987 (filimonov).
- Atomic データベースエンジンで、MaterializedView への INSERT またはそこからの SELECT と、対象テーブルの DROP を同時に実行した場合にまれに発生していたセグメンテーションフォルトを修正。 #15984 (tavplubix).
- 設定プロファイルのパースにおける曖昧さを修正しました。
CREATE USER ... SETTINGS profile readonlyは、readonly 制約付きの設定profileを使用しているのではなく、readonlyという名前のプロファイルを使用していると解釈されるようになりました。これにより、#15628 が修正されました。#15982(Vitaly Baranov)。 - データベースの作成に失敗した場合にクラッシュする問題を修正。 #15954 (Winter Zhang).
- Atomic データベースエンジンで、テーブルが同時にリネームされている場合に
DROP TABLE IF EXISTSがTable ... does not existエラーで失敗する問題を修正しました。複数のテーブルに対して特定の DDL クエリ(DROP DATABASEやRENAME TABLEなど)を同時に実行した際にまれに発生するデッドロックを修正しました。同時にDROP/DETACH TABLEを実行している場合にDROP/DETACH DATABASEがTable ... does not existで失敗する問題を修正しました。#15934 (tavplubix)。 WHERE、PREWHERE、GLOBAL INを含むクエリで、Distributedテーブルからのクエリ結果が誤って空の結果になる問題を修正。 #15792 を解決。 #15933(Nikolai Kochetov)。- RBAC で発生し得るデッドロックを修正。#15875 (Vitaly Baranov).
ALTER MODIFY COLUMNクエリ実行後に実行されたSELECT ... ORDER BY DESCクエリで発生していた例外Block structure mismatchの問題を修正しました。#15800 を修正。 #15852(alesapin)。- MaterializeMySQL における
select count()の不正確な結果を修正しました。 #15767 (tavplubix)。 - 仮想カラムのみを選択するクエリの一部のケースを修正しました。以前は
Not found column _nothing in blockという例外がスローされることがありました。#12298 を修正。#15756(Anton Popov)。 max_replicated_logs_to_keep設定のデフォルト値が低すぎる問題を修正しました。この問題は、レプリカが頻繁に失われる原因となっていました。最も新しいレプリカをクローン元として選択することで、失われたレプリカの復旧プロセスを改善しました。また、失われたレプリカから古いパーツを削除せず、代わりにデタッチするようにしました。 #15701 (tavplubix)。Bufferテーブルから読み込む際に、宛先テーブルとは異なる構造を持つ場合に発生していたCannot add simple transform to empty Pipeエラーを修正しました。これは、クエリに対して宛先テーブルが空の結果を返した場合に発生する可能性がありました。#15529 を修正します。#15662(Nikolai Kochetov)。- S3 テーブル関数におけるグロブパターンのバグを修正しました。URL から取得したリージョンが S3 クライアントの設定に反映されていませんでした。 #15646 (Vladimir Chebotarev).
- 読み取り専用テーブルをデタッチする際に
ReadonlyReplicaメトリクスをデクリメントします。これにより #15598 が修正されました。 #15592 (sundyli). - 単一のパラメータのみが ReplicatedMergeTree に渡された場合は、これを無視せずにエラーをスローするようにしました。 #15516 (nvartolomei).
改善
- クラスター設定における
<internal_replication>の設定に関係なく、ALTER ... ON CLUSTERクエリを実行できるようになりました。 #16075 (alesapin). - テーブル作成時に、
ReplicatedMergeTreeの引数内にある{database}、{table}、{uuid}マクロが展開されるようになりました。 #16160 (tavplubix).
ClickHouse リリース v20.9.3.45-stable (2020-10-09)
バグ修正
MVのクエリにARRAY JOINが含まれている場合に、MATERIALIZED VIEWへの挿入時に発生する可能性があるCannot find columnエラーを修正。 #15717 (Nikolai Kochetov).- AMQP-CPP のレースコンディションを修正。 #15667 (alesapin).
- クエリプランの
ReadFromStorageステップにおけるリソースの破棄順序を修正しました。まれなケースでクラッシュが発生する可能性がありました。#15610 に関連している可能性があります。#15645(Nikolai Kochetov)。 JSON*関数の結果をVALUES、LIMIT、またはIN演算子の右辺で使用した際に発生するElement ... is not a constant expressionエラーを修正しました。 #15589 (tavplubix).- エラーメッセージ
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system callが発生する可能性を防止します。これにより #15541 が修正されます。#15557(alexey-milovidov)。 - AggregatingInOrderTransform/optimize_aggregation_in_order でのメモリ使用量を大幅に削減。 #15543 (Azat Khuzhin).
MOVEやREPLACE PARTITIONの後に存在しないパーツを待ち続けて Mutation がハングすることがあり、まれなケースとしてはDETACHやDROP PARTITIONの後にも発生する可能性がありました。これは修正されました。 #15537 (tavplubix).LIKEで同じパターンを実行した後に、ILIKE演算子が大文字小文字を区別しないはずの動作をしなくなるバグを修正。 #15536 (alesapin).- データに存在しない列を選択した際に、それが同様にデータに存在しない他の列に依存していると発生していた
Missing columnsエラーを修正しました。#15530 を修正。#15532(alesapin)。 - DDLWorker におけるイベントサブスクリプションの不具合を修正しました。この不具合により、まれに
ON CLUSTERでクエリがハングすることがありました。#13450 で導入されたものです。#15477(alesapin)。 boundingRatio集約関数の第 2 引数の型が誤っている場合に、適切なエラーメッセージを返すようにしました。#15407 (detailyang).SELECT toStartOfDay(today())のようなクエリが、空の time_zone 引数に関するエラーで失敗していたバグを修正。#15319 (Bharat Nallan)。- MergeTree テーブルのリネームおよびバックグラウンドでのクリーンアップ時に発生するレースコンディションを修正。 #15304 (alesapin).
system.logsが有効な場合のサーバー起動時に、まれに発生するレースコンディションを修正しました。 #15300 (alesapin)- QueryLog の MSan レポートを修正。初期化されていないメモリが
memory_usageフィールドに使用される可能性がありました。 #15258 (alexey-milovidov). - LowCardinality 型と共に joinGet を使用した際にインスタンスがクラッシュする不具合を修正しました。これにより #15214 が解決されました。 #15220 (Amos Bird)。
- テーブルエンジン
Bufferにおいて、ALTERクエリ実行後に新しい構造(スキーマ)のデータをBufferに挿入できなくなるバグを修正しました。 #15117 を修正。 #15192(alesapin)。 - MySQL の列定義パケット内の decimals フィールドのサイズを調整。 #15152 (maqroll)。
- macOS 上の Docker で clickhouse-server を実行している場合に、Atomic データベースで DDL クエリを実行すると発生していた
Cannot rename ... errno: 22, strerror: Invalid argumentエラーを修正しました。 #15024 (tavplubix)。 - サブクエリに finalizeAggregation 関数が含まれている場合に predicate push down が機能するように修正。#14847 を解決。 #14937(filimonov)。
from_zkインクルードオプションを使用して設定ファイルを ZK から取得する必要がある場合に、ZooKeeper との通信中にサーバーが起動時にハングしてしまうことがある問題を修正しました。これにより #14814 が修正されます。#14843(Alexander Kuzmenkov)。
改良
ClickHouse リリース v20.9.2.20, 2020-09-22
後方互換性のない変更
- 20.5 より古いバージョンからアップグレードする際にローリングアップデートを実行し、クラスタに 20.5 以上と 20.5 未満のバージョンが混在している場合、古いバージョンの ClickHouse ノードを再起動すると、より新しいバージョンが存在する状態で古いバージョンが起動し、
Part ... intersects previous partエラーが発生する可能性があります。このエラーを防ぐには、まずクラスタ内のすべてのノードに新しい clickhouse-server パッケージをインストールしてから再起動を行ってください(つまり、clickhouse-server を再起動するときには、新しいバージョンで起動するようにします)
新機能
- カラムトランスフォーマー
EXCEPT、REPLACE、APPLYを追加しました。これらは選択したカラムのリスト(*またはCOLUMNS(...)の後)に適用できます。例えば、SELECT * EXCEPT(URL) REPLACE(number + 1 AS number)のように記述できます。別の例として、すべての文字列カラムの最大長を求めるためにselect * apply(length) apply(max) from wide_string_tableと書くことができます。 #14233 (Amos Bird) - 順位相関係数を計算する集約関数
rankCorrを追加しました。 #11769 (antikvist) #14411 (Nikita Mikhaylov) - サブクエリをテーブルオブジェクトに変換するテーブル関数
viewを追加しました。これによりクエリを受け渡しやすくなります。例えば、remote/cluster テーブル関数で使用することができます。 #12567 (Amos Bird)
バグ修正
ALTER UPDATEのミューテーションで、代入式にNullableカラムと定数値(UPDATE x = 42のようなもの)が含まれている場合に、カラムに誤った値が入ったりセグメンテーションフォルトが発生したりする不具合を修正しました。#13634、#14045 を解決しています。#14646(alesapin)。- 結果列の Decimal スケールが誤っていたために発生していた、Decimal 乗算結果の誤りを修正。 #14603 (Artem Zuikov).
Nullableカラムの誤ったソート順を修正しました。これにより、#14344 の問題が解決されています。 #14495 (Nikita Mikhaylov)。- インデックス解析時に、より短い長さの文字列と比較された場合の
FixedString型の主キーとの一貫性のない比較を修正しました。これにより #14908 が解決されました。 #15033(Amos Bird)。 - 単一のパーツのみを持つパーティションを含むテーブルで、マージの割り当てが誤って行われる不具合を修正しました。 #14444 (alesapin).
- 関数
barが細工された特定の引数で呼び出された場合、バッファオーバーフローが発生する可能性がありました。これにより #13926 が解決されました。 #15028 (alexey-milovidov)。 - 論理コアごとの CPU 周波数を
system.asynchronous_metricsで公開するようにしました。これにより #14923 を修正しました。 #14924(Alexander Kuzmenkov)。 MaterializeMySQLデータベースエンジン使用時に発生していた.metadata.tmp File existsエラーを修正しました。 #14898 (Winter Zhang).extractAllGroups関数の一部の呼び出しで「Memory limit exceeded」エラーが発生することがある不具合を修正しました。これにより #13383 の問題が解決されます。 #14889 (alexey-milovidov)。- StorageFile(fd) への INSERT 試行時に発生する SIGSEGV を修正。 #14887 (Azat Khuzhin).
SELECTクエリにおいて、対象カラムにDEFAULT式が設定されており、その式が依存する別のカラムにもDEFAULTが設定されているものの、そのカラムがSELECT句に含まれずディスク上にも存在しない場合に、まれに発生するエラーを修正しました。#14531 の一部を修正します。#14845(alesapin)。- 符号付き型に対する縮小方向の
Int -> Intキャストにおける単調性検出の誤りを修正しました。この不具合により、クエリ結果が誤ったものになる可能性がありました。このバグは #14513 で顕在化し、#14783(Amos Bird)で修正されました。 ALTER ... MODIFY QUERYを実行する際に、マテリアライズドビューのメタデータにデフォルトのデータベース名が設定されない問題を修正しました。 #14664 (tavplubix).- LowCardinality 型および Nullable 型が関係する場合に、
has関数が誤った結果を返す可能性がある問題を修正。 #14591 (Mike)。 - ReplicatedMergeTree エンジンを使用するテーブルに対する CREATE クエリ実行中に ZooKeeper 例外が発生した場合に、データディレクトリをクリーンアップするようにしました。 #14563 (Bharat Nallan)。
- 非常に大きなパラメータによるオーバーフローが原因で発生する可能性があった、
-Resampleコンビネータ付き関数におけるまれなセグメンテーションフォルトを修正しました。 #14562 (Anton Popov). topK集約関数で配列サイズのオーバーフローをチェックするようにしました。このチェックがない場合、ユーザーが細工したパラメータを含むクエリを送信することでサーバーをクラッシュさせることができます。これにより #14452 がクローズされました。#14467(alexey-milovidov)。- SysVinit の restart/start/stop/reload を、使用されている場合は systemd にプロキシするようにしました。 #14460 (Azat Khuzhin).
PipelineExecutor自体で例外が発生した場合はクエリの実行を停止するようにしました。これにより、まれに発生する可能性のあるクエリのハングアップを防止できます。 #14334 #14402 (Nikolai Kochetov).AS table_functionとして作成されたテーブルに対するALTERクエリの実行時に発生するクラッシュを修正しました。#14212 を修正します。#14326(alesapin)。REFRESHコマンドを伴うALTER LIVE VIEWクエリ実行時に発生する例外を修正しました。LIVE VIEWは実験的な機能です。 #14320 (Bharat Nallan)。- ネストしたインタープリタを使用するクエリに対して、EXPLAIN PIPELINE graph=1 用の QueryPlan のライフタイムを修正しました。 #14315 (Azat Khuzhin).
- SSD キャッシュを使用する複合キー外部辞書でのタプルサイズの検査を改善しました。これにより #13981 が修正されました。#14313(alexey-milovidov)。
ALIASカラム型でのCODECの使用を禁止しました。#13911 を修正しました。#14263(Bharat Nallan)。- グローバルレベル以外で実行された場合の
GRANT ALLステートメントの動作を修正。 #13987 (Vitaly Baranov). - lambda 内での arrayJoin() のキャプチャを修正しました(論理エラーを示すメッセージ付きの例外がスローされていた問題)。 #13792 (Azat Khuzhin).
実験的機能
- 指定された SELECT クエリに基づいてランダムなデータベースを生成する
db-generatorツールを追加しました。ユーザーからのバグレポートが不完全な場合でも、問題の再現を容易にします。 #14442 (Nikita Mikhaylov) #10973 (ZeDRoman)。
改良
Distributedストレージでマルチボリュームストレージ構成を利用できるようにしました。 #14839 (Pavel Kovalenko)。toStartOf*系の関数でtime_zone引数を空にすることを禁止しました。 #14509 (Bharat Nallan)。- MySQL ハンドラが
SET @@var = valueのようなクエリに対してOKを返すようになりました。このステートメントは無視されます。これは、一部の MySQL ドライバがハンドシェイク後の初期設定としてSET @@クエリを送信するために必要です。https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422 #14469 (BohuTANG)。 - 以前にマテリアライズされていなかった TTL が、マージの際に適用されるようになりました。 #14438 (alesapin)。
clickhouse-obfuscatorが、#13163 で提案されていたとおり UUID 型をサポートするようになりました。 #14409 (dimarub2000)。- #11384 で提案されていた新しい設定
system_events_show_zero_valuesを追加しました。 #14404 (dimarub2000)。 MaterializeMySQLで主キーを暗黙的に NOT NULL に変換するようにしました(MySQLと同様)。#14114 を修正しました。 #14397 (Winter Zhang)。- Boost multiprecision のワイド整数(256 ビット)を、https://github.com/cerevra/int の実装に置き換えました。256 ビット整数は実験的機能です。 #14229 (Artem Zuikov)。
system.part_log内のパーツに対して、default_compression_codecという名前のデフォルト圧縮コーデックを追加しました。 #14116 (alesapin)。DateTime型に精度引数を追加しました。これにより、DateTime64の代わりにDateTimeという名前を使用できます。 #13761 (Winter Zhang)。Redis外部ディクショナリ向けにrequirepass認証を追加しました。 #13688 (Ivan Torgashov)。RabbitMQエンジンを改良しました。接続およびチャネル障害のハンドリング、適切なコミットと挿入失敗時の処理、より良いエクスチェンジ、キューの永続化と再開機能、新しいキュー設定を追加しました。テストも修正しました。 #12761 (Kseniia Sumarokova)。- コンパクトパーツでカスタムコーデックをサポートしました。 #12183 (Anton Popov)。
パフォーマンスの改善
optimize_skip_unused_shardsおよびoptimize_distributed_group_by_sharding_key有効時に、GROUP BY sharding_keyを伴う分散クエリに対して LIMIT / LIMIT BY / ORDER BY を用いてクエリを最適化。 #10373 (Azat Khuzhin)。- 複数の
JOINおよびINに対してセットを並列に作成。複数の異なるIN subquery式を含むクエリのパフォーマンスがわずかに向上する可能性があります。 #14412 (Nikolai Kochetov)。 - 各コンシューマーに対して独立したスレッドを提供することで Kafka エンジンのパフォーマンスを向上。ストリーミングエンジン(Kafka など)用に専用のスレッドプールを追加。 #13939 (fastio)。
ビルド/テスト/パッケージングの改善
Functionsからデバッグ情報を削除してデバッグビルドのバイナリサイズを削減。これは、非常に古いリンカを使用している Yandex 内部の 1 つのプロジェクトにのみ必要です。 #14549 (alexey-milovidov)。- clang 11 でのビルドに向けた準備。 #14455 (alexey-milovidov)。
- バックポートスクリプトのロジックを修正。以前のバージョンでは、色が 100% 赤の任意のラベルに対してトリガーされており、これは奇妙な動作でした。 #14433 (alexey-milovidov)。
- 統合テストでデフォルトのベースコンフィグを使用。例えばすべての設定変更は、
main_configs、user_configs、dictionariesパラメーターによって明示的に指定されます。 #13647 (Ilya Yatsishin)。
ClickHouse リリース 20.8
ClickHouse リリース v20.8.12.2-lts, 2021-01-16
バグ修正
- 単項関数および Nullable 型を伴う
Ifコンビネータを修正しました。 #18806 (Azat Khuzhin). - wide パーツから compact パーツへのマージを制限しました。vertical マージの場合、結果パーツが破損する可能性がありました。 #18381 (Anton Popov).
ClickHouse リリース v20.8.11.17-lts, 2020-12-25
バグ修正
- マージ中の AIO(非同期 I/O)を用いた書き込みを無効化しました。これは、マージ中にプライマリキー列のごくまれなデータ破損を引き起こす可能性があるためです。 #18481 (alesapin).
Nullable(String)型の引数でtoType(...)関数(toDate、toUInt32など)を実行した際に発生するvalue is too shortエラーを修正しました。これらの関数は、例外をスローする代わりに、パースエラー時にNULLを返すようになりました。 #7673 を修正。 #18445 (tavplubix).- 2 段階集約を使用している際に、コンビネータ
Distinctを用いた集約関数で発生しうるクラッシュを修正しました。 #17682 を修正。 #18365 (Anton Popov).
ClickHouse リリース v20.8.10.13-lts, 2020-12-24
バグ修正
logger.sizeパラメータに 2^32 より大きい数値を指定してサーバーログのローテーションを設定した場合、ログが正しくローテーションされていませんでした。 #17905 (Alexander Kuzmenkov).- MergeTreeWriterSettings における
max_compress_block_sizeをmin_compress_block_sizeで誤って初期化していた問題を修正しました。 #17833 (flynn)。 - ClickHouse が MySQL サーバーへの接続を再開できなくなる問題を修正しました。 #17681 (Alexander Kazakov).
- 対応するミューテーションが別のレプリカ上で強制終了された場合に
ALTERクエリがハングする問題を修正しました。これにより #16953 が解決されました。 #17499 (alesapin). - ClickHouse で mark キャッシュサイズが過小に見積もられてしまう不具合を修正しました。これは、多数の小さなファイルに marks が存在する場合に発生することがあります。 #17496 (alesapin)。
optimize_redundant_functions_in_order_by設定有効時のORDER BYの動作を修正しました。 #17471 (Anton Popov).ColumnConstの比較でクラッシュが発生する問題を修正しました。これにより #17088 が修正されました。 #17135 (Amos Bird)。ON CLUSTERクエリがリーダーではない ReplicatedMergeTree テーブルに対して無期限にハングする可能性があるバグを修正しました。 #17089 (alesapin).LIMITを含むクエリのように、実行中にキャンセルされる可能性があるリモートクエリで、不要なネットワークエラーが発生しないようにしました。 #17006 (Azat Khuzhin).- エラー発生時には
format_avro_schema_registry_urlの IP アドレスを再解決するようにしました。#16985(filimonov)。 ALTER TABLE ... MODIFY COLUMN ... NewTypeの実行中に、SELECTが変更中のカラムに対するWHERE句を持ち、ALTERがまだ完了していない場合にサーバーがクラッシュする可能性があった問題を修正しました。 #16968 (Amos Bird).- インストールスクリプトは常に設定フォルダー内にサブディレクトリを作成するようになりました。これはカスタム設定を用いた Docker ビルドの場合にのみ関係します。 #16936 (filimonov).
ORDER BYを含むクエリでIllegal type of argumentエラーが発生する可能性があった問題を修正しました。#16580 を解決。#16928(Nikolai Kochetov)。- WriteBufferFromS3 へのデータ書き込みがなかった場合、マルチパートアップロードを中止するようにしました。#16840 (Pavel Kovalenko).
- 引数なしで
anyを使用した場合にクラッシュする問題を修正しました。これにより #16803 が解決されました。 #16826 (Amos Bird)。 - 複数列およびタプルに対する
IN演算子が、transform_null_in設定が有効な場合でも正しく動作するように修正しました。 #15310 を修正。 #16722(Anton Popov)。 max_threads > 0かつ ORDER BY 句に式が含まれる場合におけるoptimize_read_in_order/optimize_aggregation_in_orderの不整合な挙動を修正しました。 #16637 (Azat Khuzhin).- クエリに
ARRAY JOINが含まれている場合に、クエリ最適化によって誤った結果が生成される問題を修正しました。 #17887 (sundyli). - 例外が発生した場合、クエリの終了がより速くなります。例外発生時には、リモートレプリカ上での実行をキャンセルします。 #15578 (Azat Khuzhin).
ClickHouse release v20.8.6.6-lts, 2020-11-13
バグ修正
- クエリプロファイラが有効で、かつ一部の関数で非同期アンワインドテーブルが(おそらく)壊れている
glibcバージョンの OS 上に ClickHouse がインストールされている場合に、まれに発生するサイレントクラッシュを修正しました。これにより #15301 と #13098 が解決されます。#16846(alexey-milovidov)。 - 入力から AVRO をパースする際に、型から LowCardinality を取り除くようにしました。#16188 を修正します。#16521(Mike)。
- MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine の構成で、MySQL Slave 側で
slave_parallel_workerが有効な場合に、GTID セットを適切に縮小することでメタデータが急速に増大する問題を修正しました。これにより #15951 が解決されます。#16504(TCeason)。 - Distributed テーブルに対する DROP TABLE(INSERT との競合)を修正しました。#16409(Azat Khuzhin)。
- レプリケーションキュー内の非常に大きなエントリの処理を修正しました。非常に大きなエントリは、テーブル構造が極端に大きい(約 1 MB)場合の ALTER クエリで現れる可能性があります。これにより #16307 が解決されます。#16332(alexey-milovidov)。
- フィルタリング用の
setが作成されなかったために、返されるデータの一部がドロップされてしまう可能性があった、一貫性のない動作を修正しました。#16308(Nikita Mikhaylov)。 - MySQL データベースに関するバグを修正しました。データベースエンジンとして使用している MySQL サーバーがダウンしているとき、一部のクエリが、不要であるにもかかわらず停止したサーバーからテーブルを取得しようとして例外を発生させていました。例えば、クエリ
SELECT ... FROM system.partsは MergeTree テーブルのみに対して動作すべきであり、MySQL データベースには一切アクセスすべきではありません。#16032(Kruglov Pavel)。
ClickHouse release v20.8.5.45-lts, 2020-10-29
バグ修正
- 関数
dictGet内で、例外発生時に二重解放が発生する不具合を修正しました。これは、辞書のロード時にエラーが発生した場合に起こり得ました。 #16429 (Nikolai Kochetov)。 - group by で使用する totals/rollup/cube 修飾子および group by キーに対する min/max 関数に関する不具合を修正。#16393 を解決。#16397(Anton Popov)。
- prefer_localhost_replica=0 および internal_replication を使用している場合の非同期 Distributed INSERT を修正。 #16358 (Azat Khuzhin).
TwoLevelStringHashTable実装の不具合が原因で、文字列キーを用いたGROUP BY中に発生する可能性があったメモリリークを修正しました。 #16264 (Amos Bird).- メモリが上限に関係なく過剰に割り当てられてしまう場合の不具合を修正しました。これにより #14560 がクローズされました。 #16206 (alexey-milovidov).
ReplicatedVersionedCollapsingMergeTreeに対するALTER MODIFY ... ORDER BYクエリがハングする問題を修正しました。これにより #15980 が解決しました。 #16011 (alesapin)。- 照合順序名と文字セット名のパーサーを修正し、文字列型における
length = 0をサポートしました。 #16008 (Winter Zhang). - 複雑なキーを持つ辞書で direct レイアウトを使用できるようになりました。 #16007 (Anton Popov).
- 一定期間非アクティブだった後にレプリケーションエラーが発生した際に、レプリカが5〜10分間ハングするのを防止。#15987 (filimonov).
- Atomic データベースエンジンにおいて、MaterializedView への挿入または MaterializedView からの SELECT 実行中に、ターゲットテーブルを同時に DROP した場合にまれに発生するセグメンテーションフォルトを修正。 #15984 (tavplubix).
- 設定プロファイルの構文解析におけるあいまいさを修正しました。
CREATE USER ... SETTINGS profile readonlyは、readonly 制約付きの設定profileを使用するのではなく、readonlyという名前のプロファイルを使用しているものとして解釈されるようになりました。これにより #15628 が修正されました。#15982 (Vitaly Baranov)。 - データベース作成に失敗した際に発生するクラッシュを修正。 #15954 (Winter Zhang).
- Atomic データベースエンジン使用時に、テーブルが同時にリネームされている場合に発生していた、
DROP TABLE IF EXISTSがTable ... does not existエラーで失敗する問題を修正しました。複数テーブルに対する一部の DDL クエリ(DROP DATABASEやRENAME TABLEなど)を同時実行した際に、まれに発生していたデッドロックを修正しました。同時にDROP/DETACH TABLEを実行している場合に、DROP/DETACH DATABASEがTable ... does not existエラーで失敗する問題を修正しました。#15934 (tavplubix). WHERE、PREWHERE、GLOBAL INを含むクエリをDistributedテーブルに対して実行した場合に、誤って空の結果が返される問題を修正。#15792 を修正。#15933(Nikolai Kochetov)。- RBAC におけるデッドロックが発生する可能性を修正。 #15875 (Vitaly Baranov).
ALTER MODIFY COLUMNクエリ実行後に実行されたSELECT ... ORDER BY DESCクエリで発生していたBlock structure mismatch例外を修正しました。これにより #15800 が修正されています。#15852(alesapin)。- 仮想カラムのみを選択する一部のクエリを修正しました。以前は
Not found column _nothing in blockという例外がスローされることがありました。#12298 を修正しました。#15756(Anton Popov)。 MV用クエリにARRAY JOINが含まれている場合に、MATERIALIZED VIEWへの挿入時に発生することがあるCannot find columnエラーを修正。 #15717 (Nikolai Kochetov).max_replicated_logs_to_keep設定のデフォルト値が低すぎる問題を修正しました。これにより、レプリカが頻繁に失われてしまう原因となっていました。最も新しい状態のレプリカをクローン元として選択することで、失われたレプリカの復旧プロセスを改善しました。また、失われたレプリカから古いパーツを削除せず、代わりに切り離すようにしました。 #15701 (tavplubix).Bufferテーブルから読み込む際に、宛先テーブルと異なる構造を持っている場合に発生していたエラーCannot add simple transform to empty Pipeを修正しました。これは、クエリに対して宛先テーブルが空の結果を返した場合に発生する可能性がありました。これにより #15529 が修正されています。 #15662(Nikolai Kochetov)。- S3 テーブル関数における glob パターンのバグを修正しました。URL から取得した region が S3 クライアントの設定に適用されていませんでした。 #15646 (Vladimir Chebotarev).
- 読み取り専用テーブルをデタッチする際に
ReadonlyReplicaメトリクスをデクリメントするようにしました。これにより #15598 が修正されました。 #15592 (sundyli)。 - ReplicatedMergeTree に 1 つのパラメータが渡された場合に、それを無視するのではなくエラーをスローするようにしました。 #15516 (nvartolomei).
改良
- クラスター構成での
<internal_replication>の設定値に関係なく、ALTER ... ON CLUSTERクエリを実行できるようになりました。 #16075 (alesapin). - テーブル作成時に、
ReplicatedMergeTreeの引数内の{database}、{table}、{uuid}マクロが展開されるようになりました。 #16159 (tavplubix).
ClickHouse リリース v20.8.4.11-lts, 2020-10-09
バグ修正
- クエリプランの
ReadFromStorageステップにおけるリソースの破棄順序を修正しました。まれなケースでクラッシュの原因となる可能性がありました。#15610 に関連している可能性があります。#15645(Nikolai Kochetov)。 VALUES句、LIMIT句、またはIN演算子の右辺でJSON*関数の結果を使用したときに発生していたElement ... is not a constant expressionエラーを修正しました。 #15589 (tavplubix)。- エラーメッセージ
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system callが発生する可能性を防ぎました。これにより #15541 が修正されます。 #15557(alexey-milovidov)。 - AggregatingInOrderTransform/optimize_aggregation_in_order でのメモリ使用量を大幅に削減しました。 #15543 (Azat Khuzhin).
MOVEやREPLACE PARTITIONの後に、存在しないパーツを待ち続けて Mutation がハングしてしまうことがあり、まれにDETACHやDROP PARTITIONの後にも発生する場合がありました。これは修正されました。 #15537 (tavplubix).- 同じパターンの
LIKEを実行すると、ILIKE演算子が大文字小文字を区別しない動作をしなくなってしまう不具合を修正。 #15536 (alesapin). - データに存在しない列を選択した際に、その列が同じくデータに存在しない他の列に依存している場合に発生していた
Missing columnsエラーを修正しました。#15530 を修正。#15532(alesapin)。 - DDLWorker におけるイベントサブスクリプションのバグを修正しました。このバグにより、まれに
ON CLUSTERでクエリがハングする可能性がありました。 #13450 で導入された問題です。 #15477 (alesapin)。 boundingRatio集約関数の第 2 引数の型が誤っている場合に、適切なエラーを報告するようにしました。#15407 (detailyang)。- MergeTree テーブルのリネームおよびバックグラウンドクリーンアップ中の競合状態を修正。 #15304 (alesapin).
- system.logs が有効な場合にサーバー起動時にまれに発生するレースコンディションを修正。#15300 (alesapin)。
- QueryLog における MSan のレポートを修正。フィールド
memory_usageに未初期化メモリが使用される可能性がありました。 #15258 (alexey-milovidov). - LowCardinality 型で
joinGetを使用した際に発生するインスタンスのクラッシュの問題を修正しました。これにより #15214 が修正されました。#15220(Amos Bird)。 - テーブルエンジン
Bufferにおいて、ALTERクエリの後に新しい構造のデータをBufferに挿入できなくなる原因となっていたバグを修正しました。#15117 を修正。 #15192(alesapin)。 - MySQL のカラム定義パケット内の decimals フィールドのサイズを調整。 #15152 (maqroll).
- すでに String と FixedString の間ではパディング付き比較を使用しています(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333)。この PR は同じロジックをフィールドの比較にも適用し、FixedString をプライマリキーとして使用する際の扱いを正しくします。これにより #14908 が修正されます。#15033(Amos Bird)。
- 関数
barが特別に細工された引数で呼び出された場合、バッファオーバーフローが発生する可能性がありました。これにより #13926 が解決されました。#15028(alexey-milovidov)。 - macOS 上の Docker で clickhouse-server を実行している際に、Atomic データベースで DDL クエリを実行すると発生していた
Cannot rename ... errno: 22, strerror: Invalid argumentエラーを修正しました。 #15024 (tavplubix). - これで、
number_of_free_entries_in_pool_to_execute_mutationおよびnumber_of_free_entries_in_pool_to_lower_max_size_of_mergeの設定値をbackground_pool_sizeと同じ値に設定できるようになりました。 #14975 (alesapin). - サブクエリに finalizeAggregation 関数が含まれている場合でも述語プッシュダウンが機能するように修正。 #14847 を修正。 #14937(filimonov)。
- 論理コアごとの CPU 周波数を
system.asynchronous_metricsで公開するようにしました。これにより #14923 の問題を修正しました。#14924(Alexander Kuzmenkov)。 MaterializeMySQLデータベースエンジン使用時に発生していた.metadata.tmp File existsエラーを修正しました。 #14898 (Winter Zhang)。- サーバーが起動時に ZooKeeper との通信中にハングしてしまう可能性がある問題を修正しました。これは、
from_zkインクルードオプションを使用して ZK から設定ファイルを取得する必要がある場合に発生していました。これにより、#14814 が修正されました。#14843(Alexander Kuzmenkov)。 - 符号付き型に対する縮小
Int -> Intキャストの単調性検出の誤りを修正しました。この不具合により、クエリ結果が不正になる可能性がありました。このバグは #14513 で表面化しました。#14783(Amos Bird)。 Nullable列の誤ったソート順を修正しました。この変更により #14344 が解決されました。 #14495 (Nikita Mikhaylov)。
改良
ClickHouse リリース v20.8.3.18-stable, 2020-09-18
バグ修正
extractAllGroups関数の一部の呼び出しで「Memory limit exceeded」エラーが発生することがある問題を修正しました。これにより #13383 が修正されます。#14889(alexey-milovidov)。- StorageFile(fd) に対して INSERT を試みた際に発生する SIGSEGV を修正しました。#14887(Azat Khuzhin)。
SELECTクエリにおいて、対象の列が、別のDEFAULTを持つ列に依存するDEFAULT式を持っており、その列がSELECTクエリに含まれておらず、かつディスク上にも存在しない場合に発生する、まれなエラーを修正しました。#14531 を部分的に修正します。#14845(alesapin)。ALTER ... MODIFY QUERYを実行する際に、マテリアライズドビューのメタデータにデフォルトのデータベース名が含まれていなかった問題を修正しました。#14664(tavplubix)。ALTER UPDATEのミューテーションで、代入式に Nullable 列と定数値(UPDATE x = 42など)が含まれる場合に、列に不正な値が入る、またはセグフォが発生するバグを修正しました。#13634、#14045 を修正します。#14646(alesapin)。- 結果列の Decimal のスケールが誤っていたために、Decimal の乗算結果が間違っていた問題を修正しました。#14603(Artem Zuikov)。
lc->isNullable()もls->getDictionaryPtr()->isNullable()も正しい結果を返さないため、チェッカーを追加しました。#14591(myrrc)。- StorageReplicatedMergeTree エンジンでの
CreateQuery実行中に ZooKeeper 例外が発生した場合に、データディレクトリをクリーンアップするようにしました。#14563(Bharat Nallan)。 - 非常に大きなパラメータによるオーバーフローの結果として発生しうる、combinator -Resample を持つ関数でのまれなセグフォを修正しました。#14562(Anton Popov)。
改良
- 進行中の S3 リクエストがある場合のサーバーシャットダウン処理を高速化しました。#14858(Pavel Kovalenko)。
- Storage Distributed でマルチボリュームストレージ構成を使用できるようにしました。#14839(Pavel Kovalenko)。
- 進行中の S3 リクエストがある場合のサーバーシャットダウン処理を高速化しました。#14496(Pavel Kovalenko)。
- コンパクトパーツでカスタムコーデックをサポートしました。#12183(Anton Popov)。
ClickHouse リリース v20.8.2.3-stable, 2020-09-08
後方互換性のない変更
- 現在、
OPTIMIZE FINALクエリは、TTL が作成される前に追加されたパーツについて TTL を再計算しません。これらを一度計算するにはALTER TABLE ... MATERIALIZE TTLを使用してください。その後はOPTIMIZE FINALが TTL を正しく評価します。この動作はレプリケートされたテーブルではこれまで機能していませんでした。#14220 (alesapin). parallel_distributed_insert_select設定を拡張し、ローカルテーブルへのINSERTを実行するオプションを追加しました。この設定の型はBoolからUInt64に変更されたため、falseおよびtrueの値はサポートされなくなりました。サーバー設定にこれらの値が含まれている場合、サーバーは起動しません。それぞれ0および1に置き換えてください。#14060 (Azat Khuzhin).ODBCDriver入出力フォーマットのサポートを削除しました。これは、かつて ClickHouse ODBC ドライバーとの通信に使用されていた非推奨フォーマットであり、現在はODBCDriver2フォーマットによって完全に置き換えられています。#13629 を解決します。#13847 (hexiaoting).- 20.5 より古いバージョンからアップグレードする際にローリングアップデートを実行していて、クラスタ内に 20.5 以上のバージョンと 20.5 未満のバージョンが混在している場合、新しいバージョンが存在する状態で古いバージョンの ClickHouse ノードを再起動すると、
Part ... intersects previous partエラーが発生する可能性があります。このエラーを防ぐには、まずクラスタ内のすべてのノードに新しい clickhouse-server パッケージをインストールしてから再起動を行ってください(つまり、clickhouse-server を再起動する際には、新しいバージョンで起動されるようにします)。
新機能
config.xmlで指定された設定に対応するカラムに対して、Default圧縮コーデックを指定できるようにしました。実装: #9074。 #14049 (alesapin)。krb5およびcyrus-saslライブラリを用いて、Kafka での Kerberos 認証をサポートしました。 #12771 (Ilya Golshtein)。- リテラル、リテラルの並び、および複雑な別名をプレースホルダーに置き換える関数
normalizeQueryを追加しました。類似したクエリに対して同一の 64bit ハッシュ値を返す関数normalizedQueryHashを追加しました。これによりクエリログの分析が容易になります。これにより #11271 がクローズされます。 #13816 (alexey-milovidov)。 time_zonesテーブルを追加しました。 #13880 (Bharat Nallan)。- 指定された型に対するデフォルト値を返す関数
defaultValueOfTypeNameを追加しました。 #13877 (hcz)。 - 整数または Decimal 型カラム内の 10 進数の桁数を数える
countDigits(x)関数を追加しました。Decimal 型カラム内の値が、その(または指定された)精度を超えているかどうかをチェックするisDecimalOverflow(d, [p])関数を追加しました。 #14151 (Artem Zuikov)。 medianExactLowおよびmedianExactHighに対応する別名を持つquantileExactLowおよびquantileExactHighの実装を追加しました。 #13818 (Bharat Nallan)。- 日時値を指定した日付/時間の単位に切り詰める
date_trunc関数を追加しました。 #13888 (Vladimir Golovchenko)。 - メイン設定に新しいオプションセクション
<user_directories>を追加しました。 #13425 (Vitaly Baranov)。 - テーブルのサンプル句を変更できる
ALTER SAMPLE BYステートメントを追加しました。 #13280 (Amos Bird)。 - 関数
positionがオプション引数start_posをサポートするようになりました。 #13237 (vdimir)。
バグ修正
- インタラクティブモードのクライアントで、プログレスバーが表示中のデータを上書きしてしまう問題を修正。これにより、#12562、#13369、#13584、および #12964 が解決されます。#13691(alexey-milovidov)。
- 複数のカラムでソートする際に、
LowCardinality型カラムのソート順が誤っていた問題を修正しました。この修正は #13958 を解決します。#14223(Nikita Mikhaylov)。 topK集約関数において配列サイズのオーバーフローを検出するチェックを追加しました。このチェックがない場合、ユーザーが巧妙に調整したパラメータでクエリを送信し、サーバーがクラッシュする可能性があります。これにより #14452 が解決されました。 #14467 (alexey-milovidov)。- テーブルに単一パートのみを含むパーティションが存在する場合に、誤ったマージ割り当てが行われる可能性のあるバグを修正。 #14444 (alesapin).
PipelineExecutor自体で例外が発生した場合にクエリ実行を停止します。これにより、まれに発生しうるクエリのハングアップを防ぐことができます。#14334 の継続対応です。#14402 #14334 (Nikolai Kochetov)。AS table_functionで作成されたテーブルに対するALTERクエリで発生していたクラッシュを修正。#14212 を修正。#14326(alesapin)。- REFRESH コマンドを使用した
ALTER LIVE VIEWクエリの実行中に発生していた例外の問題を修正。Live View は実験的な機能です。 #14320 (Bharat Nallan). - ネストしたインタプリタを使用するクエリに対して、EXPLAIN PIPELINE graph=1 用の QueryPlan のライフタイムを修正。 #14315 (Azat Khuzhin).
- 一部の外部ソースからスキーマを取得する際に発生していた
clickhouse-odbc-bridgeのセグメンテーションフォールトを修正しました。このPRは #13861 を解決します。#14267(Vitaly Baranov)。 - #12277 で導入されたマーク包含検索で発生するクラッシュを修正。#14225(Amos Bird)。
- 名前付きタプルを含むテーブルの作成を修正。これにより #13027 が解決されます。#14143(alexey-milovidov)。
- 最小の負の10進数値に対するフォーマット処理を修正しました。これにより #14111 が修正されました。#14119(Alexander Kuzmenkov)。
- 本来ゼロになってはならないのにゼロにされていた
DistributedFilesToInsertメトリクスを修正。 #14095 (Azat Khuzhin). - const 2次元配列をポリゴンとして使用した場合の
pointInPolygonを修正。 #14079 (Alexey Ilyukhov). Poco::Exception: no space left on deviceの追加情報に含まれていた誤ったマウントポイントを修正しました。 #14050 (tavplubix).- グローバルレベル以外で実行された場合の
GRANT ALLステートメントの挙動を修正。 #13987 (Vitaly Baranov). - engine 付きの CREATE TABLE AS table function を拒否するようにパーサーを修正。 #13940 (hcz)。
optimize_duplicate_order_by_and_distinct設定が有効な場合に、DISTINCTキーワードを使用する SELECT クエリおよび UNION ALL を含む副問い合わせで誤った結果が返される問題を修正しました。 #13925 (Artem Zuikov).Distributedテーブルのリネーム時にデッドロックが発生する可能性のあった問題を修正しました。 #13922 (tavplubix).- 複数列でソートする際に
FixedString列で発生していた誤ったソート順を修正しました。 #13182 の不具合を解決。 #13887(Nikolai Kochetov)。 topK/topKWeightedのマージ結果が、デフォルト以外のパラメータ使用時に精度不足になる可能性がある問題を修正。 #13817 (Azat Khuzhin).- NULL と比較したときに、型が SET の INDEX を持つ MergeTree テーブルからの読み取りが失敗する問題を修正しました。これにより #13686 が解決されます。 #13793 (Amos Bird).
- lambda における
arrayJoinのキャプチャを修正 (LOGICAL_ERROR)。 #13792 (Azat Khuzhin). - 関数
rangeにステップのオーバーフロー チェックを追加。#13790(Azat Khuzhin)。 DROP DATABASEとCREATE TABLEを並行して実行した際に発生するDirectory not emptyエラーを修正しました。 #13756 (alexey-milovidov).h3KRing関数に範囲チェックを追加しました。これにより #13633 を修正しました。 #13752(alexey-milovidov)。- DETACH とバックグラウンドマージの間のレースコンディションを修正しました。DETACH 後にパーツが復活してしまうことがありました。これは、問題自体は修正できていなかったものの、その問題を示すために、ごくまれなケースでのみ失敗するテストを導入した #8602 の続きです。 #13746 (alexey-milovidov)。
log_queries_min_type>QUERY_STARTの場合のSettings.Names/Valuesのログ出力を修正。 #13737 (Azat Khuzhin).- verbose=1 のときの
/replicas_statusエンドポイントのレスポンスのステータスコードを修正します。#13722 (javi santana). - ユーザーおよびグループのチェック時に
clickhouse-server.initが出力する誤ったメッセージを修正。 #13711 (ylchou). optimize_move_functions_out_of_any設定時には any(arrayJoin()) -> arrayJoin() の最適化を行わないようにしました。 #13681 (Azat Khuzhin).- StorageMerge を使用した JOIN で
set enable_optimize_predicate_expression=1を設定した場合に発生するクラッシュを修正。 #13679 (Artem Zuikov). The value of 'number_of_free_entries_in_pool_to_lower_max_size_of_merge' setting設定の値に関するエラーメッセージ内の誤記を修正しました。 #13678 (alexey-milovidov).- 同時実行される
ALTER ... REPLACE/MOVE PARTITION ...クエリによってデッドロックが発生する可能性がありましたが、修正されました。#13626 (tavplubix)。 - ソースに値が存在するにもかかわらず、
cache-dictionaryが既定値を返してしまうことがある不具合を修正しました。 #13624 (Nikita Mikhaylov). - Compact parts におけるセカンダリインデックス破損の問題を修正。Compact parts は実験的な機能です。 #13538 (Anton Popov).
- 単一レプリカで実行されなければならないクエリに対して、
ON CLUSTERのタイムアウトが早期に発生してしまう問題を修正しました。#6704、#7228、#13361、#11884 を修正します。#13450(alesapin)。 - 関数
netlocの誤ったコードを修正しました。これにより #13335 を解決しました。#13446(alexey-milovidov)。 StorageMemoryにおける潜在的なレースコンディションを修正。#13416(Nikolai Kochetov)。- HTTP プロトコルの
TSV/CSVWithNamesフォーマットにおけるヘッダーの不足や過剰を修正しました。これにより #12504 が修正されました。 #13343 (Azat Khuzhin). users.xmlから行ポリシーをパースする際に、データベース名またはテーブル名にドットが含まれている場合でも正しく処理できるように修正しました。これにより #5779、#12527 が修正されました。#13199(Vitaly Baranov)。- 接続が一度切断された後でも
redisディクショナリへ正しくアクセスできるよう修正しました。これはcacheおよびdirectディクショナリレイアウトで発生する可能性があります。 #13082 (Anton Popov). - ClickHouseDictionarySource を使用してリモートテーブルをクエリする際に行われていた誤った認可チェックを削除しました。 #12756 (sundyli)。
- 一部のケースで共通部分式除去を行うため、副問い合わせを適切に区別できるようにしました。 #8333. #8367 (Amos Bird).
改良
ALIASカラム型でのCODECの使用を禁止しました。 #13911 を修正しました。 #14263(Bharat Nallan)。- 辞書の更新完了を待機する際は、ハードコードされた値ではなく、
query_wait_timeout_milliseconds設定で指定されたタイムアウトを使用するようにしました。 #14105 (Nikita Mikhaylov). index_granularity_bytesの設定値が極端に小さいテーブルを誤って作成してしまうことを防ぐため、設定min_index_granularity_bytesを追加。 #14139 (Bharat Nallan)。- 異なる ZooKeeper を使用するクラスターからパーティションを取得できるようになりました:
ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'zk-name:/path-in-zookeeper'。これは、新しいクラスターへデータを移行する際に便利です。 #14155 (Amos Bird)。 - 非常に小さいブロックが大量に存在する場合に
Memoryテーブルのパフォーマンスがわずかに向上しました(そのような状況はあまり想定されません)。このアイデアの提案者: Mark Papadakis。#14043 をクローズ。#14056(alexey-milovidov)。 - 条件付き集約関数(例えば
avgIf、sumIf、maxIf)は、一致する行がない場合にNULLを返し、引数として Nullable 型を使用するようになりました。 #13964 (Winter Zhang). - -Resample コンビネータの limit を 1M に引き上げました。 #13947 (Mikhail f. Shiryaev).
- 異常に小さく不正な形式のメッセージが受信された際に、Kafka テーブルエンジンがメッセージの処理を停止してしまう原因となっていた AvroConfluent フォーマットのエラーを修正しました。 #13941 (Gervasio Varela).
- 長いクエリに対して誤ったエラーが返される問題を修正しました。正しいクエリであっても、
Max query size exceededとは異なる構文エラーが返される場合がありました。 #13928 (Nikolai Kochetov). TabSeparatedフォーマットでの null 値に対するエラーメッセージを改善。 #13906 (jiang tao).- 配列要素の型が Float32/Float64 の場合、
arrayCompact関数は NaN をビット単位で比較するようになりました。以前のバージョンでは、配列要素の型が Float32/Float64 の場合は NaN 同士は常に等しくないと判定され、Nullable(Float64) のような、より複雑な型の場合は常に等しいと判定されていました。これにより #13857 が解決されました。 #13868(alexey-milovidov)。 lgamma関数内のデータレースを修正しました。このレースはtsanでのみ検出され、実際に副作用が発生することはありませんでした。 #13842 (Nikolai Kochetov).- 配列をフィールドとして操作する際にクエリが極端に遅くなるのを避けるため、代わりに例外をスローするようにしました。 #13753 (alexey-milovidov).
- Redis の requirepass による認証を追加しました(Redis 辞書ソース用)。 #13688 (Ivan Torgashov).
- MergeTree Write-Ahead-Log (WAL) のダンプツールを追加。WAL は実験的な機能です。 #13640 (BohuTANG)。
- 以前のバージョンでは、
lcm関数は特定のパターンの引数で呼び出されると、デバッグビルドにおいてアサーション違反を起こす可能性がありました。これにより #13368 が修正されました。#13510(alexey-milovidov)。 toDate/toDateTime関数について、より多くの場合に単調性が成り立つようにしました。単調性の情報はインデックス解析に使用されます(より複雑なクエリでもインデックスを使用できるようになります)。入力引数の飽和処理をより自然な形にし、単調性をさらに向上させました。 #13497 (Amos Bird).- カスタム設定で複合識別子をサポート。カスタム設定は、ClickHouse コードベースと他のコードベースとの統合ポイントであり(ClickHouse 自体には特に利点はない)、#13496(Vitaly Baranov)を参照。
- DiskLocal から DiskS3 へパーツを並行して移動します。
DiskS3は実験的機能です。#13459 (Pavel Kovalenko)。 - 混合粒度パーツをデフォルトで有効にしました。 #13449 (alesapin).
- S3 リダイレクトにおけるリモートホストの適切な検証(セキュリティ関連)。 #13404 (Vladimir Chebotarev).
QueryTimeMicroseconds、SelectQueryTimeMicroseconds、InsertQueryTimeMicrosecondsを system.events に追加しました。#13336(ianton-ru)。- Decimal が極端に大きな負の指数を持つ場合に発生するデバッグアサーションを修正します。#13188 を解決します。#13228(alexey-milovidov)。
- DiskS3 向けにキャッシュ層を追加しました(ローカルディスク上に mark および index ファイルをキャッシュ)。
DiskS3は実験的な機能です。 #13076 (Pavel Kovalenko). readlineが履歴をファイルにダンプするように修正。 #13600 (Amos Bird)。- デフォルトで
Atomicエンジンを使用するsystemデータベースを作成(今後、すべてのデータベースでAtomicデータベースエンジンをデフォルトにするための準備)。 #13680 (tavplubix).
パフォーマンスの改善
- 非常に短いクエリに対する
LowCardinalityの処理をわずかに最適化しました。#14129 (Anton Popov). - 設定
max_insert_threadsが指定されている場合に、テーブルエンジンNull、Memory、Distributed、Bufferでの並列 INSERT を有効化しました。#14120 (alexey-milovidov). - パーツのスキャンで
max_rows_to_read制限を超過した場合に、即座に失敗するようにしました。この変更の目的は、max_rows_to_readがすでに超過していることが明らかな場合、選択されたすべてのパーツに対する範囲スキャンをスキップすることです。この変更は、多くのパーツを対象とするクエリではかなり顕著です。#13677 (Roman Khavronenko). - UInt8/UInt16 キーによる集約のパフォーマンスをわずかに改善しました。#13099 (alexey-milovidov).
Array(LowCardinality(T))かつ右辺が定数である場合に、has()、indexOf()、countEqual()関数を最適化しました。#12550 (myrrc).- 単純な
INSERT SELECTクエリの実行時、max_threadsを 1 またはmax_insert_threadsに自動設定し、max_block_sizeをmin_insert_block_size_rowsに設定するようにしました。#5907 に関連します。#12195 (flynn).
実験的機能
- ClickHouse は MySQL レプリカとして動作できるようになりました。これは
MaterializeMySQLデータベースエンジンによって実装されています。#4006 を実装したものです。#10851 (Winter Zhang). Int128、Int256、UInt256型と、それらに関連する関数を追加しました。Decimal256(最大 76 桁の精度)によって Decimal を拡張しました。新しい型は設定allow_experimental_bigint_typesで有効化できます。この機能は現時点では非常に遅く、パフォーマンスも良くありません。実装は不完全です。この機能は使用しないでください。#13097 (Artem Zuikov).
ビルド/テスト/パッケージングの改善
clickhouse installスクリプトを追加しました。これは単一のバイナリしか手元にない場合に便利です。 #13528 (alexey-milovidov).- 設定ファイルなしで
clickhouseバイナリを実行できるようにしました。 #13515 (alexey-milovidov). codespellによるコード内のタイプミスチェックを有効にしました。#13513 #13511 (alexey-milovidov).- CI で .sh テストのリンターとして ShellCheck を有効にしました。これにより #13168 がクローズされました。#13530 #13529 (alexey-milovidov)。
- 自動再構成を行うのではなく、設定時に失敗させるための CMake オプションを追加し、これをデフォルトで有効化しました。 #13687 (Konstantin).
- 組み込み tzdata のバージョンを、
system.build_optionsでTZDATA_VERSIONとして参照できるようにした。 #13648 (filimonov). - ビルド時の
system.time_zonesテーブル生成処理を改善。#14209 をクローズ。#14215(filimonov)。 - パッケージリポジトリから入手可能な最新の tzdata を使用して ClickHouse をビルドするようにしました。 #13623 (alexey-milovidov).
- skip_list.json で JavaScript 形式のコメントを書けるようになりました。 #14159 (alesapin).
- コピー&ペーストされた GPL コードが含まれていないことを確認する。#13514(alexey-milovidov)。
- テスト用 Docker イメージの親イメージを
test-baseに変更しました。 #14167 (Ilya Yatsishin). - docker-compose クラスターの起動時にリトライロジックを追加し、COMPOSE_HTTP_TIMEOUT を延長。 #14112 (vzakaznikov).
- ストレステストで
system.text_logを有効化し、より多くのバグを検出できるようにしました。 #13855 (Nikita Mikhaylov). - Testflows の LDAP モジュール: openldap4 用に不足していた証明書と dhparam.pem を追加。#13780 (vzakaznikov).
- ZooKeeper は CI インフラストラクチャ上の単体テストでは信頼性をもって動作できません。実際の ZooKeeper と対話させる単体テストを使うのは、最初から悪い考えです(単体テストは複雑な分散システムを検証することを目的としていません)。この目的にはすでにインテグレーションテストを使用しており、そのほうが適しています。 #13745 (alexey-milovidov).
- スタイルチェック用の Docker イメージを追加しました。すべての Docker および docker-compose ファイルが
dockerディレクトリ内に配置されていることを確認するスタイルチェックを追加しました。 #13724 (Ilya Yatsishin). - Mac OS 上での Cassandra ビルドを修正。 #13708 (Ilya Yatsishin).
- 共有ビルドのリンクエラーを修正。 #13700 (Amos Bird).
- RBAC と連携して動作することを確認するために、LDAP ユーザー認証スイートを更新。 #13656 (vzakaznikov).
contrib/awsから-DENABLE_CURL_CLIENTを削除しました。 #13628 (Vladimir Chebotarev).- ClickHouse ノードのヘルスチェックのタイムアウト時間を延長し、ヘルスチェックで不健全と判定されたコンテナが見つかった場合に
docker-composeのログをダンプできるようにしました。 #13612 (vzakaznikov). - #10977 が無効な Issue であることを確認した。#13539(Amos Bird)。
- robot-clickhouse からの PR をスキップするようにしました。 #13489 (Nikita Mikhaylov).
- Dockerfile を統合テストから
docker/testディレクトリへ移動しました。docker_compose ファイルはrunnerDocker コンテナ内で利用可能です。Docker イメージは統合テストではなく CI でビルドされます。#13448 (Ilya Yatsishin).
ClickHouse リリース 20.7
ClickHouse リリース v20.7.2.30-stable, 2020-08-31
後方互換性のない変更
- 少なくとも 1 つの引数に浮動小数点数を取る関数
modulo(演算子%)は、両方の引数を整数に変換せず、浮動小数点数に対して直接、除算の余りを計算するようになります。これにより、動作がほとんどの DBMS と互換になります。これは Date および DateTime 型にも適用されます。エイリアスmodを追加しました。これにより #7323 がクローズされました。 #12585(alexey-milovidov)。 - ゼロの Date/DateTime 値を
0000-00-00および0000-00-00 00:00:00として特別に表示することを非推奨としました。 #12442(alexey-milovidov)。 - 関数
groupArrayMoving*は分散クエリで動作していませんでした。その結果は最大の型に昇格させずに計算されており、不適切なデータ型になっていました。関数groupArrayMovingAvgは、avg関数と一貫しない整数値を返していました。これにより #12568 が修正されました。 #12622(alexey-milovidov)。 - MergeTree の設定に対するサニティチェックを追加しました。設定が不正な場合、サーバーの起動やテーブルの作成を拒否し、ユーザーに対して詳細な説明を出力します。 #13153(alexey-milovidov)。
- ユーザーが
background_pool_sizeをnumber_of_free_entries_in_pool_to_execute_mutationまたはnumber_of_free_entries_in_pool_to_lower_max_size_of_mergeより小さい値に設定してしまうケースを防ぎます。これらの場合、ALTER 文が動作しないか、マージの最大サイズが過度に制限されてしまいます。その場合は、対処方法を説明する例外をスローします。これにより #10897 がクローズされました。 #12728(alexey-milovidov)。 - 20.5 より古いバージョンからアップグレードする際に、ローリングアップデートが実行され、クラスタ内に 20.5 以上と 20.5 未満の両方のバージョンが混在している場合、古いバージョンの ClickHouse ノードを再起動し、新しいバージョンが存在する状態で古いバージョンが起動されると、
Part ... intersects previous partエラーが発生する可能性があります。このエラーを防ぐために、まずすべてのクラスタノードに新しい clickhouse-server パッケージをインストールし、その後で再起動を行ってください(つまり、clickhouse-server を再起動するときには、必ず新しいバージョンで起動されるようにします)。
新機能
- 多数のポリゴン(世界地図など)からなる辞書の中で、座標からリージョンを検索する効率的な「リバースジオコーディング」ルックアップを提供するポリゴン辞書型を追加しました。CPU とメモリ使用量を低く抑えるために、再帰グリッドを用いて入念に最適化されたアルゴリズムを使用しています。 #9278 (achulkov2).
- 事前設定されたユーザー向けの LDAP 認証(「Simple Bind」方式)のサポートを追加しました。 #11234 (Denis Glazachev).
- 一部の
ALTER TABLE ... PARTITION ...クエリ(現在はATTACHとFREEZE)において、対象となったパーツに関する情報を出力する設定alter_partition_verbose_resultを導入しました。 #8076 をクローズ。 #13017 (alesapin). - ベイズ AB テスト用の
bayesAB関数を追加しました。 #12327 (achimbab). - 致命的エラーのスタックトレースが収集される
system.crash_logテーブルを追加しました。このテーブルは通常は空であることが想定されています。 #12316 (alexey-milovidov). - デフォルトのデータベースおよび出力フォーマットの設定に利用できる HTTP ヘッダー
X-ClickHouse-DatabaseとX-ClickHouse-Formatを追加しました。 #12981 (hcz). SimpleAggregateFunctionにminMapおよびmaxMap関数のサポートを追加しました。 #12662 (Ildus Kurbangaliev).- ディスク上のデータを変更する
ALTERクエリの実行を制限する設定allow_non_metadata_altersを追加しました。デフォルトでは無効です。 #11547 をクローズ。 #12635 (alesapin). - 任意の式を、指定されたフォーマットで文字列に変換するための関数
formatRowを追加しました。SQL の出力を操作する際に有用で、columns関数と組み合わせることで非常に柔軟に利用できます。 #12574 (Amos Bird). - MySQL との互換性のために
FROM_UNIXTIME関数を追加しました。12149 に関連。 #12484 (flynn). allow_nullable_keyテーブル設定が有効な場合、MergeTree テーブルにおいて Nullable 型をキーとして使用できるようにしました。 #5319 をクローズ。 #12433 (Amos Bird).- COS との統合を追加しました。 #12386 (fastio).
- キーにマップされた値を加算/減算するための
mapAddおよびmapSubtract関数を追加しました。 #11735 (Ildus Kurbangaliev).
バグ修正
- 単一レプリカで実行する必要があるクエリにおいて発生していた、早すぎる
ON CLUSTERタイムアウトを修正しました。#6704、#7228、#13361、#11884 を修正します。#13450(alesapin)。 - #12277 で導入されたマーク包含検索で発生していたクラッシュを修正。#14225(Amos Bird)。
- キャッシュレイアウトを使用する外部ディクショナリにおけるレースコンディションを修正しました。サーバーがクラッシュする原因となっていました。 #12566 (alesapin).
- インタラクティブモードのクライアントで、進行状況バーが表示中のデータを潰してしまう問題を修正します。これにより、#12562 と #13369 と #13584 および #12964 が修正されます。 #13691 (alexey-milovidov).
LowCardinalityカラムに対して複数カラムの ORDER BY を使用した際に、ソート順が誤っていた問題を修正しました。これにより #13958 が解決されました。#14223(Nikita Mikhaylov)。cache-dictionaryに対するquery_wait_timeout_milliseconds設定を誤って上書きしていたハードコードされたタイムアウトを削除しました。 #14105 (Nikita Mikhaylov).Poco::Exception: no space left on deviceの追加情報内の誤ったマウントポイントを修正しました。 #14050 (tavplubix).optimize_duplicate_order_by_and_distinct設定有効時に、サブクエリ側にもDISTINCTを含むDISTINCT付きSELECTクエリで誤ったクエリ最適化が行われていた問題を修正しました。 #13925 (Artem Zuikov).Distributedテーブルのリネーム時にデッドロックが発生しうる不具合を修正しました。 #13922 (tavplubix).- ORDER BY で複数列を使用した場合に
FixedString列の並び順が誤っていた問題を修正。#13182 を解決。#13887(Nikolai Kochetov)。 topK/topKWeighted集約(非デフォルトのパラメータ使用時)の潜在的な精度低下を修正。 #13817 (Azat Khuzhin).INDEXがSET型の MergeTree テーブルからの読み取り時に、NULLとの比較で失敗する問題を修正しました。これにより #13686 が修正されました。 #13793(Amos Bird)。- 関数
range()の step 引数のオーバーフローを修正。 #13790 (Azat Khuzhin). DROP DATABASEとCREATE TABLEを並行して実行した際に発生するDirectory not emptyエラーを修正しました。 #13756 (alexey-milovidov).h3KRing関数に範囲チェックを追加しました。これにより #13633 が修正されます。#13752(alexey-milovidov)。- DETACH とバックグラウンドマージとの間に存在していたレースコンディションを修正しました。DETACH 後にパーツが復活してしまう可能性がありました。これは #8602 の続きであり、そちらでは問題自体は解決されていませんでしたが、問題を実証するテストが導入されており、そのテストがごくまれなケースで失敗し始めていました。#13746(alexey-milovidov)。
log_queries_min_typeがQUERY_STARTより大きい場合のログの Settings.Names/Values を修正しました。 #13737 (Azat Khuzhin).- ユーザーとグループの確認時に
clickhouse-server.initが出力する誤ったメッセージを修正。#13711 (ylchou)。 optimize_move_functions_out_of_anyが有効な場合でも、any(arrayJoin())をarrayJoin()に最適化しないようにしました。 #13681 (Azat Khuzhin).- 同時実行される
ALTER ... REPLACE/MOVE PARTITION ...クエリで発生する可能性のあったデッドロックを修正しました。 #13626 (tavplubix). - cache-dictionary が、ソースに値が存在する場合でもデフォルト値を返してしまうことがあった問題を修正しました。 #13624 (Nikita Mikhaylov).
- compact parts(実験的機能)におけるセカンダリインデックスの破損を修正。 #13538 (Anton Popov).
- 関数
netloc内の不正なコードを修正しました。これにより #13335 が解決されます。#13446(alexey-milovidov)。 parseDateTimeBestEffort関数に Unix timestamp を引数として渡した場合に発生していたエラーを修正しました。これにより #13362 を修正しました。#13441(alexey-milovidov)。NULL要素を含むタプルの比較時に無効な戻り値型となっていた問題を修正。#12461 を解決。#13420(Nikolai Kochetov)。SET optimize_move_functions_out_of_any = 1とany()内のエイリアスの組み合わせによりaggregate function any(x) is found inside another aggregate function in queryエラーを引き起こしていた誤った最適化を修正しました。 #13419 (Artem Zuikov).StorageMemory内の潜在的なレースコンディションを修正。 #13416 (Nikolai Kochetov).- クエリ結果がゼロ行の場合に、
ArrowおよびParquetフォーマットで出力が空になっていた問題を修正しました。これらのフォーマットでは空の出力は無効であるためです。 #13399 (hcz). - 定数列およびプライマリキーのプレフィックスを
ORDER BY句に含む SELECT クエリを修正。 #13396 (Anton Popov). - clickhouse-local 向けの
PrettyCompactMonoBlockを修正し、PrettyCompactMonoBlockにおける extremes/totals の動作を修正。#7746 を解決。#13394(Azat Khuzhin)。 - system.text_log のデッドロックを修正しました。#12452(alexey-milovidov)。これは #12339 の一部です。この修正により #12325 が解決しました。#13386(Nikita Mikhaylov)。
File(TSVWithNames*)を修正(ヘッダーが複数回書き込まれていた)、clickhouse-local --format CSVWithNames*を修正(ヘッダーが出力されず、#12197 以降動作が壊れていた)、行数が 0 の場合のclickhouse-local --format CSVWithNames*を修正(ヘッダーが出力されない問題)。#13343(Azat Khuzhin)。- 関数
groupArrayMovingSumが空の状態をデシリアライズする際に発生していたセグメンテーションフォルトを修正。#13339 を修正。#13341(alesapin)。 JOIN ONセクション内のarrayJoin()関数でエラーを発生させるようにしました。 #13330 (Artem Zuikov).join_use_nulls=1設定時のLEFT ASOF JOINのクラッシュを修正しました。 #13291 (Artem Zuikov).- 遅延レプリカからのクエリの場合に発生する可能性がある
Totals having transform was already added to pipelineエラーを修正。#13290 (Nikolai Kochetov)。 - ユーザーが関数
h3ToChildrenに細工された特定の引数を渡した場合、サーバーがクラッシュする可能性がありました。この修正により #13275 が解消されました。 #13277(alexey-milovidov)。 NaN値を含む Float 型に対して呼び出されたuniqExact、topK、sumDistinctおよび類似の集約関数における、潜在的なパフォーマンス低下とわずかに誤った結果を修正しました。これはデバッグビルドでのアサーションもトリガーしていました。この変更により #12491 が修正されました。 #13254(alexey-milovidov)。- 主キーに単調関数を含む式があり、かつクエリに異なる型の定数との比較が含まれる場合の
KeyConditionのアサーションを修正しました。これにより #12465 が解決されます。#13251(alexey-milovidov)。 roundUpToPowerOfTwoOrZero()関数で、MSB がセットされている数値については、その値をそのまま返すようにしました。これにより、配列サイズがオーバーフローした場合に起こりうる潜在的なエラーを防ぎます。 #13234 (Azat Khuzhin).- リテラルの NULL ではない nullable な constexpr を条件として使用した
if関数の不具合を修正しました。 #12463 に対応します。 #13226(alexey-milovidov)。 - 配列要素および配列の添字がともに
Nullableの場合のarrayElement関数のassertを修正しました。これにより #12172 が解決します。 #13224 (alexey-milovidov). - 定数引数を取る DateTime64 変換関数の不具合を修正。 #13205 (Azat Khuzhin).
users.xmlから行ポリシーをパースする際、データベース名やテーブル名にドットが含まれている場合でも正しく処理できるよう修正しました。これにより #5779、#12527 が修正されます。#13199(Vitaly Baranov)。- 一度接続が切断されると
redisディクショナリにアクセスできなくなる問題を修正しました。これはcacheおよびdirectのディクショナリレイアウトで発生する可能性があります。 #13082 (Anton Popov). - 関数を使用したインデックス解析の誤りを修正しました。この不具合により、
MergeTreeテーブルからの読み取り時に一部のデータパーツがスキップされてしまう可能性がありました。#13060 を修正。#12406 を修正。#13081(Anton Popov)。 - クエリのスコープ内では決定的だが、クエリ間では決定的でない
now(),now64(),randConstant()といった関数を使用するリモートクエリで発生するCannot convert column because it is constant but values of constants are different in source and resultエラーを修正。 #11327 を解決。 #13075(Nikolai Kochetov)。 ORDER BYでタプルを使用し、小さいLIMITを指定したクエリで発生する可能性があったクラッシュを修正しました。 #12623 を修正。 #13009(Nikolai Kochetov)。UNIONとJOINを含むクエリで発生するBlock structure mismatchエラーを修正。#12602 に対応。#12989(Nikolai Kochetov)。- 1 つの時間間隔内で、有効期限が複数のパーティションに影響する場合に正しく動作していなかった
merge_with_ttl_timeoutのロジックを修正しました(@excitoon による変更)。#12982(Alexander Kazakov)。 - DDL クエリから作成された range ハッシュ辞書で列が重複する問題を修正。これにより #10605 が解決されます。 #12857(alesapin)。
- ローカルレプリカからの SELECT に対するスレッド数の不要な制限を削除しました。 #12840 (Nikolai Kochetov).
ALTER DELETEとALTER MODIFY COLUMNクエリが 1 つの mutation として同時に実行されたときに発生する、まれなバグを修正しました。このバグによりcount.txt内の行数が誤り、その結果としてパーツ内のデータも不正になる可能性がありました。また、ALTER RENAME COLUMNとALTER ADD COLUMNが同時に実行された場合に発生する小さなバグも修正しました。 #12760 (alesapin).clickhouse辞書ソースを使用してリモートテーブルをクエリする際に誤った認証情報が使用されていた問題。 #12756 (sundyli).CAST(Nullable(String), Enum())を修正しました。 #12745 (Azat Khuzhin).IN句で関数として解釈される大きなタプルを使用した場合のパフォーマンスを修正しました。ユーザーが何らかのよくわからない理由でWHERE x IN (1, 2, ...)ではなくWHERE x IN tuple(1, 2, ...)と記述してしまうケースに対応しています。 #12700 (Anton Popov).- input_format_parallel_parsing のメモリトラッキングを修正(スレッドをグループに関連付けることにより)。 #12672 (Azat Khuzhin).
any(func(<lambda>))の場合に誤った最適化optimize_move_functions_out_of_any=1が行われる問題を修正。 #12664 (Artem Zuikov).- const expression を使用する Bloom Filter インデックスの不具合を修正。#10572、#12659(Winter Zhang)。
- ブローカーが利用できない場合などに発生する StorageKafka の SIGSEGV を修正しました。 #12658 (Azat Khuzhin).
- 関数
ifにArray(UUID)引数のサポートを追加しました。これにより #11066 が修正されました。#12648(alexey-milovidov)。 CREATE USER IF NOT EXISTSは、ユーザーが既に存在している場合に例外をスローしなくなりました。これにより、#12507 が修正されました。 #12646 (Vitaly Baranov)。ALTER ... UPDATE中に、予期しないケース(例: UInt64 カラムからの減算時)で例外There is no supertype...がスローされることがありました。この問題により #7306 および #4165 が修正されました。#12633 (alexey-milovidov)。- 外部ソートを行うクエリで発生する可能性のある
Pipeline stuckエラーを修正しました。 #12617 を解決。 #12618 (Nikolai Kochetov)。 OPTIMIZE DEDUPLICATEで発生するエラーOutput of TreeExecutor is not sortedを修正。#11572 に対応。#12613(Nikolai Kochetov)。- クエリ最適化の際に関数
anyの結果につけたエイリアスが失われてしまう問題を修正しました。 #12593 (Anton Popov). - DROP TABLE 時に Distributed テーブルのデータ(非同期 INSERT のブロック)を削除するようにしました。 #12556 (Azat Khuzhin).
- これにより、ファイル
checksums.txtが存在しない場合に、ClickHouse はパーツのチェックサムを再計算するようになりました。#9827 以降、この挙動は壊れていました。#12545(alesapin)。 enable_mixed_granularity_parts=1のときにALTER DELETEクエリ実行後、古いパーツが破損してしまう原因となっていたバグを修正。#12536 を修正。#12543(alesapin)。- データが重複する原因となっていたライブビュー テーブルの競合状態を修正しました。LIVE VIEW は実験的な機能です。 #12519 (vzakaznikov).
AggregateFunction(avg, ...)の値のバイナリフォーマットにおける後方互換性を修正しました。これにより #12342 が解消されます。#12486(alexey-milovidov)。- 辞書のキー式で結合している場合(
t JOIN dict ON expr(dict.id) = t.id)に、辞書 JOIN でクラッシュが発生する問題を修正しました。このケースでは辞書 JOIN の最適化を無効化します。 #12458 (Artem Zuikov). - 非常に大きな LIMIT または OFFSET が指定された場合に発生していたオーバーフローの問題を修正します。これにより #10470 が修正されます。また #11372 も修正されます。 #12427(alexey-milovidov)。
- kafka: バッチの途中にエラーを含むメッセージが存在していた場合に SIGSEGV が発生する問題を修正。 #12302 (Azat Khuzhin).
改善
- ZooKeeper に保持するログ量を抑えるようにしました。多数のサーバーやテーブル、INSERT がある環境でレプリカがオフラインになった場合でも、ZooKeeper ノード数が過度に増加しないようにします。 #13100 (alexey-milovidov).
- ALTER または mutation の実行中にエラーが発生した場合、例外がクライアントに返されるようになりました。Closes #11329. #12666 (alesapin).
system.eventsにQueryTimeMicroseconds、SelectQueryTimeMicroseconds、InsertQueryTimeMicrosecondsを、system.metrics、processes、query_logなどと同様に追加しました。 #13028 (ianton-ru)。SelectedRowsおよびSelectedBytesをsystem.eventsに追加し、さらにsystem.metrics、processes、query_logなどにも追加しました。 #12638 (ianton-ru)。current_databaseの情報をsystem.query_logに追加しました。 #12652 (Amos Bird)。TabSeparatedRawを入力フォーマットとして許可します。 #12009 (hcz).joinGetが複数キーでの検索をサポートするようになりました。 #12418 (Amos Bird).*Map集約関数が NULL を含む Array 上でも動作するようにしました。 #13157 を修正しました。 #13225(alexey-milovidov)。- タイムゾーン内で負の Unix タイムスタンプになってしまうような DateTime 値のパース時のオーバーフロー(例: モスクワ時間での
1970-01-01 00:00:00)を回避します。代わりに値を 0 にサチュレートします。これにより #3470 が修正されます。これにより #4172 が修正されます。 #12443(alexey-milovidov)。 - AvroConfluent: Kafka のトゥームストーンレコードをスキップ - 破損したレコードのスキップをサポート #13203 (Andrew Onyshchuk).
- 長いクエリに対して誤ったエラーが返される問題を修正しました。正しいクエリであっても、
Max query size exceeded以外の構文エラーが発生する可能性がありました。 #13928 (Nikolai Kochetov). lgamma関数内のデータ競合を修正しました。この競合はtsanのみで検出され、実際には副作用は発生していませんでした。 #13842 (Nikolai Kochetov).- ATTACH/ALTER/CREATE QUOTA ステートメントにおける「Week」インターバルの書式を修正。 #13417 (vladimir-golovchenko).
- コンパクトパーツの処理中に破損したパーツが検出された場合にも、報告されるようになりました。コンパクトパーツは実験的な機能です。 #13282 (Amos Bird)。
geohashesInBoxのassertを修正し、#12554 を解決。 #13229(alexey-milovidov)。parseDateTimeBestEffort内のアサートを修正します。これにより #12649 が解決されます。#13227(alexey-milovidov)。- Processors/PipelineExecutor における軽微な最適化:必要がある場合にはループを抜けるようにした。 #13058 (Mark Papadakis).
- TABLE キーワードなしの TRUNCATE TABLE 構文をサポートしました。 #12653 (Winter Zhang).
- デフォルトで
EXPLAINクエリのフォーマットが上書きされてしまう問題を修正しました。これにより #12541 が解決しました。 #12541 (BohuTANG). SEMI LEFT JOINの代わりにLEFT SEMI JOINを使用できるようにし、より標準的な方法で JOIN の種別とタイプを設定可能にしました。現時点ではどちらも正しい構文として扱われます。 #12520 (Artem Zuikov)。multiple_joins_rewriter_versionのデフォルト値を 2 に変更しました。これにより、カラム名を考慮できる新しい multiple joins rewriter が有効になります。 #12469 (Artem Zuikov)。- S3 ストレージへのリクエスト向けのメトリクスを複数追加。 #12464 (ianton-ru).
--secure引数を指定したclickhouse-benchmarkに対して、正しいデフォルトのセキュアポートを使用するようにしました。これにより #11044 が解決されました。#12440(alexey-milovidov)。Log、TinyLog、StripeLogエンジンにおける挿入エラーがロールバックされるようになりました。以前のバージョンでは、挿入エラーによってテーブルの状態が不整合になる可能性がありました(これはドキュメントどおりの動作で、これらのテーブルエンジンでは通常の挙動です)。この変更により #12402 が修正されました。#12426(alexey-milovidov)。Atomicデータベースエンジン向けにRENAME DATABASEおよびRENAME DICTIONARYを実装しました -ReplicatedMergeTree用の ZooKeeper パスで使用できる暗黙の{uuid}マクロを追加しました。これはCREATE ... ON CLUSTER ...クエリで動作します。利用するにはshow_table_uuid_in_table_create_query_if_not_nilをtrueに設定します。 -ReplicatedMergeTreeエンジンの引数を省略可能にし、デフォルトで/clickhouse/tables/{uuid}/{shard}/および{replica}が使用されるようにしました。Closes #12135. - 細かな修正。 - これらの変更により、Atomicデータベースエンジンとの後方互換性が失われます。既存のAtomicデータベースは新しい形式へ手動で変換する必要があります。Atomic データベースは実験的な機能です。 #12343 (tavplubix).AWSAuthV4Signerを専用のロガーに分離し、ログメッセージから不要なAWSClient: AWSClientを削除しました。 #12320 (Vladimir Chebotarev).- ディスクアクセスストレージでの例外メッセージを改善。 #12625 (alesapin).
- 無効な引数の数が指定された場合の関数
inによる例外処理を改善。 #12529 (Anton Popov). - アダプティブ粒度に関するエラーメッセージを修正。 #12624 (alesapin).
- FORMAT の後の SETTINGS のパースを修正。 #12480 (Azat Khuzhin).
- MergeTree テーブルに ORDER BY または PARTITION BY が含まれていない場合に、すべてのカラムを CLEAR する ALTER を実行できてしまい、その結果 ALTER がハングすることがありました。この問題を修正しました #7941。#12382(alexey-milovidov)。
- 他のクライアントセッションとの履歴の混在を防ぐため、各クエリ実行後に履歴ファイルから補完を再読み込みしないようにしました。 #13086 (Azat Khuzhin).
パフォーマンスの改善
- 一部の処理でメモリ使用量を最大 2 倍削減しました。#12424 (alexey-milovidov).
- 主キー範囲が完全一致するクエリに対して PK ルックアップを最適化しました。#12277 (Ivan Babrou).
LowCardinalityを使用する非常に短いクエリをわずかに最適化しました。#14129 (Anton Popov).- UInt8/UInt16 キーによる集約のパフォーマンスをわずかに改善しました。#13091 および #13055 (alexey-milovidov).
- クエリプラン(サブクエリ内)で
LIMITステップのプッシュダウンを行いました。#13016 (Nikolai Kochetov). - #11564 で説明されているように、パーツに対してプライマリキーの並列ルックアップとインデックススキップ段階を実装しました。#12589 (Ivan Babrou).
set optimize_if_transform_strings_to_enum = 1の場合、関数 "if" および "transform" の String 型引数を Enum に変換するようにしました。#12515 (Artem Zuikov).set optimize_monotonous_functions_in_order_by=1の場合、ORDER BYにおいて単調関数をその引数に置き換えるようにしました。#12467 (Artem Zuikov).set optimize_redundant_functions_in_order_by = 1の場合、ORDER BY x, f(x)をORDER by xに書き換えるORDER BYの最適化を追加しました。#12404 (Artem Zuikov).- サブクエリに
WITH句が含まれる場合でも述語プッシュダウンを許可しました。これにより #12293 が修正されます。#12663 (Winter Zhang). - コンパクトパーツからの読み取り性能を改善しました。コンパクトパーツは実験的な機能です。#12492 (Anton Popov).
DiskS3におけるストリーミング最適化を試験的に実装しました。DiskS3 は実験的な機能です。#12434 (Vladimir Chebotarev).
ビルド / テスト / パッケージングの改善
shテストのリントにはshellcheckを使用するようにしました。 #13200 #13207 (alexey-milovidov).- GitHub フックでプルリクエストにラベルを自動設定するスクリプトを追加。 #13183 (alesapin).
- 再帰的なサブモジュールの一部を削除しました。詳しくは #13378 を参照してください。 #13379 (alexey-milovidov)。
- すべてのサブモジュールが適切な URL から取得されることを保証します。 #13379 の続きです。これは #13378 を修正します。 #13397(alexey-milovidov)。
- クエリ内から参照できるユーザー定義設定のサポートを追加しました。これは、ClickHouse エンジンが別のシステムのコンポーネントとして使用される場合に必要となります。 #13013 (Vitaly Baranov).
- TestFlows における
INSERT権限の RBAC 機能に対するテストを追加しました。SELECTのテスト対象となるテーブルを拡充しました。新しいテーブルエンジンのテストに合わせて、Requirementsを追加しました。 #13340 (MyroTk)。 - ストレステスト中のサーバー再起動時に発生するタイムアウトエラーを修正しました。 #13321 (alesapin).
- Now fast test では、サーバーをリトライしながら待機するようになりました。 #13284 (alesapin).
- Function
materialize()(ClickHouse のテスト用関数)は、期待どおり NULL に対しても動作し、NULL を非定数カラムに変換します。 #13212 (alexey-milovidov). - AArch64 向けの libunwind のビルドを修正します。これにより #13204 が解決されます。#13208(alexey-milovidov)。
- テストの不安定さを抑えるため、zkutil gtest におけるリトライ回数をさらに増やしました。 #13165 (alexey-milovidov).
- RBAC TestFlows に対する細かな修正。 #13152 (vzakaznikov).
00960_live_view_watch_events_live.pyテストを修正。 #13108(vzakaznikov)。- ドキュメントのデプロイスクリプトにおけるキャッシュパージ処理を改善。 #13107 (alesapin).
- いくつかの孤立したテストを gtest に書き換え、テストから不要なインクルードを削除しました。 #13073 (Nikita Mikhaylov).
SELECT権限の RBAC 機能に関するテストを TestFlows に追加しました。 #13061 (Ritaank Tiwari).- fast test check で一部のテストを再実行しました。 #12992 (alesapin).
- 「rdkafka」ライブラリの MSan エラーを修正しました。これにより #12990 がクローズされます。
rdkafkaをバージョン 1.5(master)に更新しました。#12991(alexey-milovidov)。 - AVX-512 を備えたサーバー上でテストを実行した場合に base64 で発生する UBSan レポートを修正しました。これにより #12318 が修正されます。作成者: @qoega。 #12441 (alexey-milovidov)。
- HDFS ライブラリにおいて UBSan レポートで報告されていた問題を修正しました。これにより #12330 がクローズされます。#12453(alexey-milovidov)。
- 古いバージョンで作成したバックアップを新しいバージョンで復元できることを確認しました。これにより #8979 がクローズされました。#12959(alesapin)。
- 統合テスト内で helper_container イメージをビルドしないでください。CI 上で Docker コンテナをビルドし、統合テストでは事前ビルド済みの helper_container を使用してください。#12953 (Ilya Yatsishin)。
- プライマリキー列に対する
ALTER TABLE CLEAR COLUMNクエリのテストを追加。#12951(alesapin)。 - testflows テストのタイムアウト値を増やしました。 #12949 (vzakaznikov).
- Mac OS X 環境でのテストビルドを修正しました。これにより #12767 がクローズされました。#12772(alexey-milovidov)。
- Connector-ODBC を mysql-connector-odbc-8.0.21 に更新しました。#12739 (Ilya Yatsishin).
- TestFlows に RBAC 構文テストを追加しました。 #12642 (vzakaznikov).
- TestKeeperのパフォーマンスを改善しました。これにより、Replicatedテーブルを多用するテストの実行が高速化されます。 #12505 (alexey-milovidov).
- ストレステストの実行後にサーバーが正常に起動できることを確認するようにしました。これにより #12473 を修正しました。 #12496 (alesapin)。
- fmtlib を master(7.0.1)に更新。 #12446 (alexey-milovidov)。
- 高速なテスト用の Docker イメージを追加。#12294(alesapin)。
- 統合テスト用の設定パスを再構築。#12285(Ilya Yatsishin)。
- スタックフレームが大きくなり過ぎないように制御できるコンパイラオプションを追加しました。これにより、小さいスタックサイズのファイバー内でコードを実行しやすくなります。 #11524 (alexey-milovidov).
- gitignore ファイルを更新。 #13447 (vladimir-golovchenko).
ClickHouse リリース 20.6
ClickHouse リリース v20.6.3.28-stable
後方互換性のない変更
- 20.5 より古いバージョンからアップグレードする際に、ローリングアップデートを行っていて、クラスタ内に 20.5 以上と 20.5 未満の両方のバージョンが存在する場合、古いバージョンの ClickHouse ノードを再起動し、新しいバージョンが存在する状態で古いバージョンが起動されると、
Part ... intersects previous partエラーが発生する可能性があります。このエラーを防ぐには、まずクラスタ内のすべてのノードに新しい clickhouse-server パッケージをインストールしてから再起動を行ってください(つまり、clickhouse-server を再起動する際には、新しいバージョンで起動されるようにします)。
新機能
EXPLAINクエリの初期実装を追加しました。構文:EXPLAIN SELECT ...。これにより #1118 が修正されました。#11873(Nikolai Kochetov)。- ストレージ
RabbitMQを追加しました。#11069(Kseniia Sumarokova)。 - PostgreSQL 互換の
ILIKE演算子を実装しました(#11710)。#12125(Mike)。 SET join_algorithm = 'partial_merge'を用いた RIGHT および FULL JOIN をサポートしました。strictness は ALL のみ許可されます(ANY、SEMI、ANTI、ASOF はサポートされません)。#12118(Artem Zuikov)。- 単一の値に基づいて集約を初期化するための関数
initializeAggregationを追加しました。#12109(Guillaume Tassery)。 ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRSTをサポートしました。#4006。#12073(Winter Zhang)。- 関数
parseDateTimeBestEffortUSを追加しました。#12028(flynn)。 - 出力フォーマットとして
ORCをサポートしました(これまでは入力のみがサポートされていました)。#11662(Kruglov Pavel)。
バグ修正
SET optimize_move_functions_out_of_any = 1とany()内のエイリアスを使用することで、aggregate function any(x) is found inside another aggregate function in queryエラーを解消しました。 #13419 (Artem Zuikov).- clickhouse-local 用の
PrettyCompactMonoBlockを修正しました。PrettyCompactMonoBlock使用時の extremes/totals の処理を修正しました。これにより #7746 が解決されました。#13394(Azat Khuzhin)。 - 遅延レプリカからのクエリの場合に発生する可能性があった
Totals having transform was already added to pipelineエラーを修正しました。 #13290 (Nikolai Kochetov). - ユーザーが関数
h3ToChildrenに細工された特定の引数を渡した場合、サーバーがクラッシュする可能性がありました。これは #13275 を修正します。 #13277 (alexey-milovidov)。 - NaN を含む Float 型に対して呼び出された
uniqExact、topK、sumDistinctなどの集約関数における、潜在的な性能低下およびやや不正確な結果を修正しました。また、デバッグビルドで assert が発生していた問題も解消しました。これにより #12491 が修正されます。 #13254(alexey-milovidov)。 - リテラル NULL ではない nullable な
constexprを条件として使用するif関数を修正。#12463 を解決。#13226(alexey-milovidov)。 - 配列要素が Nullable で、配列の添字も Nullable である場合の
arrayElement関数におけるアサートを修正しました。これにより #12172 の問題が解決されました。 #13224(alexey-milovidov)。 - 定数引数を使用する
DateTime64変換関数を修正しました。 #13205 (Azat Khuzhin). - 関数を使用した誤ったインデックスの解析を修正しました。これにより、
MergeTreeテーブルから読み取る際に誤ったパーツがプルーニングされてしまう可能性がありました。#13060 を修正。#12406 を修正。#13081(Anton Popov)。 - クエリのスコープ内では決定的だが、クエリ間では決定的ではない
now(),now64(),randConstant()などの関数を使用するリモートクエリで発生していた、Cannot convert column because it is constant but values of constants are different in source and resultエラーを修正しました。#11327 を修正。 #13075(Nikolai Kochetov)。 - ローカルレプリカからの SELECT クエリに対するスレッド数の不要な制限を修正しました。 #12840 (Nikolai Kochetov).
ALTER DELETEとALTER MODIFY COLUMNクエリが 1 つの mutation として同時に実行された場合にまれに発生していたバグを修正しました。このバグによりcount.txt内の行数が不正になり、その結果、part内のデータも不正になる可能性がありました。あわせて、ALTER RENAME COLUMNとALTER ADD COLUMNを同時に実行した場合に発生する小さなバグも修正しました。 #12760 (alesapin).CAST(Nullable(String), Enum())を修正しました。 #12745 (Azat Khuzhin).IN句で関数として解釈される大きなタプルに関するパフォーマンス問題を修正しました。ユーザーが何らかのよくわからない理由からWHERE x IN (1, 2, ...)ではなくWHERE x IN tuple(1, 2, ...)と記述するケースです。 #12700 (Anton Popov).input_format_parallel_parsingのメモリトラッキングを修正(スレッドをグループにアタッチすることで修正)。 #12672 (Azat Khuzhin).- 定数式での Bloom フィルターインデックスの不具合を修正しました。これにより #10572 が修正されました。#12659(Winter Zhang)。
- ブローカーが利用できない場合などに
StorageKafkaで発生していたSIGSEGVを修正しました。 #12658 (Azat Khuzhin). - 関数
ifが引数としてのArray(UUID)をサポートするようになりました。これにより、#11066 が解決されました。 #12648 (alexey-milovidov). CREATE USER IF NOT EXISTSは、ユーザーが既に存在している場合でも例外をスローしなくなりました。これにより #12507 が修正されました。 #12646 (Vitaly Baranov).- ディスクアクセスストレージでの例外メッセージを改善。 #12625 (alesapin).
- 関数
groupArrayMoving*は分散クエリに対して正しく動作していませんでした。その結果は誤ったデータ型(最大の型への型昇格なし)で計算されていました。関数groupArrayMovingAvgはavg関数と一貫性のない整数値を返していました。これにより #12568 が修正されました。#12622(alexey-milovidov)。 - 関数
anyでエイリアスを使用できなかった問題を修正しました。 #12593 (Anton Popov)。 - キャッシュレイアウトを使用する外部辞書におけるレースコンディションを修正しました。この問題によりサーバーがクラッシュする可能性がありました。 #12566 (alesapin).
- DROP TABLE 時に Distributed テーブルのデータ(非同期 INSERT のブロック)を削除する。 #12556 (Azat Khuzhin).
enable_mixed_granularity_parts=1のときにALTER DELETEクエリ実行後、既存のパーツが破損してしまう原因となっていたバグを修正しました。 #12536 を修正。 #12543(alesapin)。- 関数
inの引数の数が不正な場合の例外メッセージを改善。 #12529 (Anton Popov). - データの重複を引き起こす可能性があったライブビュー テーブルでのレースコンディションを修正。 #12519 (vzakaznikov).
- コンパクトパーツから読み込む際のパフォーマンス問題を修正しました。 #12492 (Anton Popov).
AggregateFunction(avg, ...)の値のバイナリフォーマットにおける後方互換性の問題を修正しました。これにより #12342 が解決されました。 #12486 (alexey-milovidov).- FORMAT の後に続く SETTINGS の解析を修正。 #12480 (Azat Khuzhin).
text_logが有効な場合に発生していたデッドロックを修正しました。 #12452 (alexey-milovidov).- 非常に大きな
LIMITまたはOFFSETが指定された場合に発生していたオーバーフローを修正しました。これにより、#10470 および #11372 が修正されます。#12427(alexey-milovidov)。 StorageMerge使用時に発生する可能性があったセグメンテーションフォルトを修正しました。これにより #12054 が解決されました。 #12401 (tavplubix).- #12098 を解決するために #11079 で導入された変更を元に戻しました。 #12397 (Mike)。
- Bloom filter インデックスの引数に対する追加チェックを追加しました。これにより #11408 を修正しました。 #12388 (alexey-milovidov)。
- インデックス付きテーブルの WHERE 句で負の定数または浮動小数点定数が使用された場合に例外が発生しないようにしました。これにより #11905 が修正されます。#12384(alexey-milovidov)。
- 依存している
DEFAULT式があっても、カラムをCLEARできるようになりました。これにより #12333 が修正されました。#12378(alexey-milovidov)。 -StateとNullable引数を持つ集計関数に対するTOTALS/ROLLUP/CUBEの挙動を修正しました。これにより #12163 が解決されます。 #12376 (alexey-milovidov)。RENAMEが許可されていない場合のALTER RENAME COLUMNクエリに対するエラーメッセージと終了コードを修正しました。#12301 および #12303 を解決します。 #12335 (alesapin)。ReplicatedMergeTreeQueueにおけるごくまれに発生するレースコンディションを修正しました。 #12315 (alexey-milovidov).- 非固定長の型でコーデック
DeltaまたはDoubleDeltaを使用した場合に、BAD_ARGUMENTSコードの例外ではなくLOGICAL_ERRORコードの例外が返されていました(LOGICAL_ERRORコードの例外が発生することはないようにしています)。この変更で #12110 が修正されました。 #12308(alexey-milovidov)。 WITH FILL修飾子における列の順序を正しく扱うように修正しました。以前は、ORDER BY文で指定した列の順序が保持されていませんでした。 #12306 (Anton Popov).- 仮想カラム(
Mergeテーブルにおける_tableなど)によるフィルタリングや、system.tablesからクエリする際にデータベース名でフィルタリングする場合のように、システムテーブルの「インデックス」カラムでデータをフィルタする式があり、その式がNullable型を返すときに発生する「bad cast」例外を回避します。これにより #12166 が修正されます。#12305(alexey-milovidov)。 TTL式が参照している列の名前を変更した後にTTLが正しく動作しない問題を修正しました。 #12304 (Anton Popov).Kafkaエンジンで、バッチの途中にエラーを含むメッセージがある場合に SIGSEGV が発生する問題を修正しました。 #12302 (Azat Khuzhin).DNSキャッシュの更新中に、一部のスレッドが数秒間まれにハングする可能性があった問題を修正しました。 #12296 (tavplubix).- 設定名の誤字を修正しました。 #12292 (alexey-milovidov).
TrieDictionaryの読み込みに失敗した場合にエラーを表示するようにしました。 #12290 (Vitaly Baranov).- 空配列に対する
arrayFill関数の動作に問題があり、クラッシュする可能性がありました。これにより #12263 が修正されました。#12279(alexey-milovidov)。 LowCardinality型に対して共通の型への変換を実装しました。これにより、LowCardinality型の列とその他の列を持つテーブルに対してUNION ALLを実行できるようになります。これにより #8212 および #4342 が修正されます。#12275(alexey-milovidov)。S3ストレージへのリクエストでリダイレクト回数の上限に達した際の挙動を修正しました。 #12256 (ianton-ru).StorageFileで複数回連続して挿入を行う際に、一部の特殊な型でヘッダーが複数回書き込まれてしまう問題を修正しました。これにより #6155 が解決されました。#12197(Nikita Mikhaylov)。- 0 または 1 以外の値を取る UInt8 型に対する論理関数を修正しました。 #12196 (Alexander Kazakov).
- max_memory_usage* をプロセスの常駐メモリ量を上限として制限しました。 #12182 (Azat Khuzhin).
GROUP BYにおける単射関数の削除時のdictGet引数チェックを修正。 #12179 (Azat Khuzhin).SummingMergeTreeエンジンがパーティションキーの列を合計する際の動作を修正しました。合計する列を明示的に定義した結果、それがパーティションキーの列と重複する場合には例外をスローするようにしました。これにより #7867 が修正されました。#12173(Nikita Mikhaylov)。- ODBC 接続がスキーマをサポートしていない場合は、ディクショナリソースのテーブル名をスキーマ名とテーブル名に分割しないようにしました。 #12165 (Vitaly Baranov).
- 条件が NULL と評価されるときにレコードが削除されてしまっていた
ALTER DELETEの誤ったロジックを修正しました。これにより #9088 が修正されます。また、#12106 がクローズされます。#12153(alexey-milovidov)。 - エイリアスが存在する場合に、外部 DBMS(例: MySQL、ODBC)に送信するクエリの変換処理を修正しました。これにより #12032 が修正されました。 #12151 (alexey-milovidov).
- 冗長な ORDER BY 最適化における誤ったコードを修正しました。このバグは #10067 で導入されました。#12148(alexey-milovidov)。
- 整数除算時に発生する可能性のあるオーバーフローを修正しました。これにより #12119 が解決されます。#12140(alexey-milovidov)。
greatCircleDistance、geoDistanceにおいて無限ループが発生する可能性のあった問題を修正しました。これにより #12117 が解決されます。 #12137(alexey-milovidov)。- 「pid」ファイルの扱いを適正化しました。以前のバージョンでは、サーバーが適切にシャットダウンされずに強制終了され、かつ以前に動作していたサーバーと同じ pid を持つ別のプロセスが存在する場合、サーバーが起動を拒否することがありました。また、別のサーバーが稼働中であっても、サーバーの起動に失敗した際に pid ファイルが削除されてしまうことがありました。これにより #3501 が修正されました。 #12133(alexey-milovidov)。
- ReplicatedVersionedCollapsingMergeTree テーブルに対して ZooKeeper 内のテーブルメタデータが誤った状態になる原因となっていたバグを修正しました。 #12093 を修正。 #12121(alesapin)。
- JOIN を含むマテリアライズドビュー、または system ログ(system.query_log、metric_log など)や engine=Buffer のベーステーブルを参照するサブクエリを含むマテリアライズドビューで、"There is no query" 例外が発生しないようにしました。 #12120 (filimonov).
- ENGINE=Dictionary を使用するテーブルの、辞書に対する依存関係の扱いを修正しました。これにより #10994 および #10397 が解決されました。 #12116 (Vitaly Baranov).
Parquetフォーマットが、LowCardinalityおよびLowCardinality(Nullable)型で正しく動作するようになりました。#12086、#8406 を修正しました。#12108(Nikolai Kochetov)。UNIONを含む SELECT クエリにおいて、総スレッド数に対する制限値の誤りが原因だったパフォーマンス問題を修正しました。 #12030 を修正。 #12103 (Nikolai Kochetov).-StateResampleコンビネータで発生していたセグメンテーションフォルトを修正しました。 #12092 (Anton Popov).- SELECT クエリに対して
system.quey_logのresult_rowsおよびresult_bytesメトリクスが空になる問題を修正しました。 #11595 を解決。 #12089 (Nikolai Kochetov)。 VIEWからの SELECT に対してスレッド数を不必要に制限していた問題を修正しました。#11937 を修正します。#12085(Nikolai Kochetov)。- DROP TABLE 実行時に StorageKafka で発生する SIGSEGV を修正しました。 #12075 (Azat Khuzhin).
PREWHEREに誤った型を使用した場合に発生する可能性があったクラッシュを修正しました。 #12053、#12060 を修正しました。 #12060(Nikolai Kochetov)。Tuple(LowCardinality)引数を持つ高階関数で発生していたCannot capture columnエラーを修正しました。これにより #9766 が解決されます。#12055(Nikolai Kochetov)。- 制約が定数式かどうかをチェックするように修正しました。これにより #11360 が修正されました。#12042(alexey-milovidov)。
- 異なるサイズの
FixedString型の引数で関数ifを呼び出した際に、誤った結果が返されたりクラッシュする可能性がある問題を修正しました。これにより #11362 が修正されました。#12021(alexey-milovidov)。
改良
JOINの種類とタイプを、より標準的な方法で設定できるようにしました。SEMI LEFT JOINの代わりにLEFT SEMI JOINを使用できます。現時点ではどちらも正しい書き方として受け付けます。#12520 (Artem Zuikov).- Buffer エンジンに
lifetime_rows/lifetime_bytesを追加しました。#12421 (Azat Khuzhin). - 「MySQL server has gone away」という固定メッセージの代わりに、詳細な例外メッセージをクライアントへ送信するようにしました。#12383 (BohuTANG).
- グリッド境界線の表示に使用する文字セットを変更できるようにしました。利用可能な文字セットは UTF-8 と ASCII です。
output_format_pretty_grid_charsetを設定することでこの機能が有効になります。#12372 (Sabyanin Maxim). - MySQL の
SELECT DATABASE()をサポートしました。#9336 また、MySQL 置換クエリの統合テストを追加しました。#12314 (BohuTANG). - MySQL クライアント/ドライバ向けに、長時間実行中のクエリをキャンセルするための
KILL QUERY [connection_id]を追加しました。issue #12038。#12152 (BohuTANG). formatDateTime関数で、%g(2 桁の ISO 年)および%G(4 桁の ISO 年)の置換をサポートしました。#12136 (vivarum).system.disksにtypeカラムを追加しました。#12115 (ianton-ru).REVOKEコマンドを改善しました。現在は、取り消す対象のアクセス権に対してのみ grant/admin オプションが必要になります。例えば、REVOKE ALL ON *.* FROM user1を実行する場合、grant オプション付きで付与された完全なアクセス権を保持している必要はありません。REVOKE ALL FROM user1コマンドを追加しました。これはuser1に付与されたすべてのロールを取り消します。#12083 (Vitaly Baranov).load_balancing用にレプリカ優先度を追加しました(ロードバランシングを手動で優先順位付けするため)。#11995 (Azat Khuzhin).- S3 メタデータ内のパスを相対パスに変更し、S3 ブロブをより簡単に扱えるようにしました。#11892 (Vladimir Chebotarev).
パフォーマンスの改良
- ソートキーのプレフィックスを利用することで、
ORDER BYおよびGROUP BYのパフォーマンスを改善しました(optimize_aggregation_in_order設定で有効化、デフォルトでは無効)。#11696 (Anton Popov). set optimize_injective_functions_inside_uniq=1の場合に、uniq*()内の単射関数を削除するようにしました。#12337 (Ruslan Kamalov).- リテラルを伴う IN 演算子に対してインデックスが使用されない、v19.3 頃に導入されたパフォーマンス退行を修正しました。この変更により #10574 が解決されます。#12062 (nvartolomei).
- DiskS3 向けに単一パートアップロードを実装しました(実験的機能)。#12026 (Vladimir Chebotarev).
実験的機能
MergeTreeファミリーのテーブルに、データをメモリ上に保持する新しいパーツのインメモリ形式を追加しました。パーツは最初のマージ時に初めてディスクへ書き込まれます。行数またはバイト数がmin_rows_for_compact_partおよびmin_bytes_for_compact_partのしきい値を下回る場合、そのパーツはインメモリ形式で作成されます。さらに、オプション機能として Write-Ahead-Log のサポートがあり、デフォルトで有効で、in_memory_parts_enable_wal設定によって制御されます。#10697 (Anton Popov).
ビルド/テスト/パッケージングの改善
clickhouse-client向けに AST ベースのクエリファジングモードを実装しました。ファジングによって最近発見された issue の一覧についてはこのラベルを参照してください。ほとんどはこのツールで、いくつかは SQLancer と00746_sql_fuzzy.plによって発見されました。 #12111 (Alexander Kuzmenkov).- Testflows フレームワークに基づく新しい種類のテストを追加しました。 #12090 (vzakaznikov).
- S3 HTTPS のインテグレーションテストを追加しました。 #12412 (Pavel Kovalenko).
- サニタイザのトラップメッセージを別スレッドからログ出力するようにしました。これにより、thread sanitizer 実行時に発生しうるデッドロックを防止します。 #12313 (alexey-milovidov).
- 機能テストおよびストレステストが、旧バージョンの
clickhouse-testスクリプトでも実行可能になりました。 #12287 (alesapin). - ビルド中に
orcで行われていた不要なファイル作成処理を削除しました。 #12258 (Nikita Mikhaylov). - 共通の docker compose ファイルをインテグレーション用 Docker コンテナに配置しました。 #12168 (Ilya Yatsishin).
- CodeQL からの警告を修正しました。
CodeQLは、既に使用しているclang-tidyおよびPVS-Studioと併用する、別の静的解析ツールです。 #12138 (alexey-milovidov). - UNBUNDLED ビルド向けの軽微な CMake 修正を行いました。 #12131 (Matwey V. Kornilov).
- いずれの Linux ディストリビューションにも依存しない最小構成の Docker イメージのサンプルを追加しました。 #12126 (alexey-milovidov).
clickhouse-serverDocker イメージ内のシステムパッケージをアップグレードしました。 #12124 (Ivan Blinkov).system.build_optionsテーブルにUNBUNDLEDフラグを追加しました。clickhouse-test用のスキップリストを ClickHouse リポジトリに移動しました。 #12107 (alesapin).- Anchore Container Analysis セキュリティ解析ツールによる、
clickhouse-serverDocker イメージ内の CVE を検出するための定期チェックを追加しました。また、Dockerfileがビルド可能であることも検証します。masterとDockerfileへの pull request に対して毎日実行されます。 #12102 (Ivan Blinkov). - GitHub CodeQL セキュリティ解析ツールによる、CWE を検出するための日次チェックを追加しました。 #12101 (Ivan Blinkov).
- Dockerfile で最初の
apt-get updateを実行する前にca-certificatesをインストールするようにしました。 #12095 (Ivan Blinkov).
ClickHouse リリース 20.5
ClickHouse リリース v20.5.4.40-stable 2020-08-10
不具合修正
- 関数を用いたインデックス解析の誤りを修正しました。
MergeTreeテーブルを読み取る際に、誤ったパーツがプルーニングされてしまう可能性がありました。#13060 および #12406 を修正しました。 #13081(Anton Popov)。 - ローカルレプリカからのSELECTクエリに対するスレッド数に課されていた不要な制限を修正しました。 #12840 (Nikolai Kochetov).
IN節で大きなタプルが関数として解釈される場合のパフォーマンス問題を修正しました。ユーザーが何らかのよくわからない理由でWHERE x IN (1, 2, ...)ではなくWHERE x IN tuple(1, 2, ...)と記述した場合のケースです。 #12700 (Anton Popov).- input_format_parallel_parsing のメモリトラッキングを修正(スレッドをグループに紐付けることで実現)。 #12672 (Azat Khuzhin).
- 定数式を用いた固定ブルームフィルタインデックスに関する不具合を修正しました。これにより #10572 が解決されました。#12659(Winter Zhang)。
- ブローカーが利用不能な場合(および一部の他の状況でも)に
StorageKafkaで発生していたSIGSEGVを修正しました。 #12658 (Azat Khuzhin). - 関数
ifに対してArray(UUID)引数のサポートを追加しました。これにより #11066 が修正されました。 #12648 (alexey-milovidov)。 - 関数
anyでエイリアスを利用できない問題を修正しました。 #12593 (Anton Popov)。 - キャッシュレイアウトを使用する外部ディクショナリでのレースコンディションを修正しました。これによりサーバーがクラッシュするおそれがありました。 #12566 (alesapin).
DROP TABLE時に、Distributed テーブルのデータ(非同期INSERTによって作成されたブロック)を削除します。 #12556 (Azat Khuzhin).enable_mixed_granularity_parts=1のときにALTER DELETEクエリ実行後、古いパーツが破損してしまう原因となっていたバグを修正しました。 #12536 を修正。 #12543 (alesapin)。- 無効な数の引数が指定された場合の
in関数の例外メッセージを改善しました。 #12529 (Anton Popov). - live view テーブルで発生し、データの重複を引き起こす可能性があったレースコンディションを修正しました。#12519 (vzakaznikov)。
- コンパクトパーツからの読み取り時のパフォーマンス問題を修正しました。 #12492 (Anton Popov).
AggregateFunction(avg, ...)の値のバイナリ形式の後方互換性を修正しました。これにより #12342 が解決されました。 #12486 (alexey-milovidov)。text_logが有効な場合に発生していたデッドロックを修正しました。#12452 (alexey-milovidov).- 非常に大きな LIMIT または OFFSET が指定された場合に発生するオーバーフローを修正しました。これにより #10470 および #11372 が修正されました。 #12427 (alexey-milovidov)。
- StorageMerge 使用時に発生する可能性があったセグメンテーションフォルトを修正しました。 #12054 をクローズしました。 #12401 (tavplubix)。
- #12098 を解決するために #11079 で導入された変更を元に戻しました。#12397 (Mike)。
- インデックス付きテーブルの WHERE 句で負の値または浮動小数点の定数が使用された場合に、例外が発生しないようにしました。これにより #11905 が修正されます。 #12384 (alexey-milovidov)。
- 依存している DEFAULT 式が存在していても列を CLEAR できるようにしました。これにより #12333 が修正されました。 #12378 (alexey-milovidov).
-State引数およびNullable引数を持つ集約関数に対する TOTALS/ROLLUP/CUBE の挙動を修正しました。これにより #12163 の問題が解決されました。#12376(alexey-milovidov)。KafkaEngine で、バッチの途中にエラーのあるメッセージがある場合に SIGSEGV が発生する問題を修正。 #12302 (Azat Khuzhin).SummingMergeTreeエンジンがパーティションキーの列を合計する際の挙動を修正しました。合計対象の列を明示的に指定した結果、パーティションキーの列と重複する場合には例外を送出するようにしました。これにより #7867 が修正されました。 #12173(Nikita Mikhaylov)。- エイリアスが存在する場合に外部 DBMS(例: MySQL、ODBC)へ送信するクエリの変換処理を修正しました。これにより、#12032 が解決されました。#12151(alexey-milovidov)。
- ReplicatedVersionedCollapsingMergeTree テーブルに対して ZooKeepeer 内のテーブルメタデータが不正になる不具合を修正しました。これは #12093 を修正するものです。 #12121 (alesapin)。
VIEWからの SELECT でスレッド数が不必要に制限されていた問題を修正しました。 #11937 を解決しました。 #12085(Nikolai Kochetov)。join_algorithm=partial_mergeを使用した LowCardinality 型を含む JOIN で発生していたクラッシュを修正しました。 #12035 (Artem Zuikov).- 条件式に NULL を含む
if()が誤った結果を返す問題を修正。 #11807 (Artem Zuikov).
パフォーマンスの改善
- リテラルを伴う IN 演算子でインデックスが使用されない問題を修正。v19.3 頃に発生したパフォーマンス低下を解消します。これは #10574 を修正します。#12062(nvartolomei)。
ビルド/テスト/パッケージングの改善
- Dockerfile 内で、最初の
apt-get updateの前にca-certificatesをインストールするように変更。#12095(Ivan Blinkov)。
ClickHouse リリース v20.5.2.7-stable 2020-07-02
後方互換性のない変更
- COUNT(DISTINCT) および
uniq集約関数ファミリーからは、Nullable ではない結果を返すようにしました。渡された値がすべて NULL の場合は、代わりに 0 を返します。これにより SQL との互換性が向上します。#11661(alexey-milovidov)。 - ユーザーレベル設定が誤った場所に指定されている場合のチェックを追加しました。ユーザーレベル設定は、特定のユーザープロファイルについては
users.xmlの<profile>セクション内(またはデフォルト設定については<default>内)に指定する必要があります。サーバーはログに例外メッセージを出力して起動に失敗します。これは #9051 を修正します。このチェックをスキップしたい場合は、設定を適切な場所に移動するか、config.xml に<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>を追加してください。#11449(alexey-milovidov)。 - 設定
input_format_with_names_use_headerをデフォルトで有効化しました。これにより、入力フォーマット-WithNamesおよび-WithNamesAndTypesのパース方法に影響します。#10937(alexey-milovidov)。 - 設定
experimental_use_processorsを削除しました。この機能はデフォルトで有効です。#10924(Nikolai Kochetov)。 zstdを 1.4.4 に更新しました。パフォーマンスおよび圧縮率にいくつかの細かな改善があります。ClickHouse の異なるバージョンを持つレプリカを実行している場合、Data after merge is not byte-identical to data on another replicas.という妥当なエラーメッセージとその説明が表示されることがあります。これらのメッセージは問題なく、心配する必要はありません。この変更は後方互換性がありますが、これらのメッセージについて疑問に思う可能性があるため、チェンジログに記載しています。#10663(alexey-milovidov)。- 無意味と見なされる codec に対するチェックを追加し、このチェックを制御するための設定
allow_suspicious_codecsを追加しました。これは #4966 をクローズします。#10645(alexey-milovidov)。 - いくつかの Kafka 設定のデフォルト値を変更しました。#11388 を参照してください。
- 20.5 より古いバージョンからアップグレードする際に、ローリングアップデートを行い、クラスタ内に 20.5 以上と 20.5 未満の両方のバージョンが混在している状態で、古いバージョンの ClickHouse ノードを再起動し、新しいバージョンが存在する状態で古いバージョンが起動した場合、
Part ... intersects previous partエラーが発生することがあります。このエラーを防ぐには、まずクラスタ内の全ノードに新しい clickhouse-server パッケージをインストールし、その後で再起動を行ってください(つまり、clickhouse-server を再起動する際には、新しいバージョンで起動するようにします)。
新機能
- テーブルにおけるデータの自動粗粒化およびロールアップのための
TTL DELETE WHEREとTTL GROUP BY。#10537(expl0si0nn)。 - PostgreSQL ワイヤプロトコルの実装。 #10242 (Movses)。
- ユーザー、ロール、権限、設定プロファイル、クォータ、行ポリシーのシステムテーブルを追加し、コマンド
SHOW USER、SHOW [CURRENT|ENABLED] ROLES、SHOW SETTINGS PROFILESを追加しました。 #10387 (Vitaly Baranov). - ODBC Table 関数での書き込みをサポートしました #10554 (ageraab)。 #10901 (tavplubix)。
- Linux の
perf_eventsに基づくクエリパフォーマンスメトリクスを追加しました(これらのメトリクスはハードウェア CPU カウンタおよび OS カウンタを用いて計算されます)。これはオプション機能であり、ClickHouse バイナリにCAP_SYS_ADMINが設定されている必要があります。 #9545 Andrey Skobtsov。 #11226 (Alexander Kuzmenkov)。 CREATEクエリでデータ型にNULLおよびNOT NULL修飾子を指定できるようになりました。 #11057 (Павел Потемкин).ArrowStreamの入力および出力フォーマットを追加しました。 #11088 (hcz).- 外部辞書ソースとして Cassandra をサポートするようになりました。 #4978 (favstovol)。
- 新しいレイアウト
directを追加しました。各クエリごとにソースからすべてのデータを直接読み込み、データを保存したりキャッシュしたりしません。 #10622 (Artem Streltsov). - クエリ実行中にローカルには何も保存しない新しい
complex_key_directレイアウトを辞書に追加しました。 #10850 (Artem Streltsov). - MySQL 形式のグローバル変数構文(スタブ)のサポートを追加しました。これは MySQL プロトコルとの互換性を保つために必要です。 #11832 (alexey-milovidov).
replxxを使用してclickhouse-clientに構文ハイライト機能を追加しました。 #11422 (Tagir Kuskarov).minMapとmaxMap関数が追加されました。#11603 (Ildus Kurbangaliev)。system.asynchronous_metricsからの過去のメトリクスを記録するsystem.asynchronous_metric_logテーブルを追加しました。 #11588 (Alexander Kuzmenkov).- 関数
extractAllGroupsHorizontal(haystack, re)とextractAllGroupsVertical(haystack, re)を追加しました。 #11554 (Vasily Nemkov)。 - SHOW CLUSTER(S) クエリを追加しました。 #11467 (hexiaoting).
- Python の
urlparse(url)におけるnetlocと同様に、ネットワークロケーションを抽出するためのnetloc関数を追加。 #11356 (Guillaume Tassery)。 - engine=Kafka 用にメッセージヘッダーへアクセスするための仮想列を 2 つ追加。 #11283 (filimonov).
- Kafka エンジン用に
_timestamp_ms仮想カラムを追加しました(型はNullable(DateTime64(3)))。#11260(filimonov)。 - 関数
randomFixedStringを追加。 #10866 (Andrei Nekrashevich). - 文字列中のビットを指定した確率でランダムに反転させる関数
fuzzBitsを追加しました。 #11237 (Andrei Nekrashevich)。 - 比較演算子、IN 句および VALUES 句で、数値と定数文字列を比較できるようにしました。 #11647 (alexey-milovidov).
round_robinロードバランシングモードを追加しました。 #11645 (Azat Khuzhin).cast_keep_nullable設定を追加しました。これを有効にすると、CAST(something_nullable AS Type)がNullable(Type)を返すようになります。 #11733 (Artem Zuikov).system.columnsテーブルにposition列を、system.parts_columnsテーブルにcolumn_position列を追加しました。これらの列には、テーブル内のカラムの位置を表す 1 から始まる序数が格納されます。これにより #7744 が解決されました。 #11655 (alexey-milovidov)。- ON CLUSTER による SYSTEM
{FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND}のサポート。 #11415 (Azat Khuzhin). - system.distribution_queue テーブルを追加。 #11394 (Azat Khuzhin).
- Kafka におけるすべてのフォーマット設定をサポートし、一部の設定をテーブルレベルで指定可能にして、デフォルト値を調整することでパフォーマンスを向上させました。 #11388 (filimonov).
- URL からポートを抽出する
port関数を追加。 #11120 (Azat Khuzhin). dictGet*関数がテーブル名を受け付けるようになりました。 #11050 (Vitaly Baranov)。clickhouse-formatツールは、-n引数を使用することで複数のクエリをフォーマットできるようになりました。 #10852 (Darío)。- DiskS3 向けの proxy-resolver を構成できるようになりました。 #10744 (Pavel Kovalenko).
pointInPolygonが非定数のポリゴンでも動作するようになりました。pointInPolygonは、2 番目の引数として Array(Array(Tuple(..., ...)))、すなわちポリゴン本体および穴の配列を受け取れるようになりました。#10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov).move_ttl_infoをsystem.partsに追加し、move TTL 機能の内部状態を確認できるようにしました。 #10591 (Vladimir Chebotarev).- プロキシ経由で S3 を利用できるように。 #10576 (Pavel Kovalenko).
- データ型
NCHARおよびNVARCHARのシノニムを追加。 #11025 (alexey-milovidov). - #7224 を解決し、
FailedQuery、FailedSelectQuery、FailedInsertQueryメトリクスをsystem.eventsテーブルに追加しました。 #11151 (Nikita Orlov)。 jemallocの統計情報をさらにsystem.asynchronous_metricsに追加し、それらの値を常に最新の状態で取得できるようにしました。 #11748 (Alexander Kuzmenkov).- デフォルトの S3 認証情報およびカスタム認証ヘッダーを指定できるようにしました。 #11134 (Grigory Pervakov).
- さまざまな精度の DateTime64 を Int64 としてインポート/エクスポートするための新しい関数
to-/fromUnixTimestamp64Milli/-Micro/-Nanoを追加しました。 #10923 (Vasily Nemkov)。 - MongoDBディクショナリ用に
mongodb://URI を指定できるようにしました。#10915 (Alexander Kuzmenkov)。 - OFFSET キーワードを、LIMIT 句を伴わずに使用できるようになりました。 #10802 (Guillaume Tassery).
system.licensesテーブルを追加しました。このテーブルには、contribディレクトリにあるサードパーティライブラリのライセンスが含まれます。これにより #2890 が解決しました。 #10795 (alexey-milovidov)。- DateTime64 値のサブ秒部分を 0 にする新しい関数 toStartOfSecond(DateTime64) -> DateTime64。 #10722 (Vasily Nemkov).
- 新しい入力フォーマット
JSONAsStringを追加しました。改行、空白、カンマのいずれかまたは組み合わせで区切られた一連の JSON オブジェクトを受け付けます。#10607 (Kruglov Pavel). - 4 MiB よりも細かい粒度でメモリプロファイルを取得できるようになりました。ランダムなメモリ確保/解放をサンプリングするメモリプロファイラを追加しました。 #10598 (alexey-milovidov).
SimpleAggregateFunctionでsumMapもサポートされるようになりました。 #10000 (Ildus Kurbangaliev).- 分散テーブルエンジンで
ALTER RENAME COLUMNをサポート。#10727 の継続。#10747 を修正。#10887(alesapin)。
不具合修正
- Decimal のパース処理で発生していた UBSan レポートを修正しました。これにより #7540 が解消されます。#10512(alexey-milovidov)。
- DateTime64 をパースする際に浮動小数点例外が発生する可能性のあった問題を修正しました。これにより #11374 が解決されます。#11875(alexey-milovidov)。
- PREWHERE 句の条件で
Nullableカラムを使用した場合にまれに発生するクラッシュを修正しました。 #11895 #11608 #11869 (Nikolai Kochetov). - 高階関数の内部で arrayJoin を許可しないようにしました。これが原因で、プロトコルの同期が乱れる問題が発生していました。この修正により #3933 がクローズされました。#11846(alexey-milovidov)。
- FixedString と定数の String の比較で誤った結果が返る問題を修正しました。これにより #11393 が修正されます。このバグはバージョン 20.4 で発生しました。#11828 (alexey-milovidov)。
- 条件に NULL を含む
ifで誤った結果が返される問題を修正。 #11807 (Artem Zuikov). - クエリでの過剰なスレッド使用を修正。 #11788 (Nikolai Kochetov).
SELECT ... FROM merge_tree_table ...でWITH <scalar subquery> ...を使用した際に発生していたScalar does not exist例外を修正しました #11621。 #11767 (Amos Bird)。SELECT *, xyz.*のようなクエリで、本来はエラーになるべきところが成功してしまっていた問題を修正しました。 #11753 (hexiaoting).- メタデータの変更(ALTER)処理中は、レプリケーションのフェッチ処理がキャンセルされるようになりました。 #11744 (alesapin).
- 等価性をチェックする前に、ZooKeeper に保存されているメタデータをパースするようにしました。 #11739 (Azat Khuzhin).
- Values 入力フォーマットで複合リテラルの型を誤って推論していたことにより発生していた LOGICAL_ERROR を修正しました。 #11732 (tavplubix).
- 定数列に対する
ORDER BY ... WITH FILLの問題を修正。 #11697 (Anton Popov). - SYSTEM SYNC REPLICA における非常にまれなレースコンディションを修正しました。複製テーブルが作成されているのと同時に、別の接続から別クライアントが同じテーブルに対して
SYSTEM SYNC REPLICAコマンドを実行した場合(もう一方のクライアントはテーブルが作成中であることを認識しているはずなので、起こりにくい状況ですが)、nullptr の逆参照が発生する可能性がありました。 #11691 (alexey-milovidov). - XDBC ブリッジと通信する際に、適切にタイムアウトを設定するようにしました。最近、ブリッジの生存確認やメタ情報の受信時にタイムアウトが考慮されていませんでした。#11690 (alexey-milovidov)。
- エイリアスを含む
ORDER BY句と組み合わせたLIMIT n WITH TIES使用時の動作を修正。 #11689 (Anton Popov). - 並列な
FINALを伴う SELECT クエリで発生する可能性のあるPipeline stuckの問題を修正。 #11636 を修正。 #11682(Nikolai Kochetov)。 system.mutationsが不正な状態になる原因となっていたエラーを修正しました。mutation 全体がすでに完了しているかのように表示されているにもかかわらず、サーバーはレプリケーションキューにMUTATE_PARTタスクを残したまま、それらを実行しようとし続けてしまう問題です。これにより #11611 が修正されました。#11681(alesapin)。- CREATE USER クエリの構文ハイライトを修正しました。 #11664 (alexey-milovidov).
- 大文字小文字の区別をしないフラグ付き正規表現のサポートを追加しました。これにより #11101 と #11506 が修正されました。#11649(alexey-milovidov)。
- 行レベルセキュリティが有効な場合に、自明な
COUNTクエリ最適化を削除しました。以前のバージョンでは、ユーザーはフィルタリング後の件数ではなく、テーブル内の全レコード数を取得できていました。これにより #11352 が修正されます。#11644(alexey-milovidov)。 - String 用の Bloom フィルタ(データスキッピングインデックス)を修正。 #11638 (Azat Khuzhin).
-qオプションを指定しない場合、データベースは起動時に作成されません。 #11604 (giordyb).Bufferテーブルからのサンプリング読み出しを行うクエリで発生していたBlock structure mismatchエラーを修正しました。#11602 (Nikolai Kochetov).exception.code() % 256 == 0の場合に clickhouse-client が誤った終了コードを返す問題を修正しました。 #11601 (filimonov).- ReplicatedMergeTree の異なるレプリカに対する CREATE/DROP 操作のレースコンディションを修正しました。テーブルが ZooKeeper から完全に削除されていない、または正常に作成されていない場合でも処理を継続できるようにしました。これにより #11432 が修正されました。#11592(alexey-milovidov)。
- サーバー起動時に出力される「Mark cache size was lowered」というログメッセージ中の軽微な誤りを修正しました。これにより #11399 がクローズされます。#11589(alexey-milovidov)。
PREWHERE column in (subquery)とARRAY JOINを含むクエリで発生するエラーSize of offsets does not match size of columnを修正しました。 #11580 (Nikolai Kochetov).SHOW CREATE TABLEでまれに発生するセグメンテーションフォルトを修正しました。#11490 を解決。 #11579 (tavplubix)。- HTTP セッション内のすべてのクエリが同じ
query_idになってしまっていた問題を修正しました。 #11578 (tavplubix)。 - これにより、clickhouse-server の Docker コンテナは、サーバーの稼働確認に IPv6 を優先して使用するようになります。 #11550 (Ivan Starkov)。
min_bytes_to_use_direct_ioが有効で、PREWHERE が有効かつ SAMPLE を使用している場合、またはスレッド数が多い場合に発生する可能性のあるData compressed with different methodsエラーを修正しました。これにより #11539 が修正されます。 #11540 (alexey-milovidov).<node>向けの shard_num/replica_num を修正(use_compact_format_in_distributed_parts_names が正しく動作しなくなる問題)。 #11528 (Azat Khuzhin).- prefer_localhost_replica=0 かつ internal_replication を使用しない場合の Distributed への非同期 INSERT を修正しました。 #11527 (Azat Khuzhin).
- 集約処理の途中で
-State関数が例外をスローした場合に発生するメモリリークを修正しました。これにより #8995 が修正されます。#11496(alexey-milovidov)。 SELECT(max_threads>1)が複数のストリームを持ち、INSERTが 1 つのストリームしか持たない(max_insert_threads==0)場合のINSERT SELECT FINAL実行時に発生するPipeline stuck例外を修正。 #11455 (Azat Khuzhin)。select count() from t, uのようなクエリで誤った結果が返る不具合を修正。 #11454 (Artem Zuikov).- コーデックが返す圧縮サイズを修正。 #11448 (Nikolai Kochetov).
- 非リテラルの引数を持つ圧縮コーデックが設定されたカラムが存在する場合にサーバーがクラッシュしていた問題を修正しました。 #11365 を修正。 #11431(alesapin)。
- テーブルが正常に作成されなかった場合に、MergeTree のシャットダウン時に未初期化メモリの読み取りが発生する可能性がある問題を修正しました。 #11420 (alexey-milovidov).
LowCarinality(T)とNullable(T)を含む JOIN で発生していたクラッシュを修正。 #11380。 #11414 (Artem Zuikov)。- 誤った
USINGキーに対して返されるエラーコードを修正。 #11373。 #11404 (Artem Zuikov)。 - 緯度・経度の範囲外の引数が指定された場合の
geohashesInBoxの動作を修正しました。 #11403 (Vasily Nemkov). joinGet()関数のエラーメッセージを改善。#11389(Artem Zuikov)。- 外部ソートと
LIMITを含むクエリで発生する可能性のあるPipeline stuckエラーを修正しました。#11359 を解決します。#11366(Nikolai Kochetov)。 - ReplicatedMergeTree におけるパーツ送信時に取得していた冗長なロックを削除。 #11354 (alesapin).
- 複数行モードでの clickhouse-client における
\G(縦方向の出力)サポートの不具合を修正しました。これにより #9933 がクローズされます。#11350(alexey-milovidov)。 Lazyデータベース使用時に発生する可能性のあったセグメンテーションフォルトを修正。 #11348 (alexey-milovidov).Joinテーブルエンジンからの(JOIN を伴わない)直接 SELECT 時のクラッシュと誤った NULL 許容性を修正しました。 #11340 (Artem Zuikov)quantilesExactWeightedArrayにおけるクラッシュを修正。#11337 (Nikolai Kochetov).ALTERクエリでメタデータを変更する前に、マージ処理が停止するようになりました。 #11335 (alesapin).parallel_view_processing = 1設定を使用したMATERIALIZED VIEWへの書き込みを再度並列処理できるようにしました。#10241 を修正。#11330 (Nikolai Kochetov)。- 抽出された JSON に、
{または[の対応が取れていない文字列が含まれている場合のvisitParamExtractRawの動作を修正。 #11318 (Ewout)。 - ThreadPool における非常にまれな競合状態を修正しました。 #11314 (alexey-milovidov).
clickhouse-copierにおける軽微なデータ競合を修正。統合テストで検出 #11313 (alexey-milovidov)- 変換処理で未初期化メモリが使用される可能性があった問題を修正しました。例:
SELECT toIntervalSecond(now64())。 #11311 (alexey-milovidov)。 - プライマリキーに Array 型カラムがあり、そのカラムを
emptyまたはnotEmpty関数でフィルタリングするクエリの場合に、インデックス解析が機能しない問題を修正しました。これにより #11286 が解決されます。 #11303(alexey-milovidov)。 - クエリの速度推定が正しくない場合があり、クエリが
max_network_bandwidth、max_execution_speed、またはpriority設定によってスロットリングされているときに、min_execution_speedの制限が機能しない、もしくは誤動作する不具合を修正しました。timeout_before_checking_execution_speedのデフォルト値を 0 以外の値に変更しました。これは、0 のままだとmin_execution_speedおよびmax_execution_speedの設定が効果を持たないためです。これにより #11297 が修正されます。これにより #5732 が修正されます。これにより #6228 が修正されます。ユーザビリティの改善として、clickhouse-clientにおいて、例外メッセージが進捗バーと連結されて表示されないようにしました。 #11296 (alexey-milovidov)。 SET DEFAULT ROLEが誤った引数で呼び出されたときにクラッシュしていた問題を修正しました。これにより #10586 が修正されました。 #11278(Vitaly Baranov)。Protobufフォーマットで不正なデータを読み込んだ際にクラッシュする不具合を修正しました。これにより #5957 と #11203 が解決されます。#11258(Vitaly Baranov)。cache辞書が(有効期限切れのキーしかない場合に)本来の値ではなくデフォルト値を返してしまうバグを修正しました。これは文字列フィールドにのみ影響します。 #11233 (Nikita Mikhaylov)。- 内部クエリ内に定数を含む
VIEWからの読み取り時に発生するエラーBlock structure mismatch in QueryPipelineを修正。 #11181 を解決。 #11205(Nikolai Kochetov)。 Invalid status for associated outputという例外が発生する可能性を修正。 #11200 (Nikolai Kochetov).- これにより、
CREATEクエリで定義されていればprimary.idxがチェックされるようになりました。 #11199 (alesapin)。 Array(Array(LowCardinality))の引数をキャプチャする高階関数で発生する可能性のあるCannot capture columnエラーを修正。 #11185 (Nikolai Kochetov).- 1000 個を超えるキーが存在する場合や一部のバックエンドを使用している場合に失敗する可能性があった
S3のグロビング処理を修正しました。 #11179 (Vladimir Chebotarev). - データスキッピングインデックスが、バックグラウンドマージ中に変更される列(SummingMergeTree、AggregatingMergeTree、および TTL GROUP BY の列)に依存している場合、インデックスが正しく計算されない不具合がありました。この問題は、インデックスの計算処理をマージ後に実行するよう変更し、マージ後のデータに対してインデックスが計算されるようにすることで修正されました。 #11162 (Azat Khuzhin).
- テーブルエンジン=Kafka のテーブルを DROP する際(またはサーバー再起動時)に時々発生していたハングを修正。 #11145 (filimonov).
- パイプラインの変更後に一部壊れていたスレッド数削減用の最適化を修正し、単純なクエリに対してスレッドを過剰に予約してしまう問題を解消。 #11114 (Azat Khuzhin).
- 何もファイナライズされない場合は、mutation のファイナライズタスクでのログ出力を行わないようにしました。 #11109 (alesapin).
- システムログテーブルの構造変更を含むアップデート後のサーバー起動時に発生していたデッドロックを修正しました。 #11106 (alesapin).
- registerDiskS3 のメモリリークを修正しました。 #11074 (Pavel Kovalenko).
- JOIN が PREWHERE と共に使用される場合、または
optimize_move_to_prewhereによって WHERE から PREWHERE が生成される場合に発生するエラーNo such name in Block::erase()を修正。 #11051 (Artem Zuikov). - Kafka エンジンテーブルの終了時に発生し得たデータ取りこぼしの問題を修正。 #11048 (filimonov).
- parseDateTime64BestEffort の引数の解決に関するバグを修正しました。 #10925. #11038 (Vasily Nemkov).
- 現在、1 回の
ALTERクエリ内で同一の列に対してADD/DROPおよびRENAMEを行うことが可能になりました。MODIFYとRENAMEを同時に行った場合の例外メッセージが、これまでよりも分かりやすくなりました。#10669 を部分的に修正しました。#11037(alesapin)。 - S3 URL の解析処理を修正しました。 #11036 (Vladimir Chebotarev)。
LIMITがある場合の二段階のGROUP BYに対するメモリトラッキングを修正。 #11022 (Azat Khuzhin).- テーブルの作成に失敗した場合に、MergeTree でごくまれに use-after-free エラーが発生する不具合を修正しました。 #10986 (alexey-milovidov).
- Atomic データベース向けのメタデータ(rename 用の相対パス)およびデータ(symlink 用の相対パス)の扱いを修正。 #10980 (Azat Khuzhin).
AtomicデータベースエンジンでALTERおよびDROP DATABASEクエリを同時に実行した場合に発生するサーバーのクラッシュを修正。 #10968 (tavplubix).- メソッド
getRawData()の生データサイズの不正値を修正。 #10964 (Igr). - バージョン 20.1 以前との間に存在する二段階の集約処理の非互換性を修正しました。これは、イニシエータノードとリモートノードで異なるバージョンの ClickHouse が使用されており、
GROUP BYの結果セットのサイズが大きく、かつ単一の String 型フィールドで集約が行われる場合に発生します。この問題により、結果において単一のキーに対してマージされていない行が複数含まれることがありました。#10952 (alexey-milovidov). - DistributedBlockOutputStream によって部分的にしか書き込まれていないファイルが送信されないようにしました。 #10940 (Azat Khuzhin).
SELECT count(notNullIn(NULL, []))で発生するクラッシュを修正。 #10920 (Nikolai Kochetov).engine=KafkaのテーブルをDROPする際(またはサーバー再起動時)に時々発生していたハングを修正しました。 #10910 (filimonov).- これにより、
a TO b, c TO aのように複数のALTER RENAMEを実行できるようになりました。 #10895 (alesapin)。 - 同じカラムに対して複数スレッドから集約関数の state から結果を取得するときに発生しうるレースコンディションを修正しました。判明している限り、これは
AggregateFunctionの state を保持しているquanite*関数付きのMemoryエンジンのテーブルを読み出しながらfinalizeAggregation関数を使用した場合にのみ発生します。 #10890 (Nikolai Kochetov). - Distributed テーブルにおけるタプルの後方互換性の問題を修正しました。 #10889 (Anton Popov).
- 存在しないキーにアクセスした場合に StringHashTable で発生する SIGSEGV を修正。 #10870 (Azat Khuzhin).
Atomicエンジンを使用するデータベースからLiveViewテーブルが削除された後にWATCHがハングする不具合を修正しました。 #10859 (tavplubix).ReplicatedMergeTreeにおいて、レプリカが非アクティブになった後もそのレプリカを待ち続けてしまうために、OPTIMIZEクエリ中の一部のALTERがハングする可能性のあったバグを修正しました。 #10849 (tavplubix)。CONSTRAINT式に含まれる列がリネームされた場合、その制約も更新されるようになりました。 #10844 を修正しました。 #10847 (alesapin)。- cache dictionary で発生する可能性のあった未初期化メモリの読み取りを修正。 #10834 (alexey-milovidov).
- Block::sortColumns() の後のカラム順を修正し、これが実際のユースケース(Buffer エンジン)に影響することを示すテストも追加。 #10826 (Azat Khuzhin)。
- 識別子をクォートしない設定時の ODBC ブリッジの不具合を修正しました。これにより #7984 が修正されました。 #10821(alexey-milovidov)。
- UBSan および MSan によって報告された DateLUT の問題を修正。 #10798 (alexey-milovidov).
- キー条件における正しい型変換のために
src_typeを使用します。 #6287 を修正。 #10791 (Andrew Onyshchuk). - 古い libunwind のパッチを削除しました。 https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 これにより、
clangビルドで-fno-omit-frame-pointerを無効にできるようになり、平均して少なくとも 1% の性能向上が得られます。 #10761 (Amos Bird)。 - 複数シャードにまたがって浮動小数点の重みを使用する場合の avgWeighted の動作を修正。 #10758 (Baudouin Giard).
parallel_view_processingの動作を修正しました。これにより、例外が発生した場合でも、MATERIALIZED VIEWへのすべての挿入が例外なく完了するようになりました。 #10241 を修正。 #10757 (Nikolai Kochetov).- -State と併用した際の -OrNull および -OrDefault コンビネータを修正しました。 #10741 (hcz).
- ネストされた型で
generateRandomがクラッシュする問題を修正しました。 #10583 を修正。 #10734(Nikolai Kochetov)。 - マージ後に発生していた可能性がある
SummingMergeTreeにおけるLowCardinality(FixedString)キー列のデータ破損を修正しました。#10489 の問題を修正。#10721(Nikolai Kochetov)。 - 関数でラップされた主キーを、'FINAL' 修飾子および 'ORDER BY' 最適化と併用した際の処理を修正。 #10715 (Anton Popov).
- 関数
h3EdgeAngleで発生し得るバッファオーバーフローの不具合を修正。 #10711 (alexey-milovidov). - 消えてしまう合計値の問題を修正しました。クエリに
JOIN句や、外側のWHERE条件を持つサブクエリが含まれている場合、合計値がフィルタリングされてしまう可能性がありました。 #10674 を修正しました。 #10698(Nikolai Kochetov)。 - HTTP INSERT のアトミシティを修正。これにより #9666 が解決されました。 #10687 (Andrew Onyshchuk)。
- 1つのクエリ内で同一の集合に対して
IN演算子を複数回使用している場合の動作を修正しました。 #10686 (Anton Popov)。 readonly=2かつcancel_http_readonly_queries_on_client_close=1の場合に、クライアントが切断されたときに HTTP リクエストがハングしたままになるバグを修正しました。#7939、#7019、#7736、#7091 が修正されます。#10684(tavplubix)。- AggregateTransform コンストラクタのパラメータ順を修正。 #10667 (palasonic1).
distributed_aggregation_memory_efficientを有効にした場合にリモートクエリが並列実行されない問題を修正。#10655 を修正。#10664(Nikolai Kochetov)。LIMITを含むクエリで結果の行数が誤っていた可能性がある問題を修正。#10566、#10709 を解決。#10660(Nikolai Kochetov)。- 多数のパーツを持つテーブルで、
ALTERの同時実行がロックされてしまう不具合を修正。 #10659 (alesapin). - テーブル起動前にサーバーがシャットダウンされた場合に
StorageBufferで発生するnullptrデリファレンスを修正。 #10641 (alexey-milovidov). HAVING句を含むクエリ(つまりクエリイニシエータサーバー側でのフィルタリングが必要な場合)に対して、分散クエリ用の述語最適化(enable_optimize_predicate_expression=1)を、式の順序を維持することで修正(これだけで修正として十分)し、さらに集約処理では位置インデックスではなくカラム名を使用するように強制しました。修正: #10613, #11413。#10621(Azat Khuzhin)。- LowCardinality 使用時の optimize_skip_unused_shards を修正。 #10611 (Azat Khuzhin).
- サーバー起動時に例外が発生した場合に StorageBuffer でセグメンテーションフォルトが発生する問題を修正。 #10550 を修正。 #10609 (tavplubix)。
SYSTEM DROP DNS CACHEクエリの実行時に、ユーザーが一部の IP アドレスから接続することを許可されているかを確認するために使用されるキャッシュも削除されるようになりました。 #10608 (tavplubix).- 依存テーブルを含むクエリの場合に、
MATERIALIZED VIEWの内部クエリ内でスカラー結果が誤っていた問題を修正しました。 #10603 (Nikolai Kochetov). - 同期ミューテーションに関する条件変数の扱いを修正しました。一部のケースでは、その条件変数へのシグナルが失われてしまう可能性がありました。 #10588 (Vladimir Chebotarev).
loadStoredObject()の完了前にcreateDictionary()が呼び出されることで発生する可能性のあるクラッシュを修正。 #10587 (Vitaly Baranov).the BloomFilter false positive must be a double number between 0 and 1というエラーを修正。#10551。#10569(Winter Zhang)。- 列エイリアスのデフォルト式の型が列の型と異なっていた問題を修正。 #10563 (Azat Khuzhin).
- DateTime と同様に、DateTime64 型と String 型の値の比較を実装しました。#10560 (Vasily Nemkov)。
- マージでコンパクトパーツを別のコンパクトパーツに統合した後に一部のケースで発生する可能性のあるインデックス破損を修正しました。 #10531 (Anton Popov).
- デフォルトで GROUP BY の sharding_key 最適化を無効化し(
optimize_distributed_group_by_sharding_keyは導入時、シャーディングキー解析の複雑さのためデフォルトでオフになっており、その単純な例としてはシャーディングキー内でのifの使用などがある)、WITH ROLLUP/CUBE/TOTALS でも正しく動作するように修正しました。 #10516 (Azat Khuzhin). - 修正: #10263(その PR の後、INSERT 経由での dist 送信が各 INSERT のたびに延期されていた問題) 修正: #8756(その PR は、次のすべての条件が満たされる場合に distributed send が失敗していた(現時点では起こりそうにない構成と思われる):
internal_replication == false、複数のローカルシャード(ハードリンク用コードを有効化)、およびdistributed_storage_policy(EXDEVによりlink(2)が失敗する原因))。#10486(Azat Khuzhin)。 - "max_rows_to_sort" 制限に関するエラーを修正しました。 #10268 (alexey-milovidov).
- 外部ディクショナリを読み取る関数では、呼び出しごとにディクショナリの取得とアクセス権の確認を1回だけ行うようにしました。 #10928 (Vitaly Baranov).
改善
ALTER MODIFY TTLクエリの実行後に、古いデータに対してTTLを適用します。この挙動はmaterialize_ttl_after_modify設定で制御され、デフォルトで有効になっています。 #11042 (Anton Popov)。- C 風のバックスラッシュエスケープを文字列リテラル、
VALUES、および各種テキストフォーマットでパースする際(これは SQL 標準に対する拡張であり、ClickHouse と MySQL に特有のものです)、未知のエスケープシーケンス(例:\%や\w)が見つかった場合は、バックスラッシュをそのまま残します。これにより、LIKEやmatch正規表現の使用がより便利になり(name LIKE 'used\\_cars'ではなくname LIKE 'used\_cars'と書くだけで済みます)、同時に互換性も向上します。これにより #10922 が修正されました。#11208(alexey-milovidov)。 - Decimal 値を読み込む際に、小数点以下の余分な桁を切り捨てます。この動作により、MySQL および PostgreSQL との互換性が向上します。これにより #10202 が修正されました。 #11831 (alexey-milovidov).
- ZooKeeper 上のメタデータがすでに削除され存在しない場合(テスト用途で TestKeeper を使用していてサーバーが再起動された場合も同様)、レプリケートテーブルを DROP できるようにしました。ZooKeeper との通信でエラーが発生していても、レプリケートテーブルを RENAME できるようにしました。これにより #10720 が修正されました。 #11652 (alexey-milovidov).
- 文字列から Decimal を読み取る際の診断メッセージをわずかに改善しました。これにより #10202 が解決されます。#11829(alexey-milovidov)。
- シグナルハンドラ内の
sleep呼び出しを修正しました。期待されていた時間よりも短い時間しかスリープしていませんでした。 #11825 (alexey-milovidov). - (Linux のみ)OS 関連のパフォーマンスメトリクス(CPU および I/O 向け)は、
CAP_NET_ADMINケーパビリティがなくても動作します。#10544 (Alexander Kazakov)。 hostName関数のエイリアスとしてhostnameを追加しました。この機能は Yandex.Metrica の Victor Tarnavskiy 氏により提案されました。 #11821 (alexey-milovidov)。- クロスレプリケーションクラスター上での分散
DDL(update/delete/drop partition)のサポートを追加しました。 #11703 (Nikita Mikhaylov). - 起動時に、いずれかの listen アドレスで待ち受けできない場合(例: Docker 内で IPv6 が利用できない場合)は、サーバーログにエラーではなく警告を出力するようにしました。なお、列挙されたすべてのアドレスでの待ち受けに失敗した場合は、これまでどおり起動を拒否します。これにより #4406 が修正されました。 #11687 (alexey-milovidov)。
- Docker イメージの起動時にデフォルトユーザーとデータベースを作成。 #10637 (Paramtamtam).
- 複数行クエリがサーバーログに出力される際、行が連結されていました。複数行の文字列リテラル、識別子、単一行コメントを含む場合でも正しく処理されるように修正しました。これにより #3853 が解決されました。#11686(alexey-milovidov)。
CREATE USER、CREATE ROLE、ALTER USER、SHOW CREATE USER、SHOW GRANTSなどのコマンドで、複数の名前を指定できるようになりました。 #11670 (Vitaly Baranov)- クロスレプリケーション構成のクラスターにおける分散 DDL(
UPDATE/DELETE/DROP PARTITION)のサポートを追加しました。 #11508 (frank lee). - ユーザーがパスワードを明示的に指定した場合、
clickhouse-clientとclickhouse-benchmarkのコマンドライン引数からその値をクリアします。これにより、psなどのツールによるパスワードの露出を防ぎます。 #11665 (alexey-milovidov)。 - 実行中のバイナリと一致しない場合は、ELF ファイルからのデバッグ情報を使用しないようにしました。これは、スタックトレース内で誤った関数名やソース位置が出力されるのを防ぐために必要です。これにより #7514 を修正しました。 #11657(alexey-milovidov)。
- parseDateTimeBestEffortOrNull/Zero 関数で値を完全にパースできなかった場合に NULL/ゼロを返すようにしました。これにより #7876 が修正されました。 #11653 (alexey-milovidov)。
- リクエスト URL 内の空のパラメータをスキップします。これは
http://localhost:8123/?&a=bやhttp://localhost:8123/?a=b&&c=dのように URL を記述した場合に発生する可能性があります。これにより #10749 がクローズされました。 #11651(alexey-milovidov)。 groupArrayArrayとgroupUniqArrayArrayをSimpleAggregateFunctionとして使用できるようにしました。 #11650 (Volodymyr Kuznetsov)。- 他の型のインデックス条件を解析する際に、暗黙的な型変換により定数文字列との比較を許可します。これにより #11630 が解決される可能性があります。#11648(alexey-milovidov)。
- https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 設定ファイルでデフォルトの HTTPHandlers を指定できるように対応。 #11628 (Winter Zhang).
- Kafka エンジンで利用可能な入力フォーマットを増やしました。フラッシュが早期に発生する問題を修正しました。トピックのパーティション数よりも
kafka_num_consumersが大きい場合のパフォーマンス問題を修正しました。 #11599 (filimonov). multiple_joins_rewriter_version=2のロジックを改善し、ラムダ式エイリアスに対する不明な列エラーを修正。#11587 (Artem Zuikov).- カラム定義リストをパースできない場合の例外メッセージを改善しました。これにより #10403 がクローズされました。 #11537 (alexey-milovidov).
- VIEW に対する
enable_optimize_predicate_expression=1のロジックを改善。 #11513 (Artem Zuikov). - ライブビュー テーブルで PREWHERE がサポートされました。 #11495 (vzakaznikov).
- ユーザーがアドレスから接続することを許可されているかを確認するために使用される DNS キャッシュを自動更新します。 #11487 (tavplubix).
OPTIMIZE FINALは、同時にマージ処理が実行されている場合でもマージを強制的に行います。これにより #11309 と #11322 がクローズされました。#11346(alexey-milovidov)。- clickhouse-client でキャンセルされたクエリの出力を抑制しました。以前のバージョンでは、クエリをキャンセルするために Ctrl+C を押しても、結果がターミナルに出力され続けることがありました。これにより、#9473 がクローズされました。 #11342 (alexey-milovidov)。
- これにより、各クエリの後に履歴ファイルが更新され、複数のクライアントが同じ履歴ファイルを使用しても競合状態が発生しなくなりました。これによって #9897 が修正されました。 #11453 (Tagir Kuskarov)。
- 設定再読み込み中のログメッセージを改善。 #11341 (alexey-milovidov).
- 一部の場合に、
clickhouse-clientまたはclickhouse-formatによってフォーマットされたクエリから末尾の空白文字を削除しました。 #11325 (alexey-milovidov)。 - 設定 "output_format_pretty_max_value_width" を追加しました。値がこの長さを超える場合は、ターミナルに過度に大きな値が出力されるのを避けるために、途中で切り詰められます。これにより #11140 が解決されました。#11324(alexey-milovidov)。
- メモリマッピングが不足している場合の例外メッセージを改善しました。これにより #11027 が解決されました。#11316(alexey-milovidov)。
- ASOF JOIN で (U)Int8、(U)Int16、Date 型をサポート。 #11301 (Artem Zuikov).
- Kafka テーブル向けに kafka_client_id パラメータをサポートしました。また、ClickHouse が Kafka と通信する際に使用するデフォルトの
client.idを、より情報量が多く実用的な値に変更しました。 #11252 (filimonov). - 例外発生時にも
DistributedFilesToInsertメトリクスの値を保持するようにしました。以前のバージョンでは、ファイルを送信しようとするタイミングで値が設定されていましたが、例外が発生してファイルがまだ保留中の状態でも、値はゼロになっていました。現在は、ファイルシステム上で保留中のファイル数を表す値になりました。 #11220 (alexey-milovidov). DOUBLE PRECISIONやCHAR VARYINGのような複数語からなるデータ型名への対応を追加し、SQL との互換性を向上させました。 #11214 (Павел Потемкин).- 一部のデータ型に対してシノニムを追加しました。 #10856 (Павел Потемкин).
- クエリログは既定で有効になりました。 #11184 (Ivan Blinkov).
- 認証方式を
system.usersテーブルおよびSHOW CREATE USERクエリの結果に表示するようにしました。 #11080 (Vitaly Baranov). Memoryデータベースエンジンに対して明示的にDROP DATABASEを実行した際にデータを削除するようにしました。#10557 を修正。#11021(tavplubix)。rdkafkaライブラリの内部スレッドにスレッド名を設定しました。rdkafkaのログをサーバーログに出力できるようにしました。 #10983 (Azat Khuzhin).- クエリ内の Unicode の空白文字をサポートしました。これにより、Word や Web ページからクエリをコピー&ペーストした場合にも問題なく動作します。この変更で #10896 が修正されました。 #10903 (alexey-milovidov)。
- 関数
tupleElementで、インデックスとして大きな UInt 型を使用できるようにしました。 #10874 (hcz). - Distributed テーブルへの INSERT 時に prefer_localhost_replica/load_balancing の設定が反映されるようにしました。 #10867 (Azat Khuzhin).
min_insert_block_size_rows_for_materialized_views、min_insert_block_size_bytes_for_materialized_views設定を導入しました。これらの設定はmin_insert_block_size_rowsおよびmin_insert_block_size_bytesと似ていますが、MATERIALIZED VIEWに挿入されるブロックに対してのみ適用されます。これにより、マテリアライズドビューへの書き込み時のブロックのまとめ方を制御し、過剰なメモリ使用を回避できます。 #10858 (Azat Khuzhin).- サーバーのシャットダウン中にレプリケーションキューから発生していた例外が発生しないようにしました。Fixes #10819. #10841 (alesapin).
varSamp、varPopが数値誤差により負の結果を返さないようにし、stddevSamp、stddevPopが負の分散から計算されないようにします。これにより #10532 が修正されました。 #10829 (alexey-milovidov).- DNS 例外メッセージを改善しました。これにより #10813 が修正されました。 #10828 (alexey-milovidov).
- 一部のパースエラー発生時の HTTP レスポンスコードを 400 Bad Request に変更しました。この修正は #10636 に対応しています。#10640(alexey-milovidov)。
- clickhouse-client が clickhouse-server より新しい場合にメッセージを出力します。 #10627 (alexey-milovidov).
INSERT INTO [db.]table WATCHクエリのサポートを追加しました。 #10498 (vzakaznikov).- clickhouse-client で quota_key を指定できるようにしました。この変更により #10227 がクローズされます。#10270 (alexey-milovidov)。
パフォーマンスの向上
- 複数のレプリカがマージ、ミューテーション、パーティションの削除、移動および置換を同時に割り当てられるようになりました。これにより #10367 がクローズされました。 #11639 (alexey-milovidov) #11795 (alexey-milovidov)。
- テーブルのソートキーを考慮した
GROUP BYの最適化が、optimize_aggregation_in_order設定で有効になります。 #9113 (dimarub2000). FINALを伴うSELECTは並列実行されるようになりました。使用されるスレッド数を制限するための設定max_final_threadsを追加しました。#10463 (Nikolai Kochetov)。INSERT SELECTまたは、並列パース時に小さなブロックが生成される典型的なケースにおける clickhouse-client を用いた INSERT によって、INSERT クエリのパフォーマンスを改善しました。これは #11275 を修正します。DEFAULT フィールドに対して CONSTRAINT が動作していなかった問題を修正しました。これは #11273 を修正します。TEMPORARY テーブルに対して CONSTRAINTS が無視されていた問題を修正しました。これは #11274 を修正します。#11276(alexey-milovidov)。optimize_aggregators_of_group_by_keys設定で有効化される、SELECT 句において GROUP BY キーに対する min/max/any 集約関数を除去する最適化。 #11667 (xPoSx). #11806 (Azat Khuzhin).optimize_move_functions_out_of_anyを有効にすると、すべての演算をany関数の外に移動する新しい最適化。#11529 (Ruslan)。- Pretty フォーマット使用時の対話モードにおける
clickhouse-clientのパフォーマンスを改善しました。以前のバージョンでは、UTF-8 文字列の可視幅の計算にかなりの時間がかかる場合がありました。これにより #11323 がクローズされました。 #11323 (alexey-milovidov)。 ORDER BYと小さいLIMIT(max_block_size未満)が指定されたクエリのパフォーマンスが改善されました。 #11171 (Albert Kidrachev).- ランタイム CPU 検出機能を追加し、最適な関数実装を選択してディスパッチするようにしました。複数ターゲット向けコード生成をサポートしました。これにより #1017 が解決されました。 #10058 (DimasKovas)。
- デフォルトで ClickHouse バイナリの
mlockを有効化しました。これにより、高い I/O 負荷がかかった際に ClickHouse 実行ファイルがページアウトされるのを防ぎます。 #11139 (alexey-milovidov). sum集約関数を使用し、GROUP BY キーを含まないクエリが数倍高速に実行されるようになりました。 #10992 (alexey-milovidov).- 単純なキーを対象とする
ORDER BYで使用される基数ソートについて、いくつかの冗長なデータ移動を削除することで性能を改善しました。#10981(Arslan Gumerov)。 - MergeJoin において左テーブルのより大きな部分をソートするようにしました。左テーブル側のブロックをメモリにバッファします。左テーブル側ブロックのバッファサイズを制御するための
partial_merge_join_left_table_buffer_bytes設定を追加しました。 #10601 (Artem Zuikov). - サブクエリから重複した ORDER BY と DISTINCT を削除します。この最適化は
optimize_duplicate_order_by_and_distinctで有効になります #10067 (Mikhail Malafeev)。 - この機能は、GROUP BY 句における他のキーの関数呼び出しを除去するもので、
optimize_group_by_function_keysによって有効化されます #10051(xPoSx)。 - 集約関数から算術演算を外に出す新しい最適化を追加し、
optimize_arithmetic_operations_in_aggregate_functionsで有効化できます #10047 (Ruslan)。 - curl の代わりに Poco ベースの S3 用 HTTP クライアントを使用します。これにより、S3 ストレージおよびテーブル関数のパフォーマンスが向上し、メモリ使用量が削減されます。 #11230 (Pavel Kovalenko).
- 制限に基づく再スケジューリングが常に行われていたことが原因の Kafka のパフォーマンス問題を修正しました。 #11149 (filimonov)。
- jemalloc で percpu_arena:percpu を有効化しました(スレッドプールによるメモリの断片化を軽減します)。 #11084 (Azat Khuzhin).
- S3 HTTP クライアントからレスポンスを読み取る際のメモリ使用量を最適化しました。#11561 (Pavel Kovalenko)。
- デフォルトの Kafka 設定を調整してパフォーマンスを向上させました。#11388(filimonov)。
実験的機能
- データ型
Point(Tuple(Float64, Float64)) とPolygon(Array(Array(Tuple(Float64, Float64))) を追加しました。 #10678 (Alexey Ilyukhov). - 配列内で部分シーケンスを検索できる
hasSubstr関数を追加しました。注意: この関数は予告なく名称が変更される可能性があります。 #11071 (Ryad Zenine). - OpenCL サポートおよびビトニックソートアルゴリズムを追加しました。これは単一列内の整数型データのソートに使用できます。
-DENABLE_OPENCL=1フラグを付けてビルドする必要があります。他のソートアルゴリズムではなくビトニックソートアルゴリズムを使用するには、設定オプションspecial_sortにbitonic_sortを設定し、OpenCL が利用可能であることを確認してください。この機能は性能向上などを目的としたものではなく、あくまでサンプルおよびデモ用途として提供されています。この分野でさらなる開発が行われない場合、近い将来削除される可能性があります。 #10232 (Ri).
Build/Testing/Packaging の改善
programsおよびutilsで clang-tidy を有効化。 #10991 (alexey-milovidov).tzdataへの依存関係を削除し、/usr/share/zoneinfoディレクトリが存在しない場合でもエラーにならないようにしました。tzdataがシステムにインストールされていなくても、すべてのタイムゾーンは ClickHouse で問題なく動作します。 #11827 (alexey-milovidov)。- MSan および UBSan のストレステストを追加しました。すでに機能テスト用の MSan と UBSan は存在しており、「stress」テストは別の種類のテストであることに注意してください。 #10871 (alexey-milovidov)。
- クラッシュメッセージにコンパイラのビルドIDを出力するようにしました。これにより、どのバイナリがクラッシュしたかを、わずかながらより確実に特定できるようになります。新しい関数
buildIdを追加しました。 #11824 (alexey-milovidov). - FREEZE クエリの後でもミューテーションが引き続き正常に動作することを確認するテストを追加しました。 #11820 (alexey-milovidov).
- テスト名に「fail」という部分文字列を含めないようにしました。ブラウザでテスト結果を確認する際に、Ctrl+F で「fail」を検索すると不便になるためです。 #11817 (alexey-milovidov).
- HTTPHandlerFactory から未使用のインポートを削除。 #11660 (Bharat Nallan).
- copier の実行インスタンスをランダムにサンプリングするようにしました。これは
Too many simultaneous queriesエラーを回避するために必要です。また、タイムアウトを延長し、障害発生の確率を下げました。 #11573 (Nikita Mikhaylov). - 不足していた include を修正。 #11525 (Matwey V. Kornilov).
- 古いサンプルプログラムを削除してビルド時間を短縮しました。また、孤立していた機能テストもいくつか見つかりました。 #11486 (alexey-milovidov).
- CI ビルドで使用する ccache のサイズを増加。 #11450 (alesapin).
- deb ビルドでは unit_tests_dbms のみを残すようにしました。 #11429 (Ilya Yatsishin).
- librdkafka をバージョン 1.4.2 に更新しました。#11256 (filimonov)。
- CMake ビルドファイルをリファクタリング。 #11390 (Ivan).
- いくつかの不安定だった統合テストを修正しました。 #11355 (alesapin)。
- UBSan で実行されるユニットテスト向けのサポートを追加。 #11345 (alexey-milovidov).
- 統合テスト
test_insertion_sync_fails_with_timeoutから冗長なタイムアウトを削除。#11343(alesapin)。 - clickhouse-test でハングしているクエリをより確実に検出できるようにしました。 #11321 (alexey-milovidov).
- サーバーがデバッグビルド、またはサニタイザーを有効にしてビルドされている場合に警告を出すようにしました。 #11304 (alexey-milovidov).
- 現在、clickhouse-test はテストを実行する前にサーバーの生存確認を行います。 #11285 (alesapin)
- 潜在的に不安定なテスト
00731_long_merge_tree_select_opened_files.shを修正。頻繁に失敗するわけではありませんが、ThreadFuzzer を使った実験中に、このテストにおけるレースコンディションの可能性が判明しました(#9814)。例については link を参照してください。#11270(alexey-milovidov)。 curlの呼び出しがタイムアウトした場合は、CI でテストを再実行します。これは、当社の CI インフラストラクチャで典型的な 10 秒以上のシステムハングが原因で発生する可能性があります。これにより #11267 が修正されます。 #11268 (alexey-milovidov)。- @donmikel による Join テーブルエンジン用のテストを追加しました。これにより #9158 がクローズされます。#11265(alexey-milovidov)。
- ユニットテスト内のいくつかの軽微なエラーを修正。 #11262 (alesapin).
- これで、
cctzライブラリ用リンカコマンドの一部が他のライブラリと順序を入れ替えられることはなくなりました。 #11213 (alesapin). - /programs/server を実行プログラムとライブラリに分割。#11186(Ivan)。
- protobuf および gRPC 向けのビルドスクリプトを改善。 #11172 (Vitaly Baranov).
- 動作していなかったパフォーマンス テストを有効化しました。 #11158 (alexey-milovidov).
- 任意の ClickHouse インスタンスを起動する前に、テスト用のルート S3 バケットを作成します。 #11142 (Pavel Kovalenko).
- 非定数ポリゴン用の性能テストを追加。 #11141 (alexey-milovidov)。
00979_live_view_watch_continuous_aggregatesテストの修正。#11024(vzakaznikov)。- インテグレーションテストで tmpfs 上で ZooKeeper を実行できる機能を追加しました。 #11002 (alesapin).
- odbc-bridge の起動を指数バックオフで待機するようにしました。CI 環境では、以前の 200 ms の待機時間では不十分でした。 #10990 (alexey-milovidov).
- 非決定的なテストを修正しました。 #10989 (alexey-milovidov)。
- 空の外部データ用のテストを追加しました。 #10926 (alexey-milovidov)。
- テストごとにデータベースが再作成されます。これによりテスト間の独立性が高まります。 #10902 (alexey-milovidov).
- カラム関連のコードにアサーションをさらに追加しました。 #10833 (alexey-milovidov).
- サニタイザとの連携を改善しました。サニタイザの失敗メッセージに
query_idに関する情報を含めて表示するようにしました。 #10832 (alexey-milovidov). - "Split build smoke test" チェックにおける明らかなレースコンディションを修正。 #10820 (alexey-milovidov)。
- MergeTreeIndexFullText における MSan の誤検出レポートを修正しました。この問題は最初に #9968 で発生しました。#10801(alexey-milovidov)。
- MariaDB クライアントライブラリ向けの MSan サプレッションを追加。 #10800 (alexey-milovidov).
- gRPC の make が protobuf ファイルを見つけられなかった問題を、正しい参照先を追加して Makefile を修正することで解決しました。 #10794 (mnkonkova).
- base、utils、programs に対して追加の警告(
-Weverything)を有効にします。ほとんどのコードではすでに有効になっている点に注意してください。 #10779 (alexey-milovidov)。 - ライブラリからの警告抑制設定が、誤って public として公開されていました #10396。 #10776(alexey-milovidov)。
- #10396 で誤って削除されていたパッチを復元。#10774(alexey-milovidov)。
- パフォーマンステストのエラーを修正 (その2)。 #10773 (alexey-milovidov).
- パフォーマンステストの不具合を修正。 #10766 (alexey-milovidov).
- クロスビルドで使用するコンパイラを clang-10 に更新しました。#10724(Ivan)。
- RPM パッケージのインストール手順を更新しました。Denis(TG ログイン @ldviolet)の提案に基づき、Arkady Shejn によって実装されました。#10707 (alexey-milovidov).
tests/queries/0_stateless/01246_insert_into_watch_live_view.pyテストの修正を試みています。 #10670 (vzakaznikov).- 00979_live_view_watch_continuous_aggregates.py テストを修正して再度有効化。 #10658 (vzakaznikov).
- ASan ストレステストで発生する OOM 問題を修正。 #10646 (alexey-milovidov).
- clang-10 への移行後に HashTable で発生した UBSan のレポート(nullptr へのゼロ加算)を修正。 #10638 (alexey-milovidov).
- コンパイル時の tzdata 処理において、
ld(bfd)リンカーへの外部呼び出しを削除しました。#10634(alesapin)。 lldを使用して blob(リソース)をリンクできるようにしました。 #10632 (alexey-milovidov).LZ4ライブラリにおける UBSan のレポートを修正しました。 #10631 (alexey-milovidov)。あわせて https://github.com/lz4/lz4/issues/857 も参照してください。- LZ4 を最新の開発ブランチに更新。#10630(alexey-milovidov)。
- 安定版バージョンの一覧を含む、自動生成の機械可読ファイルを追加しました。 #10628 (alexey-milovidov)。
capnp::UnalignedFlatArrayMessageReader用のcapnprotoのバージョンチェックを修正。 #10618 (Matwey V. Kornilov).- テスト時のメモリ使用量を削減。 #10617 (alexey-milovidov).
- 新しい Live View テストでハードコードされていたタイムアウトを修正。 #10604 (vzakaznikov).
- tests/queries/0_stateless/helpers/client.py でクライアントをオープンする際のタイムアウトを延長。 #10599 (vzakaznikov).
- clang ビルド向けに ThinLTO を有効化(#10435 の続き)。#10585(Amos Bird)。
- fuzzer を追加し、oss-fuzz との統合に向けて準備。 #10546 (kyprizel).
- FreeBSD 向けビルドを修正。 #10150 (Ivan).
- pytest フレームワークを使用するクエリテスト向けの新しいビルドを追加しました。 #10039 (Ivan).
ClickHouse リリース v20.4
ClickHouse リリース v20.4.8.99-stable 2020-08-10
バグ修正
parseDateTimeBestEffort関数に、UNIX タイムスタンプが引数として渡されたときに発生するエラーを修正しました。これにより #13362 が解決されました。 #13441 (alexey-milovidov).- NaN 値を含む Float 型に対して呼び出された
uniqExact、topK、sumDistinctなどの集計関数における、潜在的な性能低下と結果がわずかに誤る問題を修正しました。この問題はデバッグビルドで assert をトリガーすることもありました。この修正は #12491 を解決します。 #13254(alexey-milovidov)。 - リテラル NULL ではない nullable な constexpr を条件として使用する if 関数の不具合を修正しました。#12463 の問題を修正。#13226 (alexey-milovidov).
- 配列要素と配列添字の両方が Nullable であるケースにおける
arrayElement関数のアサートを修正しました。これにより #12172 が解決されました。 #13224(alexey-milovidov)。 - 関数を用いたインデックスの誤った解析を修正しました。
MergeTreeテーブルの読み取り時に、誤ったパーツをプルーニングしてしまう可能性がありました。#13060 と #12406 の問題を修正しました。#13081(Anton Popov)。 - ローカルレプリカからの
SELECTで使用するスレッド数に対する不要な制限を修正しました。 #12840 (Nikolai Kochetov). WITH TOTALSを含むクエリで発生する可能性があった、データ中の余分なオーバーフロー行を修正しました。 #12747 (Nikolai Kochetov).IN句内で関数として解釈される大きなタプルに対するパフォーマンスを修正しました。ユーザーが何らかのよく分からない理由でWHERE x IN (1, 2, ...)ではなくWHERE x IN tuple(1, 2, ...)と記述した場合のケースです。 #12700 (Anton Popov).input_format_parallel_parsingのメモリトラッキングを修正(スレッドをグループに紐付けることで対応)。 #12672 (Azat Khuzhin).- #12293 サブクエリに WITH 句が含まれている場合でも述語をプッシュダウンできるよう修正しました。#12663(Winter Zhang)。
- #10572 定数式を用いた Bloom フィルターインデックスの問題を修正しました。 #12659 (Winter Zhang).
- ブローカーが利用できない場合などに
StorageKafkaで発生していたSIGSEGVを修正しました。 #12658 (Azat Khuzhin). Array(UUID)型の引数を取る関数ifのサポートを追加しました。これにより #11066 が修正されました。 #12648 (alexey-milovidov).- キャッシュレイアウトを使用する外部ディクショナリにおいて、サーバーのクラッシュを引き起こす可能性のあったレースコンディションを修正しました。 #12566 (alesapin).
- DROP TABLE 時に Distributed テーブルのデータ(非同期 INSERT のブロック)も削除されるようになりました。 #12556 (Azat Khuzhin).
enable_mixed_granularity_parts=1のときにALTER DELETEクエリ実行後に古いパーツが破損する不具合を修正しました。これにより #12536 が修正されます。 #12543(alesapin)。in関数に不正な数の引数が指定された場合の例外メッセージを改善。 #12529 (Anton Popov).- コンパクトパーツからの読み取り時のパフォーマンス問題を修正しました。 #12492 (Anton Popov).
- 辞書キーの式で結合する場合(
t JOIN dict ON expr(dict.id) = t.id)に発生していた辞書 JOIN のクラッシュを修正しました。このケースでは辞書 JOIN の最適化を無効化するようにしました。 #12458 (Artem Zuikov). - StorageMerge 使用時に発生する可能性のあったセグメンテーションフォールトを修正しました。#12054 をクローズ。#12401(tavplubix)。
WITH FILL修飾子での列の順序の扱いを修正しました。以前は、ORDER BY句で指定した列の順序が考慮されていませんでした。 #12306 (Anton Popov).- 仮想列(
Mergeテーブルにおける_tableなど)によるフィルタリングや、system.tablesからクエリする際のデータベース名でのフィルタリングのように、システムテーブルのindex列でデータをフィルタリングする式があり、その式がNullable型を返す場合に発生する「bad cast」例外を回避します。これにより #12166 が修正されます。 #12305(alexey-milovidov)。 - TrieDictionary のロードに失敗した場合にエラーを表示するようにしました。 #12290 (Vitaly Baranov).
- 空の配列に対して
arrayFill関数が誤って動作し、クラッシュを引き起こす可能性がありました。この変更により #12263 が修正されました。#12279(alexey-milovidov)。 LowCardinality型に対する共通の型への変換を実装しました。これにより、LowCardinality型のカラムとその他のカラムを持つテーブルに対してUNION ALLを実行できるようになりました。これにより #8212 が修正され、#4342 も修正されました。#12275(alexey-milovidov)。StorageFileへの複数の連続した挿入時に、一部の特殊な型に対してヘッダーが複数回書き込まれてしまう問題を修正しました。これにより #6155 が解決されました。 #12197 (Nikita Mikhaylov).- 0 または 1 以外の
UInt8値に対する論理関数を修正しました。 #12196 (Alexander Kazakov)。 - max_memory_usage* の上限をプロセスの常駐メモリ量までに制限しました。 #12182 (Azat Khuzhin).
- GROUP BY の単射関数の除去処理中における
dictGetの引数チェックを修正しました。 #12179 (Azat Khuzhin). - ODBC 接続がスキーマをサポートしていない場合、辞書ソースのテーブル名をスキーマ名とテーブル名に分割しないようにしました。 #12165 (Vitaly Baranov).
ALTER DELETEにおいて、条件式が NULL と評価される場合にレコードが削除される誤ったロジックを修正しました。これにより #9088 が修正され、#12106 がクローズされます。#12153(alexey-milovidov)。- エイリアスが存在する場合の、外部 DBMS(例: MySQL、ODBC)向けクエリ変換を修正しました。これにより #12032 が解決されます。#12151 (alexey-milovidov)。
- 整数除算でオーバーフローが発生する可能性を修正しました。この変更により #12119 が修正されました。#12140(alexey-milovidov)。
greatCircleDistanceとgeoDistanceにおける無限ループが発生する可能性のあった問題を修正しました。これにより #12117 が修正されます。#12137(alexey-milovidov)。- 「pid」ファイルの扱いを適正化しました。以前のバージョンでは、サーバーが適切にシャットダウンされずに強制終了され、その後に以前に動作していたサーバーと同じ pid を持つ別のプロセスが存在する場合、サーバーの起動が拒否されることがありました。また、別のサーバーが稼働中であっても、サーバーの起動に失敗した際に pid ファイルが削除されてしまうこともありました。これにより #3501 が修正されました。 #12133 (alexey-milovidov)。
- ENGINE=Dictionary を使用するテーブルの辞書に対する依存関係の処理を修正しました。これにより #10994 および #10397 の問題が修正されます。 #12116 (Vitaly Baranov).
UNIONを含む SELECT 文で、スレッド総数に対する誤った制限値が原因となっていたパフォーマンス問題を修正しました。#12030 を修正。 #12103 (Nikolai Kochetov)。-StateResampleコンビネータで発生していたセグメンテーションフォールトを修正しました。 #12092 (Anton Popov).SELECTクエリに対してsystem.quey_log内の空のresult_rowsおよびresult_bytesメトリクスを修正しました。Issue #11595 を修正。#12089(Nikolai Kochetov)。VIEWからの SELECT でスレッド数を不必要に制限していた問題を修正しました。 #11937 を修正。 #12085 (Nikolai Kochetov)。PREWHEREに誤った型を使用した際に発生する可能性があったクラッシュを修正しました。#12053、#12060 を解決しました。#12060(Nikolai Kochetov)。LowCardinality型に対する関数defaultValueOfArgumentTypeで発生していたExpected single dictionary argument for functionエラーを修正しました。これにより #11808 が解決されました。#12056(Nikolai Kochetov)。Tuple(LowCardinality)引数を持つ高階関数で発生していたCannot capture columnエラーを修正しました。これにより #9766 が解決されました。 #12055(Nikolai Kochetov)。- データベースをロードする際にテーブルメタデータを並列に解析するようにしました。これにより、大量のテーブルが存在する場合にサーバーの起動が遅くなる問題が解消されます。 #12045 (tavplubix).
- Enum 型に対しては
topK集約関数が Enum を返すようにしました。これにより、#3740 を修正します。#12043(alexey-milovidov)。 - 制約が定数式かどうかをチェックするように修正しました。これにより #11360 が修正されました。 #12042 (alexey-milovidov)。
Nullable列を含むタプルの誤った比較を修正しました。 #11985 を解決。 #12039(Nikolai Kochetov)。- allow_introspection_functions=0 の場合のアクセス権限の計算を修正しました。 #12031 (Vitaly Baranov)。
- サイズの異なる
FixedString型の引数を指定して関数ifを呼び出した際に、誤った結果が返ったりクラッシュが発生したりする可能性があった問題を修正しました。これにより #11362 が修正されました。 #12021(alexey-milovidov)。 - 返される式が関数
neighborのみであるクエリは、オフセット-9223372036854775808で関数が呼び出された場合、空の結果を返すことがあります。この不具合を修正しました #11367。 #12019 (alexey-milovidov). - allow_ddl=0 の場合のアクセス権計算を修正。 #12015 (Vitaly Baranov).
- クラッシュの原因となり得る
generateRandom内の配列サイズのオーバーフローの可能性を修正しました。この修正は #11371 を解決します。 #12013 (alexey-milovidov)。 - 浮動小数点例外を引き起こす可能性のあった不具合を修正しました。これにより #11378 がクローズされます。#12005(alexey-milovidov)。
- サーバー起動時のログメッセージ内の誤った設定名を修正しました。 #11997 (alexey-milovidov).
ValuesフォーマットでQuery parameter was not setエラーが発生する問題を修正。 #11918 を解決。 #11936(tavplubix)。- クエリ内の置換(パラメータ化クエリ)に対するエイリアスを保持するようにしました。これにより #11914 を修正しました。 #11916 (alexey-milovidov)。
- ストレージポリシーをデフォルトから変更した際にデータが移動されない不具合を修正。 #11893 (Vladimir Chebotarev).
DateTime64のパース時に発生する可能性のあった浮動小数点例外を修正しました。これにより #11374 が修正されました。#11875(alexey-milovidov)。- HTTP インターフェイス経由のメモリ計上を修正しました(
wait_end_of_query=1の場合に影響が大きくなることがあります)。#11840(Azat Khuzhin)。 - 同値性を確認する前に、ZooKeeper に保存されているメタデータを解析するようにしました。 #11739 (Azat Khuzhin).
パフォーマンスの改善
- リテラルを引数に取る
IN演算子でインデックスが使用されず、v19.3 前後で発生していたパフォーマンス低下を修正しました。これにより #10574 が解消されています。 #12062(nvartolomei)。
ビルド/テスト/パッケージングの改善
- Dockerfile 内で、最初の
apt-get updateの前にca-certificatesをインストールするようにしました。 #12095(Ivan Blinkov)。
ClickHouse リリース v20.4.6.53-stable 2020-06-25
バグ修正
prewhere条件でNullable型のカラムを使用した場合に発生するまれなクラッシュを修正。#11608 の継続対応。#11869(Nikolai Kochetov)。- 高階関数内で
arrayJoinを許可しないようにしました。プロトコル同期の不整合を引き起こしていたためです。これにより #3933 が解決されました。 #11846 (alexey-milovidov). - FixedString と定数 String の比較で誤った結果が返される不具合を修正しました。これにより #11393 が解決されます。このバグはバージョン 20.4 で導入されました。 #11828(alexey-milovidov)。
- 条件に NULL が含まれる場合に
if()が誤った結果を返す問題を修正。 #11807 (Artem Zuikov). - クエリでの過剰なスレッド使用を修正。 #11788 (Nikolai Kochetov).
SELECT *, xyz.*のような、本来はエラーになるべきクエリが成功してしまっていた問題を修正しました。 #11753 (hexiaoting).- メタデータの ALTER 実行中は、レプリケートされたフェッチがキャンセルされるようになりました。 #11744 (alesapin).
- Values 入力フォーマット内の複合リテラルに対する誤った型推論により発生していた LOGICAL_ERROR を修正。 #11732 (tavplubix).
- 定数列に対する
ORDER BY ... WITH FILLの動作を修正。 #11697 (Anton Popov). - XDBC bridge と通信する際に適切なタイムアウトを渡すようにしました。これまで、bridge の生存確認およびメタ情報の受信時にタイムアウトが考慮されていませんでした。 #11690 (alexey-milovidov).
- エイリアスを含む
ORDER BY句と併用した際のLIMIT n WITH TIESの動作を修正。 #11689 (Anton Popov). system.mutationsの状態が不正になる原因となっていたエラーを修正しました。サーバーがレプリケーションキューにMUTATE_PARTタスクを保持したまま実行しようとしているにもかかわらず、ミューテーション全体がすでに完了しているかのように表示される場合がありました。この変更で #11611 が修正されました。 #11681(alesapin)。- 大文字小文字を区別しないフラグ付きの正規表現のサポートを追加しました。これにより #11101 と #11506 が修正されました。 #11649(alexey-milovidov)。
- 行レベルセキュリティが設定されている場合、単純な COUNT クエリに対する最適化を削除しました。以前のバージョンでは、ユーザーはフィルタ後の件数ではなくテーブル内の全レコード数を取得していました。この変更により #11352 が修正されました。#11644(alexey-milovidov)。
- String 向けブルームフィルタ(データスキップインデックス)の不具合を修正。 #11638 (Azat Khuzhin).
prewhere句の条件でNullableカラムを使用した際に発生する、まれなクラッシュを修正。 (おそらく #11572 と何らかの形で関連しています)。 #11608 (Nikolai Kochetov)。Bufferテーブルからのサンプリング読み込みを行うクエリで発生していたBlock structure mismatchエラーを修正。 #11602 (Nikolai Kochetov).exception.code() % 256が 0 となる場合に誤った終了コードを返していたclickhouse-clientの問題を修正。#11601(filimonov)。- サーバー起動時に出力される「Mark cache size was lowered」というログメッセージの些細な誤りを修正。この変更により #11399 がクローズされる。 #11589 (alexey-milovidov).
PREWHERE column in (subquery)とARRAY JOINを含むクエリで発生するエラーSize of offsets does not match size of columnを修正しました。#11580(Nikolai Kochetov)。SHOW CREATE TABLEでまれに発生していたセグメンテーションフォールトを修正しました。#11490 を解決しました。#11579 (tavplubix).- HTTP セッション内のすべてのクエリが同じ query_id を持っていました。この問題を修正しました。 #11578 (tavplubix).
- これにより、clickhouse-server の Docker コンテナはサーバーのヘルスチェックの際に IPv6 を優先して使用するようになります。 #11550 (Ivan Starkov)。
<node>用の shard_num/replica_num を修正(use_compact_format_in_distributed_parts_names の動作を損なっていた問題を修正)。 #11528 (Azat Khuzhin).- テーブルのドロップ処理中に例外が発生する可能性のあるレースコンディションを修正しました。少しややこしいものの、まったく危険ではありません。説明が必要な場合は、Telegram で連絡してください。 #11523 (alesapin).
- -State 関数を用いた集約の途中で例外がスローされた場合に発生するメモリリークを修正しました。これにより #8995 が解決されました。#11496(alexey-milovidov)。
- データスキップインデックスが、バックグラウンドマージ中に変更される列(SummingMergeTree、AggregatingMergeTree、および TTL GROUP BY の場合)に依存している場合、インデックスが正しく計算されていませんでした。この問題は、マージ後にインデックスを計算するように処理順を変更し、マージ後のデータに対してインデックスが計算されるようにすることで修正されました。 #11162 (Azat Khuzhin).
- 古い libunwind のパッチを削除。 https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 これにより、
clangビルドで-fno-omit-frame-pointerを無効化できるようになり、平均で少なくとも 1% の性能向上が見込まれます。 #10761 (Amos Bird)。 - 関数でラップされた主キーを、'FINAL' モディファイアおよび 'ORDER BY' 最適化と組み合わせて使用した場合の動作を修正。 #10715 (Anton Popov).
ビルド/テスト/パッケージングの改善
- ユニットテスト内のいくつかの重大でないエラーを修正しました #11262 (alesapin).
- MergeTreeIndexFullText における(誤検出の)MSan レポートを修正しました。この問題は最初に #9968 で発生しました #10801 (alexey-milovidov).
ClickHouse リリース v20.4.5.36-stable 2020-06-10
バグ修正
min_bytes_to_use_direct_ioが有効で、PREWHERE が有効な状態で SAMPLE を使用している、またはスレッド数が多い場合に発生し得るData compressed with different methodsエラーを修正しました。これにより #11539 の問題が修正されます。 #11540(alexey-milovidov)。- コーデックで返される圧縮サイズを修正。#11448(Nikolai Kochetov)。
- リテラル以外の引数を取る圧縮コーデックが列に設定されている場合にサーバーがクラッシュする問題を修正しました。#11365 の修正です。#11431(alesapin)。
- NaN を点として扱う場合の pointInPolygon の不具合を修正。#11375 を修正。#11421(Alexey Ilyukhov)。
- テーブルが正常に作成されなかった場合に、MergeTree のシャットダウン時に発生する可能性のある未初期化メモリの読み取りを修正しました。 #11420 (alexey-milovidov).
- 緯度・経度の範囲外の引数を指定した場合の
geohashesInBoxを修正しました。 #11403 (Vasily Nemkov)。 - 外部ソートおよび limit を使用したクエリで発生する可能性のある
Pipeline stuckエラーを修正。#11359 を解決。#11366(Nikolai Kochetov)。 - ReplicatedMergeTree におけるパーツ送信中の不要なロックを削除。 #11354 (alesapin).
- 複数行モードにおける clickhouse-client の
\G(縦方向の出力)サポートを修正しました。これにより #9933 がクローズされます。#11350(alexey-milovidov)。 Lazyデータベース使用時に発生し得るセグメンテーションフォールトを修正。 #11348 (alexey-milovidov).quantilesExactWeightedArrayにおけるクラッシュを修正しました。#11337 (Nikolai Kochetov).ALTERクエリでメタデータを変更する前にマージ処理が停止されるようになりました。 #11335 (alesapin).parallel_view_processing = 1を設定している場合のMATERIALIZED VIEWへの書き込みを、再度並列実行できるようにしました。 #10241 を修正。 #11330(Nikolai Kochetov)。- 抽出された JSON 内に、対応する { または [ が存在しない文字列が含まれている場合の visitParamExtractRaw を修正。 #11318 (Ewout).
- ThreadPool における、非常にまれなレースコンディションを修正しました。 #11314 (alexey-milovidov)。
- clickhouse-copier における軽微なデータレースを修正。インテグレーションテストで検出。 #11313 (alexey-milovidov).
- 変換処理で未初期化メモリが使われる可能性のある問題を修正。例:
SELECT toIntervalSecond(now64())。#11311(alexey-milovidov)。 - プライマリキーに Array カラムを持つテーブルで、このカラムを
emptyまたはnotEmpty関数でフィルタリングするクエリに対してインデックス解析が機能しない問題を修正しました。これにより、#11286 が解決されました。 #11303 (alexey-milovidov)。 - クエリが
max_network_bandwidth、max_execution_speedまたはpriority設定によってスロットルされている場合に、クエリ速度の推定が正しく行われず、その結果min_execution_speedの制限が機能しない、または誤った動作をするバグを修正しました。timeout_before_checking_execution_speedのデフォルト値を非ゼロに変更しました。そうしないと、min_execution_speedおよびmax_execution_speedの設定が効果を持たないためです。これにより #11297 が修正されます。#5732 も修正されます。#6228 も修正されます。ユーザビリティの改善:clickhouse-clientにおいて例外メッセージとプログレスバーが連結されるのを回避しました。 #11296 (alexey-milovidov)。 SET DEFAULT ROLEが誤った引数で呼び出されたときに発生していたクラッシュを修正しました。これにより #10586 が解決されます。#11278 (Vitaly Baranov).- Protobuf フォーマットの不正なデータを読み込む際に発生するクラッシュを修正しました。これにより #5957 および #11203 が修正されます。 #11258 (Vitaly Baranov)。
- cache-dictionary が(期限切れのキーしか存在しない場合に)本来の値ではなくデフォルト値を返してしまうバグを修正しました。これは文字列フィールドのみに影響します。 #11233 (Nikita Mikhaylov)。
- 内部クエリに定数を含む
VIEWから読み取る際に発生するエラーBlock structure mismatch in QueryPipelineを修正しました。 #11181 を解決。 #11205(Nikolai Kochetov)。 Invalid status for associated outputとなる可能性があった例外を修正しました。 #11200 (Nikolai Kochetov).Array(Array(LowCardinality))型の引数をキャプチャする高階関数で発生する可能性のあるCannot capture columnエラーを修正。 #11185 (Nikolai Kochetov).- 1000個を超えるキーが存在する場合や一部のバックエンド環境で失敗していた S3 のグロブ処理を修正しました。#11179 (Vladimir Chebotarev)。
- データスキッピングインデックスが、バックグラウンドマージ中に変更される列(SummingMergeTree、AggregatingMergeTree、および TTL GROUP BY の場合)に依存している場合、そのインデックスは正しく計算されていませんでした。この問題は、マージ後にインデックス計算を行うように順序を変更し、マージ済みデータに対してインデックスが計算されるようにすることで修正されました。 #11162 (Azat Khuzhin).
- 常に適用されていた制限に基づく再スケジュールが原因となっていた Kafka のパフォーマンス問題を修正しました。 #11149 (filimonov).
engine=Kafkaのテーブルに対するDROP実行中(またはサーバー再起動時)に時々発生していたハングを修正。 #11145 (filimonov)。- 単純なクエリに対してスレッドを過剰に予約してしまう問題を修正(パイプラインの変更後に一部動作しなくなっていたスレッド数削減のための最適化)。#11114 (Azat Khuzhin).
- 分散クエリに対する述語の最適化(
HAVING句を含み、つまりクエリを開始したサーバー側でのフィルタリングが必要なクエリ向けのenable_optimize_predicate_expression=1)について、式の順序を保持することで修正し(これだけで修正としては十分)、さらに集約処理でインデックスではなくカラム名を使用するように強制しました。修正: #10613, #11413。#10621(Azat Khuzhin)。
ビルド/テスト/パッケージングの改善
ClickHouse リリース v20.4.4.18-stable 2020-05-26
v20.4.3.16-stable からの変更はありません。
ClickHouse リリース v20.4.3.16-stable 2020-05-23
バグ修正
- 何もファイナライズされなかった場合に、mutation finalization タスクでのログ出力を削除しました。 #11109 (alesapin).
- registerDiskS3 におけるメモリリークを修正しました。 #11074 (Pavel Kovalenko).
- Kafka エンジンテーブルの停止時にデータが欠落する可能性のあった問題を修正しました。 #11048 (filimonov).
parseDateTime64BestEffortの引数解決に関するバグを修正しました。 #11038 (Vasily Nemkov).- テーブルの作成に失敗した場合に、
MergeTreeでごくまれに発生しうる use-after-free の不具合を修正しました。 #10986, #10970 (alexey-milovidov). - Atomic データベースにおけるメタデータ(リネーム用の相対パス)およびデータ(シンボリックリンク用の相対パス)の処理を修正。 #10980 (Azat Khuzhin).
Atomicデータベースエンジン使用時に、ALTERおよびDROP DATABASEクエリが同時に実行されるとサーバーがクラッシュする不具合を修正しました。 #10968 (tavplubix).getRawData()メソッドで生データのサイズが正しくない問題を修正しました。 #10964 (Igr)- 20.1 とそれ以前のバージョンとの間における二段階集約処理の非互換性を修正しました。この問題は、イニシエーターノードとリモートノードで異なるバージョンの ClickHouse を使用しており、かつ GROUP BY の結果セットが大きく、単一の String フィールドで集約を行っている場合に発生します。その結果、単一のキーに対応する行がマージされず、結果内に複数行として残ってしまうことがありました。 #10952 (alexey-milovidov).
DistributedBlockOutputStreamによって部分的にしか書き込まれていないファイルが送信されてしまう問題を修正しました。 #10940 (Azat Khuzhin).SELECT count(notNullIn(NULL, []))で発生していたクラッシュを修正しました。 #10920 (Nikolai Kochetov).KafkaテーブルエンジンのDROP実行中(またはサーバー再起動時)にまれに発生していたハングを修正しました。 #10910 (filimonov).a TO b, c TO aのような複数のALTER RENAMEを実行できなかった問題を修正しました。#10895 (alesapin).- 同じカラムに対して複数スレッドから集約関数状態からの結果を取得する際に発生しうるレースコンディションを修正しました。これが発生しうるのは、
quantile*関数用のAggregateFunctionの状態を保持しているMemoryエンジンのテーブルを読み取る際に、finalizeAggregation関数を使用している場合に限られます。 #10890 (Nikolai Kochetov)。 - Distributed テーブルのタプルに関する後方互換性を修正しました。 #10889 (Anton Popov).
StringHashTableで存在しないキーを扱う際に発生していたSIGSEGVを修正しました。 #10870 (Azat Khuzhin).Atomicエンジンを使用したデータベースからLiveViewテーブルが削除された後にWATCHがハングする問題を修正しました。 #10859 (tavplubix).ReplicatedMergeTreeにおいて、あるレプリカが非アクティブになった後もそのレプリカを待ち続けてしまい、OPTIMIZEクエリ中の一部のALTERがハングする可能性のあったバグを修正しました。 #10849 (tavplubix)。CONSTRAINT式に含まれているカラムがリネームされた場合に、制約が更新されるようになりました。 #10844 を修正しました。 #10847(alesapin)。- cache-dictionary において未初期化メモリを読み取ってしまう可能性があった問題を修正しました。 #10834 (alexey-milovidov).
Block::sortColumns()の後にカラムの順序を修正しました。 #10826 (Azat Khuzhin).- 識別子のクオートを行わないよう指定された場合に発生していた
ODBCブリッジの問題を修正しました。#7984 を解決。#10821(alexey-milovidov)。 DateLUTにおけるUBSanおよびMSanのレポートを修正しました。 #10798 (alexey-milovidov).- キー条件における誤った型変換を修正。 #6287 を解決。 #10791(Andrew Onyshchuk)。
parallel_view_processingの動作を修正しました。これにより、例外が発生した場合でも、すべてのMATERIALIZED VIEWへの挿入が例外なく完了するようになりました。#10241 を修正しました。 #10757(Nikolai Kochetov)。-Stateと併用した際の-OrNullおよび-OrDefaultコンビネーターの不具合を修正しました。 #10741 (hcz).- 関数
h3EdgeAngleにおいて発生する可能性のあったバッファオーバーフローを修正しました。 #10711 (alexey-milovidov). - 多数のパーツを持つテーブルで同時実行される
ALTERがロックされてしまう不具合を修正しました。 #10659 (alesapin). - テーブルの起動前にサーバーがシャットダウンされた場合に
StorageBufferで発生していたnullptrデリファレンスを修正しました。 #10641 (alexey-milovidov). LowCardinality使用時におけるoptimize_skip_unused_shardsの不具合を修正しました。 #10611 (Azat Khuzhin).- 同期ミューテーションで使用する条件変数の扱いを修正しました。場合によっては、その条件変数へのシグナルが失われることがありました。 #10588 (Vladimir Chebotarev).
loadStoredObject()が終了する前にcreateDictionary()が呼び出された場合に発生する可能性のあったクラッシュを修正しました。 #10587 (Vitaly Baranov).- デフォルト式の型が列の型と異なる列
ALIASに対するSELECTを修正しました。 #10563 (Azat Khuzhin). - DateTime64 型と String 型の値の比較を実装しました。 #10560 (Vasily Nemkov).
GROUP BYの sharding_key 最適化をデフォルトで無効化し(optimize_distributed_group_by_sharding_keyは導入されたものの、sharding_key の解析がトリッキーであり、例えばシャーディングキーにifが含まれるケースがあるため、デフォルトではオフになっています)、WITH ROLLUP/CUBE/TOTALSに対するこの最適化を修正しました。 #10516 (Azat Khuzhin).- #10263 を修正しました。#10486(Azat Khuzhin)。
max_rows_to_sort設定に関するテストを追加しました。 #10268 (alexey-milovidov).- Bloomフィルタインデックスの作成に後方互換性を追加。#10551。 #10569 (Winter Zhang)。
ClickHouse リリース v20.4.2.9, 2020-05-12
後方互換性のない変更
- システムテーブル(例:
system.query_log、system.trace_log、system.metric_log)は、サイズが 10 MiB 未満のパーツに対して compact data part フォーマットを使用するようになりました。compact data part フォーマットはバージョン 20.3 以降でサポートされています。20.3 未満のバージョンにダウングレードする場合は、/var/lib/clickhouse/data/system/内のシステムログ用テーブルデータを手動で削除する必要があります。 - FixedString を含む文字列比較で、比較対象の引数のサイズが異なる場合、小さい文字列が大きい文字列の長さまでパディングされているかのように比較を行います。これは、FixedString データ型が SQL の CHAR 型に対応すると仮定した場合の SQL 互換性のためのものです。これにより #9272 がクローズされました。 #10363(alexey-milovidov)
SHOW CREATE TABLEを複数行表示にしました。これにより可読性が向上し、MySQL に近い形式になりました。 #10049(Azat Khuzhin)pointInPolygon関数で使用され、デフォルトで有効になっている設定validate_polygonsを追加しました。 #9857(alexey-milovidov)
新機能
- ClickHouse から Zookeeper へのセキュアな接続のサポートを追加 #10184 (Konstantin Lebedev)
- カスタム HTTP ハンドラーのサポートを追加。説明については #5436 を参照。#7572(Winter Zhang)
- MessagePack の入出力フォーマットを追加。 #9889 (Kruglov Pavel)
- Regexp 入力フォーマットを追加しました。 #9196 (Kruglov Pavel)
- Markdown 文書にテーブルを埋め込めるようにする出力フォーマット
Markdownを追加しました。 #10317 (Kruglov Pavel) - 辞書のカスタム設定セクションのサポートを追加しました。また、#2829 の問題も修正しました。 #10137 (Artem Streltsov)
- DDL クエリの
CREATE DICTIONARYでカスタム設定をサポート #10465(Artem Streltsov) - サーバー全体で動作するシンプルなメモリプロファイラを追加しました。サーバーのメモリ使用量が次の割り当て閾値を超えたタイミングで、割り当てコンテキストを収集します。 #10444 (alexey-milovidov)
- レプリカが自分でパーツをマージすることを制限し、常に他のレプリカからマージ済みパーツをフェッチするようにする設定
always_fetch_merged_partを追加しました。 #10379 (alesapin) - JSONオブジェクトから生データを抽出する関数
JSONExtractKeysAndValuesRawを追加しました #10378 (hcz) - OS のメモリ使用量を
system.asynchronous_metricsに追加。 #10361 (alexey-milovidov) - 関数
leastとgreatestに汎用版を追加しました。これにより、任意の型の引数を任意個指定して動作させることができます。この変更により #4767 #10318 が修正されました(alexey-milovidov) - これにより、ClickHouse は辞書ソースのタイムアウトを ClickHouse 側で制御するようになりました。キャッシュ辞書の構成に 2 つの新しい設定項目が追加されました。
strict_max_lifetime_secondsはデフォルトではmax_lifetimeであり、query_wait_timeout_millisecondsはデフォルトで 1 分です。前者の設定は、allow_read_expired_keys設定(有効期限が大きく過ぎたキーの読み取りを禁止するため)と併用する場合にも有用です。 #10337 (Nikita Mikhaylov) query_logに書き込むエントリをフィルタリングするためのlog_queries_min_typeを追加 #10053 (Azat Khuzhin)- 関数
isConstantを追加しました。この関数は、引数が定数式であるかどうかをチェックし、1 または 0 を返します。開発、デバッグ、およびデモンストレーションを目的としています。 #10198 (alexey-milovidov) - キーが存在しない場合にデフォルト値ではなく NULL を返す joinGetOrNull を追加。 #10094 (Amos Bird)
transform_null_inオプションが有効な場合、IN演算子ではNULLをNULLと等しいものと見なします。 #10085 (achimbab)- MergeTree テーブルエンジンファミリーに対して
ALTER TABLE ... RENAME COLUMNを追加。 #9948 (alesapin) - 並列分散 INSERT SELECT をサポートしました。 #9759 (vxider)
distributed_group_by_no_mergeなしで Distributed over Distributed をクエリできるようにする機能を追加 ... #9923 (Azat Khuzhin)- 指定された複数の範囲ごとに配列要素を集約する関数
arrayReduceInRangesを追加。 #9598 (hcz) - Prometheus exporter に Dictionary のステータスを追加。 #9622 (Guillaume Tassery)
- 関数
arrayAUCを追加 #8698 (taiyang-li) - TPC-H との互換性を高めるために
DROP VIEWステートメントをサポートしました。 #9831 (Amos Bird) - windowFunnel() に 'strict_order' オプションを追加 #9773 (achimbab)
DATEおよびTIMESTAMPSQL 演算子のサポートを追加。例:SELECT date '2001-01-01'#9691 (Artem Zuikov)
実験的機能
- 実験的なデータベースエンジン Atomic を追加しました。これは非ブロッキングな
DROPおよびRENAME TABLEクエリと、アトミックなEXCHANGE TABLES t1 AND t2クエリをサポートします #7512 (tavplubix) - S3 上での ReplicatedMergeTree の初期サポートを追加しました(動作はまだ最適とは言えません)#10126 (Pavel Kovalenko)
バグ修正
- 依存テーブルを含む場合に、
MATERIALIZED VIEWの内部クエリで誤ったスカラー結果が返される問題を修正 #10603 (Nikolai Kochetov) readonly=2かつcancel_http_readonly_queries_on_client_close=1のときに、クライアントが接続を閉じた際に HTTP リクエストがハングする問題を修正しました。 #10684 (tavplubix)- サーバー起動時に例外がスローされた場合に発生する StorageBuffer のセグメンテーションフォルトを修正。 #10550 #10609 を修正(tavplubix)
- クエリ
SYSTEM DROP DNS CACHEは、ユーザーが特定の IP アドレスからの接続を許可されているかどうかを確認するために使用されるキャッシュも削除するようになりました #10608 (tavplubix) - 1 つのクエリ内で同一の集合に対して複数の
IN演算子を使用している場合の処理を修正。 #10539 #10686 を修正 (Anton Popov) - ネストされた型で
generateRandomがクラッシュする問題を修正しました。#10583 を解決。 #10734(Nikolai Kochetov) - マージ後に発生する可能性のあった、
SummingMergeTreeにおけるLowCardinality(FixedString)キーカラムのデータ破損を修正。 #10489 を修正。 #10721 (Nikolai Kochetov) - aggregation_memory_efficient_merge_threads 設定ロジックを修正しました。 #10667 (palasonic1)
- 消えてしまう合計値の問題を修正。クエリに
JOINまたは外側のWHERE条件を持つサブクエリが含まれている場合に、合計値がフィルタリングされてしまうことがありました。#10674 #10698(Nikolai Kochetov)で修正。 distributed_aggregation_memory_efficientが有効な場合に、リモートクエリが並列実行されない問題を修正。関連する #10655 #10664(Nikolai Kochetov)LIMITを含むクエリで行数が誤る可能性がある問題を修正。 #10566、#10709、#10660 を修正 (Nikolai Kochetov)- コンパクトパーツを別のコンパクトパーツへマージした後に特定の状況で発生する可能性のあるインデックス破損を修正。 #10531 (Anton Popov)
- Mutation のすべてのパートが完了しているにもかかわらず、
is_done=0のままハングしてしまう状況を修正しました。 #10526 (alesapin) - UTC からのオフセットが小数値のタイムゾーンにおける Unix エポック開始時のオーバーフローを修正。#9335 に対応。#10513(alexey-milovidov)
- 入力フォーマットの診断機能を改善。#10204 #10418 を修正(tavplubix)。
simpleLinearRegression()における大きな整数値を扱う際の数値オーバーフローを修正 #10474 (hcz)- Distributed のシャットダウン時の use-after-free を修正し、すべてのバッチの送信完了を待たないようにしました #10491 (Azat Khuzhin)
- clickhouse-server の Docker イメージに CA 証明書を追加 #10476 (filimonov)
addressToLine関数または AggregateFunctionState 列の使用時にまれに発生し得た無限ループを修正しました。 #10466 (Alexander Kuzmenkov)- 分散クエリ中に発生する ZooKeeper の "no node error" を処理 #10050 (Daniel Chen)
- カラムのデフォルト値を変更した後にテーブルを ATTACH できなくなる不具合を修正しました。 #10441 (alesapin)
- ALIAS 列のデフォルト式の型を列の型へ暗黙的にキャストするようにした #10563 (Azat Khuzhin)
ATTACH DATABASE失敗時に metadata ディレクトリを削除しないようにする #10442 (Winter Zhang)- システムの tzdata への依存を回避しました。CentOS 8 における
Africa/Casablancaタイムゾーンの読み込みを修正しました。#10211 #10425(alexey-milovidov) - クォーラム付きでデータを挿入した後に、そのデータが削除される(DROP PARTITION、TTL など)場合の不具合をいくつか修正しました。これにより INSERT がハングしたり、SELECT で誤って例外が発生したりしていた問題が解消されます。 #9946 #10188 を修正(Nikita Mikhaylov)
- BloomFilter インデックス作成時の引数の数と型をチェック #9623 #10431 (Winter Zhang)
skip_unavailable_shardsよりもfallback_to_stale_replicasを使用することを推奨します。そうしないと、両方の設定が指定されていて最新のレプリカが存在しない場合、クエリが失敗します(@alex-zaitsev によるパッチ) #10422 (Azat Khuzhin)- ARRAY JOIN、ORDER BY、LIMIT を含むクエリで不完全な結果が返されることがある問題を修正しました。#10226 を修正。#10427(Vadim Plakhtinskiy)
- DETACH/ATTACH 後に辞書名へデータベース名を追加するように変更。
system.dictionariesテーブルおよびSYSTEM RELOADクエリの不具合を修正 #10415 (Azat Khuzhin) - processors pipeline における extremes の結果が不正確になる可能性があった問題を修正。 #10131 (Nikolai Kochetov)
- 設定
distributed_group_by_no_mergeが有効な場合に発生する可能性があったセグメンテーションフォルトを修正しました(#10131 により 20.3.7.46 で導入)。#10399(Nikolai Kochetov) Array(Tuple(...))データ型の誤ったフラット化処理を修正。 #10259 #10390 を解決(alexey-milovidov)- JOIN 内の定数の列名が JOIN 外の定数の列名と衝突しないように修正 #9950 (Alexander Kuzmenkov)
- Block::sortColumns() 呼び出し後の列順を修正 #10826 (Azat Khuzhin)
- リモートクエリ実行時に発生する可能性のある
ConcatProcessorのPipeline stuckエラーを修正。 #10381 (Nikolai Kochetov) - 集約処理でディスク予約を行わないようにし、#9241 #10375 を修正(Azat Khuzhin)。
- UTC からのオフセットが正と負の間で変更されたことのあるタイムゾーン(例: Pacific/Kiritimati)における datetime 関数の誤った動作を修正しました。 #7202 および #10369 を修正。(alexey-milovidov)
dictIsIn関数で発生する無限ループを回避。#515 を修正 #10365 (alexey-milovidov)- デフォルトで GROUP BY の sharding_key 最適化を無効化し、WITH ROLLUP/CUBE/TOTALS で正しく動作するよう修正 #10516 (Azat Khuzhin)
- パーツをチェックするときにはエラーコードも確認し、エラーが「メモリ不足」などの場合にはそのパーツを破損としてマークしないようにしました。#6269 #10364 を修正。(alexey-milovidov)
- 読み込まれていない辞書の情報を system テーブルに表示するようにしました。 #10234 (Vitaly Baranov)
- サーバーがテーブルの起動前にシャットダウンされた場合に発生する StorageBuffer 内のヌルポインタ参照を修正。 #10641 (alexey-milovidov)
ReplicatedMergeTreeにおけるDROPとOPTIMIZEのレースコンディションを修正しました。OPTIMIZEクエリが同時に実行されている場合、DROPが ZooKeeper のレプリカパス内に不要なデータを残してしまう可能性がありました。 #10312 (tavplubix)- カンマ区切りと名前付き JOIN を混在させたクエリで発生する「Logical error: CROSS JOIN has expressions」エラーを修正。 #9910 #10311 を修正。(Artem Zuikov)
max_bytes_before_external_group_byを使用したクエリを修正しました。 #10302 (Artem Zuikov)- 特定のケースでパーサーの最大再帰深度を制限してしまっていた問題を修正しました。これにより、#10283 が解決されます。この修正により、わずかな非互換性が生じる可能性があります。長くてネストの深いクエリを clickhouse-client 経由で実行しようとすると失敗する場合があるため、その場合は
max_query_sizeとmax_parser_depthの設定を適切に調整してください。 #10295 (alexey-milovidov) - 複数の JOIN を含むクエリでも
count(*)を使用できるようにしました。Fixes #9853 #10291 (Artem Zuikov) max_rows_to_group_byとgroup_by_overflow_mode = 'break'を使用した際に発生するPipeline stuckエラーを修正。 #10279 (Nikolai Kochetov)- DDL クエリを使用して
range_hashed辞書を作成する際に発生する「Cannot add column」エラーを修正(#10093 を解決)。#10235 (alesapin) - まれに発生しうる例外
Cannot drain connections: cancel firstを修正。 #10239 (Nikolai Kochetov) - ユーザーが ENGINE = Replicated* のテーブルに対して ALTER UPDATE/DELETE を実行しようとした際に、ClickHouse が「Unknown function lambda.」というエラーメッセージを返していたバグを修正しました。非決定的関数のチェックで lambda 式を正しく扱えるようになりました。 #10237 (Alexander Kazakov)
- Lazy エンジンを使用しているデータベース上で
SELECT ... FROM system.tablesを実行した際に比較的まれに発生していた、StorageSystemTables のセグメンテーションフォルトを修正しました。 #10209 (Alexander Kazakov) system.numbersやsystem.zerosのような無限ソースから読み取る際に、本来は LIMIT で停止すべきところを停止せず、クエリが無限に実行されてしまう可能性がある問題を修正。 #10206 (Nikolai Kochetov)- Date 型に対する "generateRandom" 関数を修正しました。これにより #9973 が解決されます。年 2106 の日付を旧スタイルのパーティション方式を使用する MergeTree テーブルに挿入した際に、パーティション名が年 1970 になってしまうエッジケースを修正しました。 #10218 (alexey-milovidov)
- View のテーブル定義が SELECT クエリと一致しない場合に型を変換するようにしました。これにより #10180 と #10022、#10217 が修正されました (alexey-milovidov)
- 曜日が火曜日または木曜日の RFC-2822 形式の文字列を正しく処理できるように
parseDateTimeBestEffortを修正しました。これにより #10082 および #10214 が修正されました (alexey-milovidov) - JOIN 内の定数のカラム名が JOIN の外側の定数のカラム名と衝突し得る不具合を修正。#10207 (alexey-milovidov)
- 特定のケースで
arrayJoin関数が存在する場合の move-to-prewhere 最適化を修正しました。これにより #10092 および #10195 の問題が修正されました(alexey-milovidov)。 - ネイティブな mysql-connector-java (JDBC) で SCRAMBLE に区切り文字が現れる問題を修正 #10140 (BohuTANG)
- データベースが指定されていない場合のアクセスチェック時に、現在のデータベースを使用するよう修正。 #10192 (Vitaly Baranov)
- compact パーツを持つテーブルに対する ALTER を修正。 #10130 (Anton Popov)
allow_nondeterministic_mutations設定を追加し、mutationsにおける非決定的関数の使用制限を緩和できるようにしました。 #10186 (filimonov)- 辞書に対して呼び出される
DROP TABLEの問題を修正 #10165 (Azat Khuzhin) - Distributed テーブルに対して
INSERTを行う際、構造が一致しない場合にはブロックを変換するように変更 #10135 (Azat Khuzhin) - 挿入ブロックがパーティションキーによって複数のパーツに分割された場合、行数が(全パーツの合計として)誤ってログに記録されていました。 #10138 (alexey-milovidov)
- いくつかの引数チェックを追加し、MySQL Database Engine に識別子引数のサポートを追加 #10077 (Winter Zhang)
- 新しいレプリカを作成する際の
index_granularity_bytesの誤ったチェックを修正し、#10098 を解決。#10121(alesapin) - テーブルにスキップインデックスが含まれている場合に
CHECK TABLEクエリで発生していたバグを修正。 #10068 (alesapin) - シャードが 1 つしかないネストされたテーブルにおける Distributed-over-Distributed の問題を修正 #9997 (Azat Khuzhin)
JOINとUNION ALLを含むクエリで行が失われる可能性のある不具合を修正しました。 #9826、 #10113 を解決。 ... #10099 (Nikolai Kochetov)- ローカルの ClickHouse サーバーをソースとして使用する場合の辞書のバグを修正しました。辞書とソース側の型が互換性のない場合に、メモリ破損を引き起こす可能性がありました。 #10071 (alesapin)
- 古い ClickHouse バージョンからのアップグレード時に、
/table/replicas/replica_name/metadataノードが存在しない場合にレプリケーテッドテーブルが起動できない問題を修正しました。#10037 を修正。#10095(alesapin) - エラー
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransformを修正しました。これは、distributed_aggregation_memory_efficient設定が有効になっていて、分散クエリが異なるシャードから単一レベルおよび 2 レベルの集約が混在したデータを読み込んだ際に発生していました。 #10063 (Nikolai Kochetov) - 起動時にマテリアライズドビューを持つデータベースの ATTACH が失敗した際に発生するデッドロックを修正 #10054 (Azat Khuzhin)
- 末尾にゼロバイトを含む文字列キーに対する GROUP BY で発生する可能性があったセグメンテーションフォルトを修正しました(#8636, #8925)。... #10025(Alexander Kuzmenkov)
- 分散クエリにおいて、エイリアスが修飾付き列名を上書きしてしまうことで誤った結果が返される不具合を修正。Fixes #9672 #9714 #9972 (Artem Zuikov)
SYSTEM RESTART REPLICASで発生しうるデッドロックを修正 #9955 (tavplubix)- リモートクエリ実行に使用するスレッド数の扱いを修正しました(20.3 以降で発生していたパフォーマンス低下を解消)。これは、
Distributedテーブルからのクエリがローカルシャードとリモートシャードで同時に実行された場合に発生していました。 #9965 #9971 に対応(Nikolai Kochetov) ATTACH PARTにおいて、アタッチされたパーツが自動的に削除されてしまう可能性のあったDeleteOnDestroyロジックを修正し、いくつかのテストを追加しました #9410 (Vladimir Chebotarev)- サーバーの起動時に
ON CLUSTERDDL クエリがフリーズしてしまう不具合を修正。 #9927 (Gagan Arneja) - 一部のデータベースに対するクエリ処理のある段階で必要なテーブルが取得されていなかった不具合を修正しました。#9699 を解決。#9949 (achulkov2)
JOINがTOTALSと併用された場合に発生する 'Not found column in block' エラーを修正。#9839 #9939 に対応 (Artem Zuikov)CREATE USERコマンドで指定された複数ホストの解析を修正 #9924 (Vitaly Baranov)- Join テーブルエンジン向けの
TRUNCATEを修正(#9917)。#9920(Amos Bird) ReplicatedMergeTreeにおけるDROPとOPTIMIZEの間の競合状態を修正。 #9901 (alesapin)optimize_skip_unused_shardsが設定されている場合の Distributed テーブルにおけるDISTINCTの動作を修正。 #9808 (Azat Khuzhin)- ALTER 文で発生する "scalar does not exist" エラーを修正 (#9878). ... #9904 (Amos Bird)
distributed_product_mode='local'における修飾名のエラーを修正。 #4756 #9891 を解決 (Artem Zuikov)- INSERT クエリに対して、シャードは例外をスローするのではなく、発行元から渡された設定を自身の制約に合わせてクランプ(切り詰め)するようになりました。この修正により、異なる制約を持つシャードに対しても INSERT クエリを送信できるようになります。この変更は、修正 #9447 をさらに改善するものです。 #9852 (Vitaly Baranov)
offsets.commit.timeout.msの間に__consumer_offsetsトピックで十分な数のレプリカが利用可能でない場合、Kafka broker がコミットを拒否することがあるため、オフセットをコミットする際にリトライ処理を追加しました #9884 (filimonov)WHEREで基になるテーブルの仮想カラムを使用した場合の Distributed エンジンの動作を修正 #9847 (Azat Khuzhin)- 関数引数で指定されたタイムゾーンが正しく使用されていなかった一部のケースを修正しました。 #9574 (Vasily Nemkov)
SET distributed_product_mode = 'local'が設定されている環境で、分散テーブルに対するクエリに PREWHERE と WHERE の両方が含まれている場合に発生する「Different expressions with the same alias」エラーを修正。 #9871 (Artem Zuikov)- 複合主キーを持つテーブルに対するミューテーションで発生していた過剰なメモリ消費を修正しました。これにより #9850 が解決されました。 #9860 (alesapin)
- 設定
allow_introspection_functionsに基づくイントロスペクション関数の権限付与の計算を修正。 #9840 (Vitaly Baranov) - max_distributed_connections を修正(Processor 使用時および未使用時の両方) #9673 (Azat Khuzhin)
- クライアントで発生する可能性のある例外
Got 0 in totals chunk, expected 1を修正しました。これは、JOIN の右側のテーブルの行数が 0 行である場合に、JOINを含むクエリで発生していました。例:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。#9777 を修正。... #9823(Nikolai Kochetov) - テーブルリスト外(例:WHERE 句内)で
COMMA JOINを含むサブクエリに対して発生する 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' エラーを修正しました。これにより #9782 および #9830 が修正されました(Artem Zuikov)。 optimize_skip_unused_shardsが設定されていて、キーの式をそのフィールド型に変換できない場合にサーバーがクラッシュする問題を修正 #9804 (Azat Khuzhin)splitByStringの空文字列の扱いを修正。 #9767 (hcz)- compact parts に対して壊れていた
ALTER TABLE DELETE COLUMNクエリを修正。 #9779 (alesapin) - processors パイプラインを使用する HTTP 経由のクエリで欠落していた
rows_before_limit_at_leastを修正しました。これにより #9730 および #9757 が解決されました。(Nikolai Kochetov) ALTERクエリ(ミューテーション)における過剰なメモリ消費を修正しました。これにより、#9533 と #9670 が解決されます。#9754(alesapin)- 「Cannot schedule a task」エラーが永続的に発生し得る問題を修正。 #9154 (Azat Khuzhin)
- 外部ディクショナリの DDL におけるバックスクオートの扱いに関するバグを修正。#9619 を修正。#9734(alesapin)
text_logのデータ競合を修正しました。これは実際の不具合に対応するものではありません。 #9726 (alexey-milovidov)- 以前のバージョンでユーザーがミューテーションを実行している場合にレプリケーションが機能しなくなる不具合を修正しました。この修正は #9645 を解決します。 #9652 (alesapin)
sumKahanとsumWithOverflowの誤った内部関数名を修正しました。この不具合により、リモートクエリでこれらの関数を使用すると例外が発生していました。 #9636 (Azat Khuzhin)- 設定
use_compact_format_in_distributed_parts_namesを追加しました。これにより、DistributedテーブルへのINSERTクエリで、よりコンパクトな形式でファイルを書き込めるようになります。この変更により #9647 が修正されました。 #9653 (alesapin) - JOIN キーに LowCardinality 型を使用した RIGHT および FULL JOIN を修正。 #9610 (Artem Zuikov)
MergeTreeRangeReaderで発生する可能性があった例外Size of filter does not match size of columnおよびInvalid number of rows in Chunkを修正しました。これらは一部の状況でPREWHEREを実行している際に発生することがありました。 #9612 (Anton Popov)- 内部レプリケーションを使用する Distributed テーブルに対する
ALTER ON CLUSTERを許可します。これにより #3268 #9617 が修正されます(shinoi2) time + 1のような単純な算術式(time + INTERVAL 1 SECONDのような式とは異なり)を書いた場合に、タイムゾーンが保持されていなかった問題を修正しました。これにより #5743 #9323 が修正されました(alexey-milovidov)
改善
- DateTime を文字列リテラルと比較する際にタイムゾーンを使用するようにしました。これにより #5206 が修正されました。 #10515 (alexey-milovidov)
- テキスト入力フォーマットから
Decimal値をパースできない場合に、冗長な診断情報を出力します。 #10205 (alexey-milovidov) - 分散/バッファスケジュールプール向けにタスク/メモリのメトリクスを追加 #10449 (Azat Khuzhin)
- clickhouse-local および HTTP インターフェイスにおける
SELECT DISTINCTクエリの結果が、準備でき次第すぐに表示されるようにしました。これにより #8951 #9559 が修正されました(alexey-milovidov)。 clickhouse-copierで分割を行う際に、cityHash64(PRIMARY KEY) % N == nの代わりにSAMPLE OFFSETクエリを使用できるようになりました。この機能を使用するには、コマンドライン引数として--experimental-use-sample-offset 1を指定してください。 #10414 (Nikita Mikhaylov)- 最初の列の値に BOM を含めることがありえない場合、TSV 内の BOM をパースできるようにしました。これにより #10301 #10424 が修正されました(alexey-milovidov)。
- Avro のネストされたフィールドの挿入サポートを追加 #10354 (Andrew Onyshchuk)
- 同じ型が指定されている場合には、データ非変更モードでもカラムの変更を許可するようにしました。 #10382 (Vladimir Chebotarev)
optimize_skip_unused_shardsが設定されている場合に、GROUP BY 句のシャーディングキーに対してdistributed_group_by_no_mergeを自動適用 #10341 (Azat Khuzhin)- GROUP BY sharding_key を用いた分散クエリ向けに LIMIT/LIMIT BY/ORDER BY を使ったクエリを最適化 #10373 (Azat Khuzhin)
- サーバーの合計メモリ使用量を制限するために、設定
max_server_memory_usageを追加しました。メトリクスMemoryTrackingは、誤差なく算出されるようになりました。設定max_memory_usage_for_all_queriesは廃止されており、現在は何の効果もありません。これにより #10293 がクローズされました。 #10362 (alexey-milovidov) system_tables_lazy_load設定オプションを追加しました。falseに設定すると、ログを含むシステムテーブルはサーバー起動時に読み込まれます。Alexander Burmak、Svyatoslav Tkhon Il Pak、#9642 #10359(alexey-milovidov)- 分散送信でバックグラウンドスレッドプール (background_schedule_pool_size) を使用 #10263 (Azat Khuzhin)
- バックグラウンドバッファのフラッシュにバックグラウンドスレッドプールを使用するようにした。 #10315 (Azat Khuzhin)
- 不完全に書き込まれた部分を削除するための特別なケース 1 件への対応を行いました。これにより #9940 が修正されました。#10221 (alexey-milovidov)
- GROUP BY を最適化する際には、この種の関数の手動リストではなく isInjective() を使用する。 #10342 (Azat Khuzhin)
- クライアントが接続直後に RST パケットを送信した場合に、ログにエラーメッセージを出力しないようにしました。これは keepalived と VRRP を用いた IPVS バランサーで一般的な挙動です。これにより #1851 #10274 が修正されました(alexey-milovidov)。
- 浮動小数点型で
+infをパースできるようにしました。これにより #1839 および #10272 が解決されました(alexey-milovidov)。 - Nested 型用の
generateRandomテーブル関数を実装しました。これにより #9903 および #10219 がクローズされました(alexey-milovidov) - MySQL プロトコル経由で一部のクライアントが ClickHouse と通信できるようにするため、MySQL 互換インターフェイスで
max_allowed_packedを提供しました。 #10199 (BohuTANG) - GLOBAL IN でリテラルの使用を許可 (例:
SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)) #10196 (Azat Khuzhin) - clickhouse-client のインタラクティブモードにおけるさまざまな細かな問題を修正 #10194 (alexey-milovidov)
- 不要な辞書の読み込みを回避(
system.tables、DROP/SHOW CREATE TABLE) #10164(Azat Khuzhin) - RWLock の更新:
getLock()に timeout パラメータを追加し、実装を phase-fair になるように再設計 #10073 (Alexander Kazakov) - ネイティブな mysql-connector-java(JDBC) との互換性を向上 #10021 (BohuTANG)
- 関数
toStringは単調と見なされ、String または LowCardinality(String) 型の引数に対して恒真な条件として適用された場合でも、インデックス解析に使用できます。 #10110 (Amos Bird) {CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTAおよびGRANTコマンドでON CLUSTER句が使用できるようになりました。 #9811 (Vitaly Baranov)- S3 URI の virtual-hosted-style サポート #9998 (Pavel Kovalenko)
- 引数を取らない辞書のレイアウト型を、辞書 DDL クエリ内で丸括弧なしで指定できるようになりました。 #10057 を修正。 #10064(alesapin)
- ファイルパスで先頭ゼロ付きの数値範囲を使用できるようにしました #9989 (Olga Khvostikova)
- CROSS JOIN のメモリ使用量を改善。 #10029 (Artem Zuikov)
- リモートテーブルの構造を取得する際に、クラスタ内のすべてのシャードへの接続を試み、skip_unavailable_shards が有効な場合には利用不能なシャードをスキップするようにしました。 #7278 (nvartolomei)
system.tablesテーブルにtotal_rowsとtotal_bytesを追加。 #9919 (Azat Khuzhin)- System log テーブルでは、デフォルトで polymorphic parts が使用されるようになりました。 #9905 (Anton Popov)
- system.settings/merge_tree_settings に type 列を追加 #9909 (Azat Khuzhin)
- サーバー起動時のできるだけ早い段階で、利用可能な CPU 命令をチェックするようにしました。 #9888 (alexey-milovidov)
- ミューテーションから
ORDER BYステージを削除しました。これは、単一スレッドで単一のソート済みパートから読み取るためです。あわせて、ミューテーション内の行がソートキーで並べ替えられていて、その順序が崩れていないことを検証するチェックも追加しました。 #9886 (alesapin) - 左辺に FixedString を取る LIKE 演算子を実装しました。これは TPC-DS クエリをより良くサポートするために必要です。 #9890 (alexey-milovidov)
- ネストされた Distributed テーブルでは
force_optimize_skip_unused_shardsを無効化するforce_optimize_skip_unused_shards_no_nestedを追加 #9812 (Azat Khuzhin) - これにより、MergeTree のデータパーツに対するカラムサイズは一度だけ計算されるようになりました。 #9827 (alesapin)
optimize_skip_unused_shardsで定数式を評価できるようにした(例:SELECT * FROM foo_dist WHERE key=xxHash32(0)) #8846 (Azat Khuzhin)- TTL 式で
DateまたはDateTime列を使用しているかどうかのチェックが削除されました。 #9967 (Vladimir Chebotarev) - DiskS3 におけるハードリンク実装の最適化。 #9760 (Pavel Kovalenko)
set multiple_joins_rewriter_version = 2を設定すると、衝突していない列名をそのまま保持する、複数 JOIN 書き換えの第 2 バージョンが有効になります。これにより、USINGを伴う複数の JOIN をサポートし、サブクエリを含む JOIN に対してもselect *を使用できるようになります。 #9739 (Artem Zuikov)- StorageMergeTree 向け「非ブロッキング」ALTER の実装 #9606 (alesapin)
- DiskS3 に対する MergeTree の完全サポートを追加 #9646 (Pavel Kovalenko)
splitByStringを拡張し、区切り文字列として空文字列もサポートするようにしました。 #9742 (hcz)system.trace_logにtimestamp_nsカラムを追加しました。これはトレースイベントの高精度なタイムスタンプを含んでおり、スレッドプロファイル(「フレームチャート」)のタイムラインを構築できるようになります。 #9696 (Alexander Kuzmenkov)- 設定
send_logs_levelが有効な場合、ログメッセージとクエリの進捗表示が混在しないようにしました。 #9634 (Azat Khuzhin) MATERIALIZE TTL IN PARTITIONのサポートを追加しました。 #9581 (Vladimir Chebotarev)- Avro のネストされたフィールド内で複合型をサポート #10502 (Andrew Onyshchuk)
パフォーマンスの改善
- Partial MergeJoin における右テーブルへの挿入ロジックを改善しました。 #10467 (Artem Zuikov)
- 行指向フォーマットのパフォーマンスを改善しました(狭いテーブルの場合、CSV で 10%以上、Avro で 35%以上)。 #10503 (Andrew Onyshchuk)
IN演算子の右辺に明示的に定義された集合があり、左辺がタプルであるクエリのパフォーマンスを改善しました。 #10385 (Anton Popov)- HashJoin で使用するハッシュテーブルのメモリ使用量を削減しました。 #10416 (Artem Zuikov)
- StorageDictionary 上での専用の HashJoin を追加しました。
dictGet()関数を JOIN で書き換えられるようにしました。これ自体は後方互換性を壊しませんが、一部の環境では #8400 を顕在化させる可能性があります。 #10133 (Artem Zuikov) - 対象テーブルが対応している場合に、マテリアライズドビューの並列挿入を有効化しました。 #10052 (vxider)
- 単調関数を用いたインデックス解析のパフォーマンスを改善しました。 #9607#10026 (Anton Popov)
- bloom filter におけるトークン化を高速化するために、SSE2 または SSE4.2 の SIMD 命令を使用するようにしました。 #9968 (Vasily Nemkov)
IN演算子の右辺に明示的に定義された集合を持つクエリのパフォーマンスを改善しました。これにより、バージョン 20.3 のパフォーマンス退行を修正しました。 #9740 (Anton Popov)- clickhouse-copier は各パーティションを複数の部分に分割し、それぞれを独立してコピーするようになりました。 #9075 (Nikita Mikhaylov)
- より多くの集約メソッドを追加しました。たとえば、TPC-H クエリ 1 では
FixedHashMap<UInt16, AggregateDataPtr>が選択され、25% のパフォーマンス向上が得られます。 #9829 (Amos Bird) - pre-limit transform において、複数のストリームに対して単一の行カウンターを使用するようにしました。これにより、
order byを含まないがlimitを含むクエリ(select f(x) from (select x from t limit 1000000000)のようなもの)でパイプラインストリームを結合することを避け、以降の処理に複数スレッドを利用できるようになります。 #9602 (Nikolai Kochetov)
ビルド/テスト/パッケージングの改善
- ClickHouse-Extras 由来の AWS SDK ライブラリのフォークを使用 #10527 (Pavel Kovalenko)
- 新しい ALTER RENAME COLUMN クエリの統合テストを追加。 #10654 (vzakaznikov)
- 関数
now64を誤った引数で呼び出した場合に発生しうる符号付き整数オーバーフローを修正しました。この修正により #8973 と #10511 が解決されました(alexey-milovidov) - fuzzer と sanitizer の設定を分離し、ビルド設定を Oss-fuzz と互換性を持たせました。 #10494 (kyprizel)
- clang-10 向けの clang-tidy 修正。 #10420 (alexey-milovidov)
- エラーメッセージに絶対パスを表示する。そうしない場合、KDevelop が正しいファイルに移動できず、代わりに新しいファイルを開いてしまう。 #10434 (alexey-milovidov)
- AddressSanitizer を有効にした CI ストレステストで発生するエラーを調査するために、
ASAN_OPTIONS環境変数を追加しました。 #10440 (Nikita Mikhaylov) - clang ビルドで ThinLTO を有効化(試験的)。 #10435 (alexey-milovidov)
- システムに Z3 ソルバーがインストールされている場合に意図せず発生する可能性がある、Z3 への依存関係を削除。 #10426 (alexey-milovidov)
- 統合テスト用の Docker ファイルを docker/ ディレクトリに移動。 #10335 (Ilya Yatsishin)
- CI で
clang-10を使用できるようにしました。これにより #10238 が修正されていることを確認しています。#10384 (alexey-milovidov) - OpenSSL を upstream の master に更新しました。
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorおよびSSL Exception: error:2400006E:random number generator::error retrieving entropyというメッセージとともに TLS 接続が失敗することがある問題を修正しました。この問題はバージョン 20.1 で発生していました。 #8956 (alexey-milovidov) - clang-10 を用いたビルドを修正。 #10238 #10370 (Amos Bird)
- マテリアライズドビューに対する Parallel INSERT のパフォーマンステストを追加。#10345 (vxider)
- 不安定なテスト
test_settings_constraints_distributed.test_insert_clamps_settingsを修正。 #10346 (Vitaly Baranov) - CI でテスト結果をアップロードするためのユーティリティを ClickHouse に追加 #10330 (Ilya Yatsishin)
- junit_to_html ツールでテスト結果を JSONEachRow 形式に変換 #10323 (Ilya Yatsishin)
- cctz を更新しました。 #10215 (alexey-milovidov)
- プレーンな JUnit XML レポートから HTML レポートを作成できるようにしました。 #10247 (Ilya Yatsishin)
- 最小コンパイラバージョンのチェックを更新し、問題 #10250 の根本原因を修正 #10256(alexey-milovidov)
- 分散テーブルに対する Live View テーブルの初期サポート #10179 (vzakaznikov)
- MergeTreeIndexFullText における(誤検知の)MSan レポートを修正しました。この問題が最初に発生したのは #9968 です。#10801(alexey-milovidov)
- clickhouse-docker-util #10151 (filimonov)
- pdqsort を最近のバージョンに更新 #10171 (Ivan)
- libdivide を v3.0 に更新 #10169 (Ivan)
- ポリモーフィックパーツ有効時のチェックを追加。 #10086 (Anton Popov)
- FreeBSD 向けクロスコンパイルビルドを追加し、#9465 および #9643 を修正 (Ivan)
- #6924 および #6980 向けのパフォーマンステストを追加 (filimonov)
- パフォーマンステストを改善するため、
Fileエンジンに/dev/nullサポートを追加 #8455 (Amos Bird) - /dbms 配下のすべてのフォルダを1階層上に移動 #9974 (Ivan)
- 単一スレッドで MergeTree から読み取る際に順序が保持されることを検証するテストを追加。 #9670 #9762 への追加(alexey-milovidov)
- レースコンディションを回避するように
00964_live_view_watch_events_heartbeat.pyテストを修正。 #9944 (vzakaznikov) - 統合テスト
test_settings_constraintsを修正 #9962 (Vitaly Baranov) - 各関数を個別ファイルに分割、第12弾。 #9922 (alexey-milovidov)
- タプルの配列の処理が極端に遅いケースに対する性能テストを追加しました。 #9872 (alexey-milovidov)
- zstd を 1.4.4 に更新しました。パフォーマンスと圧縮率がわずかに改善されています。異なるバージョンの ClickHouse を実行しているレプリカが混在している場合、
Data after merge is not byte-identical to data on another replicas.という妥当なエラーメッセージと、その説明が表示されることがあります。これらのメッセージは想定された動作であり、心配する必要はありません。 #10663 (alexey-milovidov) system.stack_traceでの TSan レポートを修正。 #9832 (alexey-milovidov)clock_getresへの依存関係を削除しました。 #9833 (alexey-milovidov)clang-tidyを使用した識別子名のチェックを追加しました。 #9799 (alexey-milovidov)- "builder" Docker イメージを更新。このイメージは CI では使用されませんが、開発者にとって有用です。 #9809 (alexey-milovidov)
- CI ではもはや使用されていない旧
performance-testツールを削除しました。clickhouse-performance-testも優れたツールですが、現在は、環境のさまざまな変化に左右されることなく信頼性の高い結果を得るために、高度な統計的手法を用いて比較テストを実行する、はるかに優れたツールを使用しています。 #9796 (alexey-milovidov) - clang-static-analyzer によるチェックをほとんどすべて追加しました。 #9765 (alexey-milovidov)
- MongoDB URI サポートに向けて Poco を 1.9.3 に更新。 #6892 (Alexander Kuzmenkov)
-DUSE_STATIC_LIBRARIES=0 -DENABLE_JEMALLOC=0を指定したビルドを修正 #9651 (Artem Zuikov)- 変更ログ用スクリプトでは、マージコミットがリリースブランチに cherry-pick された場合、コミットの説明から PR 名を取得します。 #9708 (Nikolai Kochetov)
- バックポート用スクリプトで
vX.X-conflictsタグをサポートする。 #9705 (Nikolai Kochetov) - バックポート用スクリプトの
auto-labelを修正。 #9685 (Nikolai Kochetov) - Darwin のクロスビルドで libc++ を使用し、ネイティブビルドとの一貫性を持たせました。 #9665 (Hui Wang)
- 不安定だったテスト
01017_uniqCombined_memory_usageを修正。#7236 の続き。#9667(alexey-milovidov) - ネイティブな macOS Clang コンパイラ用のビルドを修正 #9649 (Ivan)
pthread_mutex_lockおよびpthread_mutex_unlock関数の周辺にさまざまなグリッチを挿入できるようにした。 #9635 (alexey-milovidov)packagerスクリプトにclang-tidyのサポートを追加。 #9625 (alexey-milovidov)- バンドルされていない msgpack を使用できるようにした。 #10168 (Azat Khuzhin)
ClickHouse リリース v20.3
ClickHouse リリース v20.3.21.2-lts, 2020-11-02
バグ修正
sharding_key(および、関数コンテキストが永続的に保存される同様の箇所)におけるdictGetを修正。#16205(Azat Khuzhin)。- クエリに
WHERE、PREWHEREおよびGLOBAL INが含まれる場合に、Distributedテーブルへのクエリで誤って空の結果が返る問題を修正。#15792 を修正。#15933(Nikolai Kochetov)。 TSV/CSVWithNamesフォーマットでヘッダー行が欠落、もしくは過剰になる問題を修正。これにより #12504 が修正される。#13343(Azat Khuzhin)。
ClickHouse リリース v20.3.20.6-lts, 2020-10-09
バグ修正
MOVEまたはREPLACE PARTITIONの後、またはまれなケースではDETACHやDROP PARTITIONの後に、存在しないパーツを待ち続けてMutationがハングする可能性があった問題を修正。#15724、#15537(tavplubix)。- 同じテーブルに対する多数のサブクエリを含む
MySQLエンジンのクエリがハングする問題を修正。以前は、1 つのクエリ内で同じMySQLテーブルに対するサブクエリが 16 個を超えると、無期限にハングしていた。#15299(Anton Popov)。 Mergeテーブルに対する JOIN を含むクエリで、GROUP BY においてUnknown identifierが発生する問題を修正。#15242(Artem Zuikov)。- サブクエリに
finalizeAggregation関数が含まれる場合に、述語プッシュダウンが動作するように修正。#14847 を修正。#14937(filimonov)。 - 併行する
ALTER ... REPLACE/MOVE PARTITION ...クエリがデッドロックを引き起こす可能性があった問題を修正。#13626(tavplubix)。
ClickHouse リリース v20.3.19.4-lts, 2020-09-18
バグ修正
SELECTクエリで、問い合わせ対象のカラムにDEFAULT式があり、その式が、やはりDEFAULTを持ち、SELECTクエリ内に含まれておらず、かつディスク上にも存在しない別カラムに依存している場合に発生するまれなエラーを修正しました。#14531 を部分的に修正します。#14845(alesapin)。- 代入式内に Nullable カラムと定数値(
UPDATE x = 42のようなもの)があるALTER UPDATEミューテーションが、カラム内の値の不整合またはセグメンテーションフォルトを引き起こすバグを修正しました。#13634、#14045 を修正します。#14646(alesapin)。 - 結果カラムの小数スケールが誤っていたことにより、Decimal の乗算結果が誤っていた問題を修正しました。#14603(Artem Zuikov)。
改善
- compact part でカスタム codec をサポートしました。#12183(Anton Popov)。
ClickHouse release v20.3.18.10-lts, 2020-09-08
バグ修正
- 例外が
PipelineExecutor自体の内部で発生した場合に、クエリ実行を停止するようにしました。これにより、まれに発生し得るクエリのハングを防ぐことができます。#14334 の継続対応です。#14402(Nikolai Kochetov)。 - cache-dictionary が、ソースに値が存在するにもかかわらずデフォルト値を返してしまうことがある動作を修正しました。#13624(Nikita Mikhaylov)。
- データベース名またはテーブル名にドットが含まれている場合に、users.xml から row policy をパースできない問題を修正しました。これにより #5779、#12527 が修正されます。#13199(Vitaly Baranov)。
- CAST(Nullable(String), Enum()) を修正しました。#12745(Azat Khuzhin)。
text_logにおけるデータレースを修正しました。これは実際のバグに対応するものではありません。#9726(alexey-milovidov)。
改善
- 長いクエリに対する誤ったエラーを修正しました。正しいクエリでも
Max query size exceeded以外の構文エラーが返される可能性がありました。#13928(Nikolai Kochetov)。 - parseDateTimeBestEffortOrNull/Zero 関数で値が完全にパースされない場合、NULL/ゼロを返すようにしました。これにより #7876 が修正されます。#11653(alexey-milovidov)。
パフォーマンス改善
- LowCardinality を用いる非常に短いクエリをわずかに最適化しました。#14129(Anton Popov)。
ビルド/テスト/パッケージングの改善
- clang-10 への移行後に HashTable で発生した UBSan レポート(nullptr に 0 を加算していた処理)を修正しました。#10638 (alexey-milovidov)。
ClickHouse リリース v20.3.17.173-lts, 2020-08-15
バグ修正
- StorageMerge を利用した JOIN と
set enable_optimize_predicate_expression=1の組み合わせで発生していたクラッシュを修正しました。#13679 (Artem Zuikov)。 NULL要素を含むタプルの比較における不正な戻り値の型を修正しました。#12461 を修正します。#13420 (Nikolai Kochetov)。- 定数カラムと、
ORDER BY句がプライマリキーのプレフィックスになっているクエリを修正しました。#13396 (Anton Popov)。 - roundUpToPowerOfTwoOrZero() において、MSB がセットされている数値に対して渡された数値自体を返すようにしました。#13234 (Azat Khuzhin)。
ClickHouse リリース v20.3.16.165-lts 2020-08-10
バグ修正
parseDateTimeBestEffort関数に引数として Unix タイムスタンプを渡した際に発生していたエラーを修正しました。これにより #13362 が解決されました。#13441(alexey-milovidov)。NaN値を含む Float 型に対して呼び出されたuniqExact、topK、sumDistinctなどの集約関数で、潜在的な低いパフォーマンスおよびわずかに不正確な結果が発生する問題を修正しました。これはデバッグビルドでassertをトリガーする原因にもなっていました。この変更により #12491 が修正されました。#13254(alexey-milovidov)。- リテラルの NULL ではない nullable な constexpr を条件に取る
if関数の不具合を修正しました。#12463 を修正します。#13226(alexey-milovidov)。 - 配列要素が Nullable であり、配列の添字も Nullable である場合の
arrayElement関数内のアサートを修正しました。これにより #12172 が解決されます。#13224(alexey-milovidov)。 - ローカルレプリカからの SELECT クエリでスレッド数が不要に制限されていた問題を修正しました。 #12840 (Nikolai Kochetov).
WITH TOTALSを使用するクエリで発生する可能性があった、データの余分なオーバーフロー行を修正しました。 #12747 (Nikolai Kochetov).IN節内で関数として解釈される大きなタプルを使用した場合のパフォーマンス問題を修正しました。ユーザーが何らかのよく分からない理由でWHERE x IN (1, 2, ...)ではなくWHERE x IN tuple(1, 2, ...)と記述してしまうケースです。 #12700 (Anton Popov).- input_format_parallel_parsing のメモリトラッキングを修正(スレッドをグループに関連付けることで実現)。 #12672 (Azat Khuzhin).
- #12293 を修正し、サブクエリに WITH 句が含まれている場合でも述語プッシュダウンを許可するようにしました。 #12663 (Winter Zhang)。
- Fixed #10572 定数式を用いる Bloom Filter インデックスの不具合を修正。#12659 (Winter Zhang).
- ブローカーが利用不能な場合(など)に StorageKafka で SIGSEGV が発生する不具合を修正しました。 #12658 (Azat Khuzhin).
- キャッシュレイアウトを使用する外部ディクショナリにおけるレースコンディションを修正しました。この問題によりサーバークラッシュが発生する可能性がありました。 #12566 (alesapin).
enable_mixed_granularity_parts=1のときにALTER DELETEクエリ実行後、古いパーツが破損する原因となっていたバグを修正しました。#12536 を修正。#12543(alesapin)。- 引数の数が不正な場合に関数
inが送出する例外を改善。 #12529 (Anton Popov). - コンパクトなパーツからの読み取り時のパフォーマンス問題を修正しました。 #12492 (Anton Popov).
text_logが有効化されている場合に発生していたデッドロックを修正しました。 #12452 (alexey-milovidov).- StorageMerge 使用時に発生する可能性があったセグメンテーションフォルトを修正しました。#12054 をクローズ。 #12401 (tavplubix).
-StateおよびNullable引数を持つ集約関数に対するTOTALS/ROLLUP/CUBEを修正しました。これにより #12163 が解決されました。 #12376 (alexey-milovidov).WITH FILL修飾子における列の順序を修正しました。以前は、ORDER BY句で指定した列の順序が反映されていませんでした。 #12306 (Anton Popov).- 仮想カラム(
Mergeテーブルにおける_tableなど)や、system.tablesからクエリする際のデータベース名によるフィルタリングといった、システムテーブルの「index」カラムでデータをフィルタする式が存在し、その式がNullable型を返す場合に発生していた「bad cast」例外を回避します。これにより #12166 が修正されました。#12305(alexey-milovidov)。 TrieDictionaryの読み込みに失敗した場合にエラーを表示するようにしました。 #12290 (Vitaly Baranov)。- 空の配列に対しては
arrayFill関数が正しく動作せず、クラッシュを引き起こす可能性がありました。これにより #12263 が修正されました。 #12279(alexey-milovidov)。 LowCardinality型に対して共通型への変換を実装しました。これにより、LowCardinality 列とその他の列を含むテーブル同士で UNION ALL を実行できるようになります。この変更により #8212 および #4342 が修正されました。#12275(alexey-milovidov)。StorageFileで複数回連続して挿入を行った際、一部の特殊な型でヘッダーが複数回書き込まれてしまう問題を修正しました。これにより #6155 が解決しました。 #12197 (Nikita Mikhaylov).- 0 または 1 以外の UInt8 値に対する論理関数の動作を修正しました。 #12196 (Alexander Kazakov).
- GROUP BY での単射関数削除時における
dictGetの引数チェックを修正しました。 #12179 (Azat Khuzhin). ALTER DELETEにおいて、条件が NULL と評価された場合にレコードが削除されてしまっていた誤ったロジックを修正しました。これにより #9088 が修正されます。#12106 はこれでクローズされます。#12153(alexey-milovidov)。- エイリアスが存在する場合に外部DBMS(例: MySQL、ODBC)へ送信するクエリの変換処理を修正しました。これにより #12032 の問題が解消されます。#12151(alexey-milovidov)。
- 整数除算時に発生し得るオーバーフローを修正しました。これにより #12119 が解決されました。 #12140(alexey-milovidov)。
greatCircleDistanceとgeoDistanceにおいて無限ループが発生する可能性のあった問題を修正しました。これにより #12117 が解決されます。 #12137(alexey-milovidov)。There is no queryという例外が、結合を含むマテリアライズドビュー、または system ログ(system.query_log、metric_log など)や engine=Buffer の基になるテーブルに紐づいたサブクエリを含むマテリアライズドビューで発生しないようにしました。 #12120 (filimonov).UNIONを含む SELECT において、スレッド総数に対する誤った上限値が原因となっていたパフォーマンス問題を修正しました。#12030 を修正。 #12103(Nikolai Kochetov)。-StateResampleコンビネータで発生していたセグメンテーションフォルトを修正しました。#12092 (Anton Popov)。VIEWからの SELECT に対してスレッド数を不必要に制限していた問題を修正しました。これにより、#11937 が修正されました。 #12085(Nikolai Kochetov)。PREWHEREに誤った型を使用した場合に発生しうるクラッシュを修正しました。 #12053、#12060 を解決しています。 #12060(Nikolai Kochetov)。LowCardinality型に対する関数defaultValueOfArgumentTypeで発生していたExpected single dictionary argument for functionエラーを修正し、#11808 を解決しました。 #12056 (Nikolai Kochetov)。Tuple(LowCardinality)引数を持つ高階関数で発生していたCannot capture columnエラーを修正しました。これにより #9766 が解決されました。 #12055 (Nikolai Kochetov).- データベース読み込み時にテーブルのメタデータを並列に解析するようにしました。これにより、多数のテーブルが存在する場合のサーバー起動の遅さが解消されます。 #12045 (tavplubix).
topK集約関数が Enum 型に対して Enum を返すようにしました。これにより #3740 が修正されました。 #12043 (alexey-milovidov).- 制約が定数式かどうかを検査するように修正しました。これにより #11360 が解決されました。#12042(alexey-milovidov)。
Nullable列を含むタプルの誤った比較を修正。#11985 を修正。#12039(Nikolai Kochetov)。- サイズが異なる
FixedString型の引数で関数ifを呼び出した際に、誤った結果やクラッシュが発生する可能性のあった問題を修正しました。これにより #11362 が修正されました。 #12021 (alexey-milovidov)。 - 戻り値の式が
neighbor関数だけのクエリは、オフセット-9223372036854775808でこの関数が呼び出されると、空の結果を返すことがあります。この問題を修正しました #11367。 #12019 (alexey-milovidov)。 generateRandomにおいて、クラッシュにつながるおそれのあった配列サイズのオーバーフローの問題を修正しました。これにより #11371 が解決されます。 #12013(alexey-milovidov)。- 浮動小数点例外が発生する可能性のある問題を修正しました。これにより #11378 がクローズされました。#12005(alexey-milovidov)。
- サーバー起動時のログメッセージ内の誤った設定名を修正しました。 #11997 (alexey-milovidov).
Valuesフォーマットで発生していたQuery parameter was not setエラーを修正しました。#11918 を解決します。 #11936 (tavplubix).- クエリ内の置換(パラメータ化クエリ)で使用するエイリアスを保持するようにしました。これにより #11914 が修正されました。 #11916 (alexey-milovidov).
- DateTime64 をパースする際に発生する可能性のあった浮動小数点例外を修正しました。これにより #11374 が解決されました。#11875(alexey-milovidov)。
HTTPインターフェイス経由のメモリ計上を修正しました(wait_end_of_query=1の場合に大きな影響が生じる可能性があります)。 #11840 (Azat Khuzhin).- 条件に NULL を含む場合の
if()が誤った結果を返す問題を修正しました。 #11807 (Artem Zuikov). - 等価比較を行う前に ZooKeeper に保存されているメタデータを解析するようにしました。 #11739 (Azat Khuzhin).
- エイリアスを含む
ORDER BY句と併用したLIMIT n WITH TIESの動作を修正しました。 #11689 (Anton Popov). - cache dictionary における未初期化メモリの読み取りが発生する可能性を修正。 #10834 (alexey-milovidov).
パフォーマンスの改善
- リテラルを伴う
IN演算子でインデックスが使用されず、v19.3 前後でパフォーマンスが低下していた問題を修正。これにより #10574 が解決されます。 #12062 (nvartolomei)。
ClickHouse リリース v20.3.12.112-lts 2020-06-25
バグ修正
Nullableカラムを PREWHERE 句で使用した場合にまれに発生するクラッシュを修正しました。#11608 の継続対応です。#11869(Nikolai Kochetov)。- 高階関数の内部で arrayJoin を許可しないようにしました。これが原因でプロトコルの同期が壊れる問題が発生していました。この変更により #3933 が解決されます。 #11846 (alexey-milovidov)。
- クエリで過剰なスレッド数が使用される問題を修正。 #11788 (Nikolai Kochetov).
SELECT *, xyz.*のようなクエリが、本来はエラーとなるべきにもかかわらず成功してしまう予期しない動作を修正しました。 #11753 (hexiaoting).- メタデータの ALTER 処理中は、レプリケートフェッチがキャンセルされるようになりました。 #11744 (alesapin).
- Values 入力フォーマットでの複合リテラルの誤った型推論によって発生していた LOGICAL_ERROR を修正。 #11732 (tavplubix).
- 定数列に対する
ORDER BY ... WITH FILLの不具合を修正。 #11697 (Anton Popov). - XDBC bridge と通信する際に、適切なタイムアウトを渡すようにしました。以前は、bridge の生存確認とメタ情報の受信時に、タイムアウトが正しく考慮されていませんでした。 #11690 (alexey-milovidov).
system.mutationsが不正な状態になる原因となっていたエラーを修正します。mutation 全体がすでに完了しているように表示されていても、サーバーのレプリケーションキューには依然としてMUTATE_PARTタスクが残っており、それらの実行を試み続けてしまうことがありました。これにより #11611 を修正します。 #11681 (alesapin)。- 大文字小文字を区別しないフラグ付き正規表現のサポートを追加しました。これにより #11101 および #11506 が修正されます。#11649(alexey-milovidov)。
- 行レベルセキュリティが設定されている場合、単純な
countクエリの最適化を無効化しました。以前のバージョンでは、フィルタ適用後の件数ではなく、テーブル内の全レコード数がユーザーに返されていました。これにより #11352 が修正されました。 #11644(alexey-milovidov)。 - String 型のデータスキップインデックス用ブルームフィルターを修正しました。 #11638 (Azat Khuzhin).
prewhere条件でNullableカラムを使用した場合に発生するまれなクラッシュを修正しました(おそらく #11572 と何らかの関連があると考えられます)。#11608(Nikolai Kochetov)。Bufferテーブルからのサンプリング読み取りを行うクエリで発生していたBlock structure mismatchエラーを修正。 #11602 (Nikolai Kochetov).exception.code() % 256 = 0の場合に clickhouse-client が返す誤った終了コードを修正しました。 #11601 (filimonov).- サーバー起動時の「Mark cache size was lowered」に関するログメッセージ内の軽微な誤りを修正しました。これにより #11399 がクローズされました。 #11589 (alexey-milovidov)。
PREWHERE column IN (subquery)句とARRAY JOINを含むクエリで発生するSize of offsets does not match size of columnエラーを修正しました。#11580 (Nikolai Kochetov)。- HTTP セッション内のすべてのクエリに同じ
query_idが割り当てられてしまっていました。この不具合を修正しました。 #11578 (tavplubix). - これにより、ClickHouse サーバーの Docker コンテナは、サーバーの生存確認において IPv6 を優先して使用するようになります。 #11550 (Ivan Starkov).
<node>の shard_num/replica_num を修正(use_compact_format_in_distributed_parts_names を壊していた問題)。 #11528 (Azat Khuzhin).- -State 関数を用いた集約処理の途中で例外がスローされた場合に発生するメモリリークを修正しました。これにより #8995 が解決されます。 #11496(alexey-milovidov)。
- エイリアスが修飾付きカラム名を上書きしてしまう場合に分散クエリで誤った結果が返される不具合を修正。 #9672 および #9714 を解決。 #9972 (Artem Zuikov)。
ClickHouse リリース v20.3.11.97-lts 2020-06-10
新機能
- ClickHouse は辞書ソースのタイムアウトを ClickHouse 側で制御するようになりました。キャッシュ辞書の設定に 2 つの新しい設定項目が追加されました。既定では
max_lifetimeとなるstrict_max_lifetime_secondsと、既定で 1 分となるquery_wait_timeout_millisecondsです。最初の設定は、allow_read_expired_keys設定と組み合わせて使用する場合にも有用です(有効期限が大きく過ぎたキーの読み取りを禁止するため)。#10337(Nikita Mikhaylov)。
バグ修正
min_bytes_to_use_direct_ioが有効で、PREWHERE 句が有効な状態で SAMPLE を使用している場合、またはスレッド数が多い場合に発生することがあるData compressed with different methodsエラーを修正しました。これにより #11539 が解決されました。 #11540 (alexey-milovidov)。- コーデックの返す圧縮サイズを修正。 #11448 (Nikolai Kochetov).
- 列が非リテラル引数を持つ圧縮コーデックを使用している場合にサーバーがクラッシュする問題を修正。#11365 を修正。#11431(alesapin)。
nanを点として使用した場合のpointInPolygonの挙動を修正しました。#11375 を修正。#11421(Alexey Ilyukhov)。- LowCarinality(T) と Nullable(T) を使用した JOIN で発生するクラッシュを修正。 #11380。 #11414 (Artem Zuikov)。
- 誤った
USINGキーが指定された場合のエラーコードを修正。#11373。#11404(Artem Zuikov)。 - 緯度・経度の有効範囲外の引数を指定した場合の
geohashesInBoxの問題を修正しました。 #11403 (Vasily Nemkov). joinGet()関数のエラーメッセージを改善。 #11389 (Artem Zuikov).- 外部ソートおよび LIMIT を含むクエリで発生する可能性のある
Pipeline stuckエラーを修正。#11359 を解決。#11366(Nikolai Kochetov)。 - ReplicatedMergeTree におけるパーツ送信時の冗長なロックを削除しました。 #11354 (alesapin).
- 複数行モードの clickhouse-client における
\G(縦向き出力)のサポートを修正しました。これにより #9933 がクローズされました。#11350 (alexey-milovidov). - StorageJoin からの直接 SELECT(JOIN なし)時のクラッシュと誤った nullability を修正。 #11340 (Artem Zuikov).
quantilesExactWeightedArrayで発生していたクラッシュを修正。#11337(Nikolai Kochetov)。ALTERクエリでメタデータを変更する前に、マージが停止されるようになりました。 #11335 (alesapin).parallel_view_processing = 1設定を使用したMATERIALIZED VIEWへの書き込みを再び並列で行えるようにしました。 #10241 を修正。 #11330(Nikolai Kochetov)。- 抽出された JSON 内の文字列に対応の取れていない { または [ が含まれている場合の visitParamExtractRaw を修正しました。 #11318 (Ewout).
- ThreadPool において極めてまれに発生するレースコンディションを修正。 #11314 (alexey-milovidov).
- 変換時に未初期化メモリが使用される可能性のある問題を修正。例:
SELECT toIntervalSecond(now64())。#11311 (alexey-milovidov)。 - プライマリキーに Array 型のカラムを持つテーブルで、クエリがこのカラムに対して
emptyまたはnotEmpty関数によるフィルタを行っている場合に、インデックス解析が動作しない問題を修正しました。これにより #11286 が解決されます。 #11303 (alexey-milovidov)。 max_network_bandwidth、max_execution_speed、またはpriority設定によってクエリがスロットルされている場合に、クエリ速度の推定が正しく行われず、その結果min_execution_speedの制限が機能しない、あるいは誤って機能する可能性があるバグを修正しました。min_execution_speedおよびmax_execution_speedの設定がそれ以外の場合には効果を持たないため、timeout_before_checking_execution_speedのデフォルト値を 0 以外の値に変更しました。これにより #11297 が修正されます。また #5732 も修正されます。さらに #6228 も修正されます。ユーザビリティの改善として、clickhouse-clientにおいて例外メッセージとプログレスバーが連結されないようにしました。#11296 (alexey-milovidov)。- Protobuf フォーマットで不正なデータを読み込んだ際に発生するクラッシュを修正しました。これにより #5957 および #11203 が修正されました。#11258(Vitaly Baranov)。
- キャッシュディクショナリが(有効なキーがなく期限切れのキーだけの場合に)本来の値ではなくデフォルト値を返してしまうバグを修正しました。これは文字列フィールドのみに影響します。 #11233 (Nikita Mikhaylov).
VIEWから、内側のクエリに定数が含まれている場合に発生するBlock structure mismatch in QueryPipelineエラーを修正しました。 #11181 を修正。 #11205 (Nikolai Kochetov).- 関連出力の状態が不正であることを示す例外
Invalid status for associated outputが発生する可能性のある問題を修正。 #11200 (Nikolai Kochetov)。 Array(Array(LowCardinality))をキャプチャ引数として受け取る高階関数で発生する可能性のあるエラーCannot capture columnを修正しました。 #11185 (Nikolai Kochetov)。- 1000 個を超えるキーが存在する場合や一部のバックエンドで失敗する可能性があった S3 のグロブ処理を修正しました。 #11179 (Vladimir Chebotarev).
- データスキップインデックスが、バックグラウンドマージ中に変更される列(SummingMergeTree、AggregatingMergeTree、および TTL GROUP BY の場合)に依存している場合、そのインデックスは誤って計算されていました。この問題は、マージ後にインデックス計算を行うように処理を移動し、マージ後のデータに対してインデックスを計算することで修正されました。 #11162 (Azat Khuzhin).
- 単純なクエリに対するスレッドの過剰予約を修正(スレッド数削減のための最適化だが、パイプラインの変更後に一部で動作しなくなっていたもの)。#11114 (Azat Khuzhin).
HAVING句を含むクエリ(つまりサーバーイニシエーター側でのフィルタリングが必要な場合)に対して、分散クエリ用の述語最適化(enable_optimize_predicate_expression=1)を、式の順序を保持することで修正(これだけで修正としては十分)し、さらにアグリゲーターがインデックスではなくカラム名を使用するように強制します。修正対象: #10613, #11413。#10621(Azat Khuzhin)。- オフセットコミットが失敗するまれなケースにおいて Kafka から重複データを取得してしまう可能性を低減するため、コミットのリトライロジックを導入しました。 #9884 (filimonov).
パフォーマンス改善
- 外部ディクショナリを読み込む関数の各呼び出し時に、ディクショナリの取得とアクセス権チェックを一度だけ行うようにしました。 #10928 (Vitaly Baranov).
ビルド/テスト/パッケージングの改善
ClickHouse リリース v20.3.10.75-lts 2020-05-23
バグ修正
- 何もファイナライズされなかった場合は、mutation のファイナライゼーションタスクでのロギングを削除しました。 #11109 (alesapin)。
parseDateTime64BestEffortの引数解決に関する不具合を修正しました。 #11038 (Vasily Nemkov)- メソッド
getRawData()における生データのサイズの誤りを修正しました。 #10964 (Igr). - 20.1 より前のバージョンとの間で発生していた二段階集約における非互換性を修正しました。この非互換性は、イニシエータノードとリモートノードで異なるバージョンの ClickHouse を使用しており、
GROUP BYの結果セットが大きく、かつ単一のStringフィールドで集約を実行している場合に発生します。その結果、単一のキーに対してマージされていない複数の行が結果に含まれてしまうことがありました。 #10952 (alexey-milovidov). Distributedテーブルにおけるタプルの後方互換性の問題を修正しました。 #10889 (Anton Popov).- 存在しないキーを参照した場合に
StringHashTableで発生していたSIGSEGVを修正しました。 #10870 (Azat Khuzhin). ReplicatedMergeTreeにおいて、レプリカが非アクティブになった後でもそのレプリカを待ち続けてしまい、OPTIMIZEクエリ中の一部のALTERがハングする可能性があったバグを修正しました。 #10849 (tavplubix).Block::sortColumns()の後の列順を修正しました。 #10826 (Azat Khuzhin).- 識別子のクオートを行わないよう指定されている場合の
ODBCブリッジの問題を修正しました。#7984 を修正します。#10821(alexey-milovidov)。 DateLUTにおけるUBSanおよびMSanのレポートを修正しました。 #10798 (alexey-milovidov).- キー条件における誤った型変換を修正しました。#6287 を解決。#10791 (Andrew Onyshchuk)
parallel_view_processingの動作を修正しました。これにより、例外が発生した場合でも、すべてのMATERIALIZED VIEWへの挿入が漏れなく完了するようになりました。 #10241 を修正。 #10757(Nikolai Kochetov)。-Stateと組み合わせて使用した際のコンビネータ-OrNullおよび-OrDefaultを修正しました。 #10741 (hcz).- ネストされた型で
generateRandomがクラッシュする問題を修正しました。 #10583 を修正。 #10734(Nikolai Kochetov)。 - マージ後に発生することがあった、
SummingMergeTreeのLowCardinality(FixedString)キーカラムにおけるデータ破損の問題を修正しました。 #10489 を修正。 #10721 (Nikolai Kochetov)。 - 関数
h3EdgeAngleにおいて、バッファオーバーフローを引き起こす可能性のあった問題を修正しました。 #10711 (alexey-milovidov). - 合計値が消失してしまう問題を修正しました。クエリに
JOINまたは外側のWHERE条件を持つサブクエリが含まれている場合に、合計値がフィルタリングされてしまうことがありました。#10674 を修正しました。#10698(Nikolai Kochetov)。 - 1 つのクエリ内で同じ集合に対して
IN演算子を複数回使用するケースを修正しました。 #10686 (Anton Popov). readonly=2かつcancel_http_readonly_queries_on_client_close=1のとき、クライアントが接続を閉じても HTTP リクエストがハングしてしまう不具合を修正しました。#7939、#7019、#7736、#7091 を修正しました。#10684(tavplubix)。AggregateTransformコンストラクタ内のパラメータの順序を修正しました。 #10667 (palasonic1).distributed_aggregation_memory_efficientが有効な場合にリモートクエリが並列実行されない問題を修正しました。#10655 を解決します。 #10664(Nikolai Kochetov)。LIMITを含むクエリで行数が誤った値になる可能性があった問題を修正しました。#10566、#10709 を修正。#10660(Nikolai Kochetov)。- 多数のパーツを持つテーブルで ALTER を同時実行するとロックされてしまうバグを修正しました。 #10659 (alesapin).
SYSTEM DROP DNS CACHEクエリを実行した際に、接続元 IP アドレスが許可されているかを確認するために使用されるキャッシュまで同時に削除されてしまう不具合を修正しました。 #10608 (tavplubix).- このクエリに依存テーブルが含まれている場合に、
MATERIALIZED VIEWの内部クエリ内で誤ったスカラ値が返されていた問題を修正しました。 #10603 (Nikolai Kochetov). - デフォルト式の型が列の型と異なる
ALIAS列に対するSELECTを修正しました。 #10563 (Azat Khuzhin). - DateTime64 型と String 型の値の比較機能を実装しました。 #10560 (Vasily Nemkov).
- マージ処理でコンパクトパーツを別のコンパクトパーツに統合した後に、一部のケースで発生する可能性のあったインデックス破損を修正しました。 #10531 (Anton Popov).
- mutation がすべてのパーツを処理し終えているにもかかわらず、
is_done=0の状態でハングしてしまう問題を修正しました。 #10526 (alesapin). UTCからのオフセットに小数値を持つタイムゾーンで、Unix エポック開始時に発生していたオーバーフローを修正しました。これにより #9335 が解決されています。 #10513 (alexey-milovidov).Distributedストレージの不適切なシャットダウンを修正しました。 #10491 (Azat Khuzhin).- 大きな整数値を扱う場合の
simpleLinearRegressionにおける数値オーバーフローを修正しました。 #10474 (hcz).
ビルド/テスト/パッケージングの改善
- LZ4 ライブラリでの UBSan レポートを修正しました。#10631 (alexey-milovidov).
- clang-10 でのビルドを修正しました。#10238。#10370 (Amos Bird).
max_rows_to_sort設定に関する意図的に失敗するテストを追加しました。#10268 (alexey-milovidov).- 入力フォーマットにおける診断情報の出力をいくつか改善しました。#10204 を修正しました。#10418 (tavplubix).
- clickhouse-server の Docker イメージに CA 証明書を追加しました。#10476 (filimonov).
バグ修正
- エラー
the BloomFilter false positive must be a double number between 0 and 1を修正しました。#10551。#10569 (Winter Zhang).
ClickHouse リリース v20.3.8.53, 2020-04-23
バグ修正
- UTC からのオフセットが正から負、またはその逆に変更されたタイムゾーン(例: Pacific/Kiritimati)における datetime 関数の誤った挙動を修正しました。これにより #7202 #10369 が修正されました(alexey-milovidov)
distributed_group_by_no_merge有効時に発生する可能性のあるセグメンテーションフォルトを修正(20.3.7.46 で #10131 により導入されたもの)。#10399(Nikolai Kochetov)Array(Tuple(...))データ型の誤ったフラット化処理を修正しました。これにより #10259 と #10390 が修正されました(alexey-milovidov)- Aggregator でのディスク領域の予約を廃止しました。これによりディスク領域の予約に関するバグが修正され、本来であれば正常に完了できた大規模な external aggregation が失敗してしまう可能性があった問題を解消します #10375 (Azat Khuzhin)
ReplicatedMergeTreeにおけるDROPとOPTIMIZEのレースコンディションを修正しました。OPTIMIZEクエリが同時に実行されている場合、DROPが ZooKeeper 上のレプリカパスに不要なデータを残してしまうことがありました。 #10312 (tavplubix)- カラムのデフォルト値を変更した後にサーバーがテーブルをアタッチできなくなる不具合を修正しました。 #10441 (alesapin)
- テーブルをロードする前に
ATTACH DATABASEが失敗した場合でもmetadataディレクトリを削除しないようにする。 #10442 (Winter Zhang) - いくつかのデータが
quorumを指定して挿入された後、DROP PARTITIONやTTLなどによって削除され、その結果としてINSERTがハングしたり、SELECTで誤検出の例外が発生したりする不具合を複数修正しました。これにより #9946 および #10188 が修正されています(Nikita Mikhaylov) - リモートクエリで発生する可能性があった
ConcatProcessorのPipeline stuckエラーを修正。 #10381 (Nikolai Kochetov) - バッファから
HashMapを読み込もうとした際にコンパイルエラーの原因となっていたHashTableの誤った動作を修正しました。 #10386 (palasonic1) - 複数の JOIN を含むクエリで
count(*)を使用できるようにしました。#9853 #10291 を修正しました(Artem Zuikov)。 skip_unavailable_shardsよりもfallback_to_stale_replicasを優先してください。そうしないと、両方の設定を指定していて最新のレプリカが存在しない場合、クエリは失敗します(@alex-zaitsev によるパッチ)。修正:#2564。#10422(Azat Khuzhin)- ARRAY JOIN、ORDER BY、LIMIT を含むクエリで結果が欠落する場合がある問題を修正しました。これにより #10226 が修正されました。著者: Vadim Plakhtinskiy。#10427(alexey-milovidov)
- BloomFilter インデックス作成時に引数の数と型をチェックするようにしました #9623 #10431 (Winter Zhang)
パフォーマンスの改善
IN演算子の右辺に明示的に定義されたセットがあり、左辺にタプルがあるクエリのパフォーマンスを改善しました。これにより、バージョン 20.3 におけるパフォーマンス低下(リグレッション)が解消されます。#9740, #10385 (Anton Popov)
ClickHouse release v20.3.7.46, 2020-04-17
バグ修正
- カンマ区切りの結合と名前付き結合が混在するクエリで発生する
Logical error: CROSS JOIN has expressionsエラーを修正しました。#10311 (Artem Zuikov). max_bytes_before_external_group_byを使用したクエリの問題を修正しました。#10302 (Artem Zuikov).- arrayJoin 関数が存在する場合(特定のケース)の move-to-prewhere 最適化を修正しました。これにより #10092 が解消されます。#10195 (alexey-milovidov).
allow_nondeterministic_mutations設定により、ミューテーション内での非決定論的関数の使用に関する制限を緩和できるようにしました。#10186 (filimonov).
ClickHouse release v20.3.6.40, 2020-04-16
新機能
- 関数
isConstantを追加しました。この関数は、引数が定数式かどうかをチェックし、1 または 0 を返します。開発、デバッグ、およびデモ目的での使用を想定しています。#10198 (alexey-milovidov).
バグ修正
max_rows_to_group_byとgroup_by_overflow_mode = 'break'を使用した際に発生するPipeline stuckエラーを修正しました。 #10279 (Nikolai Kochetov).- まれに発生する可能性のあった例外
Cannot drain connections: cancel firstを修正。#10239(Nikolai Kochetov)。 - ユーザーが ENGINE = Replicated* のテーブルに対して ALTER UPDATE/DELETE を実行しようとした際に、ClickHouse が「Unknown function lambda.」というエラーメッセージを返してしまう不具合を修正しました。非決定的関数のチェックでラムダ式も正しく扱えるようになりました。 #10237 (Alexander Kazakov)。
- Date 型に対する generateRandom 関数を修正しました。これにより#9973が解決されます。年 2106 の日付を旧形式のパーティショニングを用いた MergeTree テーブルに挿入した際に、パーティション名が年 1970 になってしまうエッジケースを修正しました。#10218(alexey-milovidov)。
- View のテーブル定義が SELECT クエリと一致しない場合に、型を変換するようにしました。これにより、#10180 および #10022 の問題が修正されます。#10217(alexey-milovidov)。
- 曜日が火曜日または木曜日の場合に、RFC-2822 形式の文字列を扱う
parseDateTimeBestEffortを修正しました。これにより #10082 が解決されます。 #10214 (alexey-milovidov)。 JOINの内部にある定数の列名がJOINの外部にある定数と衝突する可能性がある問題を修正しました。 #10207 (alexey-milovidov).system.numbersやsystem.zerosのような無限に生成されるデータソースから読み取る際に、本来は LIMIT で停止すべきクエリが無限に実行されてしまう可能性のあった問題を修正。 #10206 (Nikolai Kochetov).- データベースが指定されていない場合に、アクセスチェックで現在のデータベースを使用するように修正。 #10192 (Vitaly Baranov)
- Distributed() への INSERT 時に構造が一致しない場合は、自動的にブロックを変換するようにしました。 #10135 (Azat Khuzhin).
- processors パイプラインにおける
extremesの結果が誤った結果を返す可能性があった問題を修正。 #10131 (Nikolai Kochetov)。 - コンパクトパーツに関連する一部の種類の
ALTERを修正しました。 #10130 (Anton Popov). - 新しいレプリカ作成時の
index_granularity_bytesの誤ったチェックを修正。 #10098 を解決。 #10121(alesapin)。 - 構造が配下のテーブルと異なる Distributed テーブルへの INSERT 実行時に SIGSEGV が発生する問題を修正。 #10105 (Azat Khuzhin).
JOINおよびUNION ALLを含むクエリで行が失われる可能性があった問題を修正。#9826、#10113 を解消。#10099(Nikolai Kochetov)。- 古い ClickHouse バージョンからのアップデート時に
/table/replicas/replica_name/metadataノードが存在しない場合に、レプリケーテッドテーブルが起動できない問題を修正しました。#10037 を解決。#10095(alesapin)。 - MySQL Database エンジン向けに引数のチェックをいくつか追加し、識別子を引数として指定することをサポートしました。 #10077 (Winter Zhang).
- localhost 上の ClickHouse サーバーを辞書ソースとして使用する際のバグを修正しました。辞書とソースの型に互換性がない場合、メモリ破壊を引き起こす可能性がありました。 #10071 (alesapin)。
- テーブルにスキップインデックスが含まれている場合の
CHECK TABLEクエリにおけるバグを修正しました。 #10068 (alesapin). - エラー
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransformを修正しました。これは、distributed_aggregation_memory_efficient設定が有効になっており、分散クエリが異なるシャードから異なるレベルで集約されたデータを読み取った場合(単一レベル集約と二レベル集約が混在している場合)に発生していました。 #10063 (Nikolai Kochetov). - 末尾にゼロバイトを含む文字列キーに対する GROUP BY 実行時に発生し得たセグメンテーションフォルトを修正しました(#8636, #8925)。#10025(Alexander Kuzmenkov)。
- リモートクエリ実行に使用されるスレッド数の制御を修正しました(20.3 以降で発生していたパフォーマンスリグレッション)。この問題は、
Distributedテーブルからのクエリがローカルおよびリモートのシャードで同時に実行された場合に発生していました。#9965 を修正。#9971(Nikolai Kochetov)。 - 一部のデータベースに対するクエリ処理のある段階で、必要なテーブルが取得されていなかったバグを修正しました。これは #9699 を解決するものです。 #9949(achulkov2)。
JOINをTOTALSと併用した際に発生する "Not found column in block" エラーを修正。#9839 を修正。#9939(Artem Zuikov)。- サーバー起動時に
ON CLUSTERDDL クエリがフリーズする不具合を修正しました。 #9927 (Gagan Arneja). CREATE USERコマンドで複数のホストを指定した場合の解析処理を修正しました。例:CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'。 #9924 (Vitaly Baranov)。- Join テーブルエンジン向けの
TRUNCATEを修正(#9917)。#9920(Amos Bird)。 - ALTER での "scalar does not exist" エラーを修正。(#9878) #9904 (Amos Bird).
ReplicatedMergeTreeにおける drop と optimize 間のレースコンディションを修正。 #9901 (alesapin).distributed_product_mode='local'における修飾名関連の不具合を修正。#4756 を解消。#9891(Artem Zuikov)。- 'allow_introspection_functions' 設定に基づくイントロスペクション関数の権限計算を修正。 #9840 (Vitaly Baranov).
ビルド/テスト/パッケージングの改善
- 統合テスト
test_settings_constraintsを修正。 #9962 (Vitaly Baranov)。 clock_getresへの依存関係を削除。 #9833 (alexey-milovidov)。
ClickHouse リリース v20.3.5.21, 2020-03-27
バグ修正
- 分散テーブルに対するクエリで PREWHERE および WHERE を使用し、かつ
SET distributed_product_mode = 'local'の場合に発生する「同じエイリアスを持つ異なる式」エラーを修正。 #9871 (Artem Zuikov)。 - 複合主キーを持つテーブルに対するミューテーションの過剰なメモリ消費を修正。これにより #9850 が解決します。 #9860 (alesapin)。
- INSERT クエリについて、これまでは例外をスローしていたところを、シャードがイニシエータから受け取った設定をシャード側の制約の範囲内に収めるように変更。この修正により、異なる制約を持つシャードに対しても INSERT クエリを送信できるようになります。この変更は #9447 の修正を強化するものです。 #9852 (Vitaly Baranov)。
- COMMA JOIN をテーブルリスト外(例: WHERE 内)のサブクエリで使用した場合に発生する「COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query」エラーを修正。 #9782 を修正。 #9830 (Artem Zuikov)。
- クライアント側で発生しうる
Got 0 in totals chunk, expected 1例外を修正。これは、右側の結合テーブルの行数が 0 の場合に、JOINを含むクエリで発生していました。例:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。 #9777 を修正。 #9823 (Nikolai Kochetov)。 - 型を変換できない場合に
optimize_skip_unused_shardsで発生する SIGSEGV を修正。 #9804 (Azat Khuzhin)。 - コンパクトパーツに対する
ALTER TABLE DELETE COLUMNクエリが正しく動作していなかった問題を修正。 #9779 (alesapin)。 - max_distributed_connections(Processors あり/なしの両方)を修正。 #9673 (Azat Khuzhin)。
- 関数引数のタイムゾーンが正しく使用されていなかったいくつかのケースを修正。 #9574 (Vasily Nemkov)。
改善
- 単一スレッドで単一の順序付きパーツから読み取るため、ミューテーションから ORDER BY ステージを削除。また、ミューテーション内の行の順序がソートキーの順序どおりであり、その順序が破られていないことを確認するチェックを追加。 #9886 (alesapin)。
ClickHouse リリース v20.3.4.10, 2020-03-20
バグ修正
- このリリースには、20.1.8.41 のすべてのバグ修正も含まれています。
- HTTP 経由のクエリ(processors パイプラインを使用)で
rows_before_limit_at_leastが欠落していた問題を修正しました。これにより #9730 が解決されています。 #9757(Nikolai Kochetov)
ClickHouse リリース v20.3.3.6, 2020-03-17
バグ修正
- このリリースには、20.1.7.38 のすべてのバグ修正も含まれています。
- 以前のバージョンでユーザーが mutation を実行していた場合にレプリケーションが動作しなくなるバグを修正しました。これにより #9645 が解決されています。 #9652(alesapin)。これによりバージョン 20.3 は再び後方互換性を持つようになります。
INSERTクエリのファイルを、よりコンパクトな形式でDistributedテーブルに書き込めるようにする設定use_compact_format_in_distributed_parts_namesを追加しました。これにより #9647 が解決されています。 #9653(alesapin)。これによりバージョン 20.3 は再び後方互換性を持つようになります。
ClickHouse リリース v20.3.2.1, 2020-03-12
後方互換性のない変更
- 多数のレプリカに対して
Distributedテーブルのデータ送信を行う際に発生していたfile name too longの問題を修正しました。サーバーログ内でレプリカの認証情報が表示されてしまう問題を修正しました。ディスク上のディレクトリ名の形式は[shard{shard_index}[_replica{replica_index}]]に変更されました。 #8911 (Mikhail Korotov) 新しいバージョンにアップグレードした後は、古いサーバーバージョンが新しいディレクトリ形式を認識しないため、手動での対応なしにダウングレードすることはできません。ダウングレードする場合は、該当するディレクトリを手動で旧形式にリネームする必要があります。この変更の影響を受けるのは、Distributedテーブルに対して非同期のINSERTを使用していた場合のみです。バージョン 20.3.3 では、新しい形式を段階的に有効化できる設定を導入する予定です。 - ミューテーションコマンド用のレプリケーションログエントリのフォーマットを変更しました。新しいバージョンをインストールする前に、既存のミューテーションの処理が完了するまで待つ必要があります。
- ソフト割り当て上限を超過したメモリ割り当て量が N バイト増えるたびにスタックトレースを
system.trace_logにダンプするシンプルなメモリプロファイラを実装しました #8765 (Ivan) #9472 (alexey-milovidov)system.trace_logのカラム名がtimer_typeからtrace_typeに変更されました。これにより、サードパーティのパフォーマンス解析ツールや Flamegraph 処理ツールに変更が必要になります。 - 内部スレッド番号の代わりに、あらゆる箇所で OS のスレッド ID を使用するようにしました。これにより、#7477 が修正されます。
send_logs_level設定が有効な場合、構造化ログメッセージの名前と型が変更されたため、旧バージョンのclickhouse-clientはサーバーから送信されるログを受信できませんでした。一方で、異なるサーバーバージョン同士が、互いに異なる型のログを送信する可能性があります。send_logs_level設定を使用していない場合は、この問題を気にする必要はありません。#8954 (alexey-milovidov) indexHint関数を削除しました #9542 (alexey-milovidov)findClusterIndex、findClusterValue関数を削除しました。これにより #8641 が修正されます。これらの関数を使用していた場合は、[email protected]宛てにメールを送ってください #9543 (alexey-milovidov)- 現在は、
SELECTサブクエリをデフォルト式として指定して列を作成または追加することはできません。 #9481 (alesapin) - JOIN における副問い合わせに別名の指定を必須化。 #9274 (Artem Zuikov)
ALTER MODIFY/ADDクエリのロジックを改善しました。これにより、型を指定せずにカラムをADDすることはできず、MODIFYでデフォルト式を変更してもカラムの型は変わらず、MODIFYで型を変更してもデフォルト式の値は失われません。この変更により #8669 が修正されています。#9227(alesapin)- ログ設定の変更を反映するには、サーバーを再起動する必要があります。これは、削除されたログファイルに対してサーバーがログ出力を続けてしまう不具合を避けるための一時的な回避策です(#8696 を参照)。#8707(Alexander Kuzmenkov)
- 設定
experimental_use_processorsはデフォルトで有効になっています。この設定により、新しいクエリパイプラインが使用されます。これは内部的なリファクタリングであり、ユーザーからは変更が分からない想定です。もし何か問題が発生した場合は、値を 0 に戻してください。 #8768 (alexey-milovidov)
新機能
AvroおよびAvroConfluentの入力/出力フォーマットを追加 #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov)cache辞書における期限切れキーのマルチスレッドかつノンブロッキングな更新(古い値の読み取りを許可するオプション付き)。 #8303 (Nikita Mikhaylov)- クエリ
ALTER ... MATERIALIZE TTLを追加しました。このクエリは、TTL によって期限切れとなったデータを強制的に削除するミューテーションを実行し、すべてのパーツにおける TTL のメタ情報を再計算します。 #8775 (Anton Popov) - 必要に応じて HashJoin からディスク上の MergeJoin に切り替える #9082 (Artem Zuikov)
ALTER TABLEにMOVE PARTITIONコマンドを追加 #4729 #6168 (Guillaume Tassery)- 構成ファイルからストレージ設定をオンザフライで再読み込みできるようにしました。 #8594 (Vladimir Chebotarev)
storage_policyを、現在と同等以上にリッチなポリシーへ変更できるようにしました。 #8107 (Vladimir Chebotarev)- S3 ストレージおよびテーブル関数でグロブ/ワイルドカードがサポートされるようになりました。 #8851 (Vladimir Chebotarev)
FixedString(N)データ型向けにbitAnd、bitOr、bitXor、bitNotを実装しました。 #9091 (Guillaume Tassery)- 関数
bitCountを追加しました。これにより #8702 が修正されました。 #8708 (alexey-milovidov) #8749 (ikopylov) - 指定したスキーマに従うランダムな行を生成するための
generateRandomテーブル関数を追加しました。これにより、任意のテスト用テーブルにデータを投入できるようになります。 #8994 (Ilya Yatsishin) JSONEachRowFormat: 最上位が配列で、その中にオブジェクトが含まれている特殊なケースをサポート。 #8860 (Kruglov Pavel)- これで、
ALIASのデフォルト式を持つ列に依存するDEFAULT式を持つ列を作成できるようになりました。 #9489 (alesapin) clickhouse-obfuscatorでソースデータのサイズより大きい--limitを指定できるようにしました。データは異なる乱数シードで繰り返されます。 #9155 (alexey-milovidov)groupArrayと同様の関数groupArraySampleを、リザーバサンプリングアルゴリズムに基づいて追加しました。 #8286 (Amos Bird)- これで、
cache/complex_key_cache辞書の更新キューのサイズをシステムメトリクス経由で監視できるようになりました。 #9413 (Nikita Mikhaylov) - CSV 出力形式で、設定
output_format_csv_crlf_end_of_lineを 1 にした場合、行区切りとして CRLF を使用できるようにしました #8934 #8935 #8963 (Mikhail Korotov) - H3 API のさらなる関数を実装:
h3GetBaseCell、h3HexAreaM2、h3IndexesAreNeighbors、h3ToChildren、h3ToStringおよびstringToH3#8938 (Nico Mandery) - 新しい設定
max_parser_depthが導入され、スタックサイズの上限を制御して、大規模で複雑なクエリも処理できるようになりました。これにより、#6681 および #7668 が修正されました。#8647(Maxim Smirnov) - 未使用シャードをスキップできない場合に例外をスローするための設定
force_optimize_skip_unused_shardsを追加 #8805 (Azat Khuzhin) Distributedエンジンで送信するデータの保存先として使用する複数のディスク/ボリュームを構成できるようにした #8756 (Azat Khuzhin)- 一時データ保存用のストレージポリシー(
<tmp_policy>)をサポート。 #8750 (Azat Khuzhin) - データ送信前に例外がスローされた場合に設定される
X-ClickHouse-Exception-CodeHTTP ヘッダーを追加しました。これは #4971 の実装です。 #8786 (Mikhail Korotov) - 関数
ifNotFiniteを追加しました。これは単なる構文シュガーです:ifNotFinite(x, y) = isFinite(x) ? x : y。 #8710 (alexey-milovidov) system.dictionariesテーブルにlast_successful_update_time列を追加しました #9394 (Nikita Mikhaylov)- 圧縮なしのディスク上サイズを返す
blockSerializedSize関数を追加 #8952 (Azat Khuzhin) - 関数
moduloOrZeroを追加 #9358 (hcz) - システムテーブル
system.zerosとsystem.zeros_mt、およびテーブル関数zeros()とzeros_mt()を追加しました。テーブル(およびテーブル関数)は、zeroという名前で型がUInt8の単一カラムのみを持ち、このカラムには 0 が入ります。これは、多数の行を最速で生成するためのテスト用途として必要なものです。これにより #6604 #9593 が修正されました(Nikolai Kochetov)
実験的機能
MergeTreeファミリーのテーブルにおいて、すべてのカラムを 1 つのファイルに格納する新しいコンパクトなパーツ形式を追加しました。これにより、小規模かつ高頻度な挿入のパフォーマンスが向上します。従来の形式(カラムごとに 1 ファイル)は、現在はワイド形式と呼ばれます。データの保存形式はmin_bytes_for_wide_partおよびmin_rows_for_wide_partの設定で制御されます。 #8290 (Anton Popov)Log、TinyLog、StripeLogテーブルに対する S3 ストレージのサポートを追加しました。 #8862 (Pavel Kovalenko)
バグ修正
- ログメッセージ内の不揃いな空白を修正しました。 #9322 (alexey-milovidov)
- テーブル作成時に、名前のないタプルの配列が
Nested構造としてフラット化されてしまう不具合を修正。 #8866 (achulkov2) Fileテーブルまたはfileテーブル関数で、glob パターンにマッチするファイルが多すぎる場合に「Too many open files」エラーが発生する可能性があった問題を修正しました。現在はファイルを遅延的にオープンするようになりました。これにより #8857 #8861 が解決されています(alexey-milovidov)- DROP TEMPORARY TABLE は、一時テーブルだけを削除するようになりました。 #8907 (Vitaly Baranov)
- サーバーのシャットダウン時やテーブルの DETACH/ATTACH 時に、古いパーティションを削除します。 #8602 (Guillaume Tassery)
- デフォルトディスクが
dataサブディレクトリを基準に空き容量を計算する方法を変更しました。dataディレクトリが別のデバイスにマウントされている場合(まれなケース)に、空き容量が正しく計算されない問題を修正しました。これにより #7441 #9257 が解決されました (Mikhail Korotov) IN ()を含むカンマ(クロス)JOINを許可。 #9251 (Artem Zuikov)- WHERE 句に [NOT] LIKE 演算子が含まれている場合に、CROSS JOIN を INNER JOIN に書き換えられるようにしました。 #9229 (Artem Zuikov)
distributed_aggregation_memory_efficient設定を有効にした状態でGROUP BYを実行した際に、誤った結果が返される可能性がある問題を修正。 #9134 を修正。 #9289(Nikolai Kochetov)- ヒットしたキーが、キャッシュ辞書のメトリクスでミスとしてカウントされていました。 #9411 (Nikita Mikhaylov)
- #8598 で導入されたレプリケーションプロトコルの互換性の問題を修正。 #9412 (alesapin)
ReplicatedMergeTreeテーブルの起動時に発生していたqueue_task_handleのレースコンディションを修正しました。 #9552 (alexey-milovidov)SHOW TABLES NOT LIKEクエリでNOTトークンが正しく動作していませんでした #8727 #8940 (alexey-milovidov)- 関数
h3EdgeLengthMに範囲チェックを追加しました。このチェックがないと、バッファーオーバーフローが発生する可能性があります。 #8945 (alexey-milovidov) - 10 個を超える引数に対する三項論理演算子のバッチ計算で発生していたバグを修正しました。 #8718 (Alexander Kazakov)
- セグメンテーションフォールトや
Inconsistent number of columns got from MergeTreeRangeReader例外が発生する可能性のあった PREWHERE 最適化の不具合を修正。 #9024 (Anton Popov) - セキュア接続において、実際にはタイムアウトを超過していないにもかかわらず、query profiler が有効化されているとランダムに発生していた予期しない
Timeout exceeded while reading from socket例外を修正しました。また、SSL ハンドシェイクは通常の TCP 接続よりも遅いため、セキュア接続向けに使用されるconnect_timeout_with_failover_msと同様の役割を持つconnect_timeout_with_failover_secure_ms設定(デフォルト 100ms)も追加しました #9026 (tavplubix) - mutation の完了処理において、
parts_to_do=0かつis_done=0の状態で mutation がハングする可能性があるバグを修正。 #9022 (alesapin) partial_merge_join設定を使って新しい ANY JOIN ロジックを利用できるようになりました。partial_merge_join=1を指定することで、ANY|ALL|SEMI LEFTおよびALL INNERJOIN を実行できます。 #8932 (Artem Zuikov)- シャードは、例外をスローする代わりに、呼び出し元から取得した設定値を自分自身の制約に合わせて調整するようになりました。この修正により、異なる制約を持つシャードに対してもクエリを送信できるようになりました。 #9447 (Vitaly Baranov)
MergeTreeReadPoolにおけるメモリ管理の問題を修正しました。 #8791 (Vladimir Chebotarev)- 文字列
eを引数に指定して呼び出した場合のtoDecimal*OrNull()関数ファミリーの動作を修正(#8312 #8764)(Artem Zuikov)。 FORMAT Nullがクライアントに一切データを送信しないようにしました。 #8767 (Alexander Kuzmenkov)LiveViewBlockInputStream内のタイムスタンプが更新されない不具合を修正しました。LIVE VIEWは実験的な機能です。 #8644 (vxider) #8625 (vxider)- 古い TTL 式を削除できなかった
ALTER MODIFY TTLの不具合を修正しました。 #8422 (Vladimir Chebotarev) - MergeTreeIndexSet における UBSan の報告を修正しました。これにより #9250 と #9365 が修正されました(alexey-milovidov)
haystackがゼロバイトの場合のmatch関数およびextract関数の動作を修正しました。haystackが定数の場合の動作が誤っていました。これにより #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov) を修正しました。- Apache Avro サードパーティライブラリのデストラクタが例外をスローしないようにしました。 #9066 (Andrew Onyshchuk)
Kafkaからポーリングしたバッチを部分的にコミットしないでください。データに欠落が生じる可能性があります。 #8876 (filimonov)joinGetの nullable な戻り値型に関する問題を修正。 #8919 #9014 (Amos Bird)T64コーデックで圧縮された際のデータ非互換性を修正。#9016(Artem Zuikov)影響を受けるバージョンで誤った圧縮/伸長処理を引き起こしていたT64圧縮コーデック内のデータ型IDを修正。#9033(Artem Zuikov)- 設定
enable_early_constant_foldingを追加し、エラーの原因となる一部のケースでは無効化しました。 #9010 (Artem Zuikov) - VIEW に対する述語プッシュダウンオプティマイザを修正し、テストを有効にした #9011 (Winter Zhang)
Fileストレージからの読み取り時に発生する可能性があるMergeテーブルのセグメンテーションフォルトを修正 #9387 (tavplubix)ATTACH PARTITION FROM、REPLACE PARTITION、MOVE TO TABLEにおいてストレージポリシーのチェックを追加しました。これがないと、再起動後にパーツのデータへアクセスできなくなり、ClickHouse が起動できなくなる可能性がありました。 #9383 (Vladimir Chebotarev)- テーブルに TTL が設定されている場合の ALTER クエリを修正。#8800 (Anton Popov)
SYSTEM RELOAD ALL DICTIONARIESが実行されている最中に、いずれかの辞書が変更・追加・削除されている場合に発生し得る競合状態を修正しました。 #8801 (Vitaly Baranov)- 以前のバージョンでは、
Memoryデータベースエンジンのデータパスが空に設定されていたため、テーブルはデータベースのデータディレクトリ(例:/var/lib/clickhouse/db_name)ではなく、pathディレクトリ(例:/var/lib/clickhouse/)に作成されていました。 #8753 (tavplubix) - デフォルトディスクまたはポリシーが存在しないとする誤ったログメッセージを修正しました。 #9530 (Vladimir Chebotarev)
- 配列型に対する bloom_filter インデックスでの not(has()) を修正。 #9407 (achimbab)
Logエンジンを使用するテーブルで、先頭列(複数可)をエイリアスにすることを許可 #9231 (Ivan)- 1 つのスレッドで
MergeTreeテーブルから読み込む際の範囲の順序を修正しました。この問題により、MergeTreeRangeReaderによる例外発生や誤ったクエリ結果につながる可能性がありました。 #9050 (Anton Popov) reinterpretAsFixedStringがStringではなくFixedStringを返すように変更しました。 #9052 (Andrew Onyshchuk)- ユーザーに、詳細なエラー説明の代わりに
Successと表示される誤ったエラーメッセージが極めてまれに返されるケースを回避しました。 #9457 (alexey-milovidov) - 行テンプレートが空の場合でも
Templateフォーマットを使用してクラッシュしないようにしました。 #8785 (Alexander Kuzmenkov) - システムテーブル用のメタデータファイルが誤った場所に作成される可能性があった問題を修正しました #8653(tavplubix)。#8581 を解決します。
- キャッシュ辞書における
exception_ptrのデータレースを修正 #8303。#9379 (Nikita Mikhaylov) - クエリ
ATTACH TABLE IF NOT EXISTSに対しては例外をスローしないようにしました。以前は、IF NOT EXISTS句が付いていても、テーブルがすでに存在する場合に例外がスローされていました。 #8967 (Anton Popov) - 例外メッセージの閉じ括弧の欠落を修正。 #8811 (alexey-milovidov)
- インタラクティブモードで clickhouse-client を起動した際に表示されるメッセージ
Possible deadlock avoidedを抑止しました。 #9455 (alexey-milovidov) - base64 エンコードされた値の末尾のパディングが不正な形式になる可能性がある問題を修正。base64 ライブラリを更新。これにより #9491 が解決され、#9492 および #9500 がクローズされました(alexey-milovidov)
- 例外がサフィックスの読み取り後からコミット前までの間に発生するまれなケースで、
Kafka内のデータが失われる問題を防止。 #9378 #9507 を修正。(filimonov) DROP TABLE IF EXISTSで発生する例外を修正 #8663 (Nikita Vasilev)- 旧形式の
MergeTreeテーブルエンジンファミリーに対してユーザーがALTER MODIFY SETTINGを実行しようとした際にクラッシュが発生していた問題を修正。 #9435 (alesapin) - JSON関連関数において、Int64に収まらないUInt64の値をサポート。SIMDJSONをmasterブランチに更新。これにより #9209 #9344 を修正(alexey-milovidov)
- 非厳密単調な関数インデックス使用時における反転述語の評価を修正。 #9223 (Alexander Kazakov)
GROUP BYでIN定数の畳み込みを行わないように変更 #8868 (Amos Bird)ALTER DELETEミューテーションによってインデックスの破損が発生するバグを修正しました。これにより #9019 および #8982 が修正されます。さらに、ReplicatedMergeTreeのALTERクエリで発生する極めてまれなレースコンディションも修正しました。#9048 (alesapin)- 設定
compile_expressionsが有効になっている場合、Nullable型を使用するとLLVMExecutableFunctionでunexpected columnエラーが発生することがあります #8910 (Guillaume Tassery) Kafkaエンジンに対する複数の修正: 1) コンシューマグループのリバランス中に発生していた重複データを修正。2) 複数パーティションから 1 回の poll でデータを取得し、一部だけをコミットした場合にまれに発生していた「穴」を修正(現在は取得したメッセージブロック全体を常に処理・コミットするようになっています)。3) ブロックサイズによるフラッシュ処理を修正(それ以前はタイムアウトによるフラッシュのみが正しく機能していました)。4) より適切なサブスクリプション手順(割り当てフィードバック付き)。5) テストがより高速に動作するように調整(デフォルトのインターバルとタイムアウトを使用)。データがこれまでドキュメントどおりにブロックサイズ単位でフラッシュされていなかったことにより、この PR によってデフォルト設定ではパフォーマンスが低下する可能性があります(最適とはいえない、より頻繁かつ小さいフラッシュが発生するため)。この変更適用後にパフォーマンス上の問題が発生した場合は、テーブルのkafka_max_block_sizeをより大きな値に増やしてください(例:CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288)。修正 #7259 #8917 (filimonov)- PREWHERE 最適化後に一部のクエリで発生する
Parameter out of bound例外を修正しました。 #8914 (Baudouin Giard) arrayZip関数の引数で const/非 const が混在していたケースを修正しました。 #8705 (alexey-milovidov)CREATEクエリの実行時に、ストレージエンジンの引数に含まれる定数式を折りたたんで評価するようにしました。データベース名が空の場合は、現在のデータベースに置き換えます。#6508、#3492、#9262 を修正 (tavplubix)a DEFAULT b, b DEFAULT aのような単純な循環エイリアスを持つカラムを作成または追加することはできなくなりました。 #9603 (alesapin)ALTER TABLE MOVEを使用している場合に、元のパーツを破損させうる二重移動に関するバグを修正しました。 #8680 (Vladimir Chebotarev)interval識別子がバッククォートなしでも正しくパースされるようにしました。また、interval識別子をバッククォートまたは二重引用符で囲んだ場合でもクエリを実行できない不具合を修正しました。これにより #9124 が修正されました。#9142(alexey-milovidov)bitTestAll/bitTestAny関数のファジングテストと誤動作を修正しました。 #9143 (alexey-milovidov)LIMIT n WITH TIESにおいて、n 行目と等しい行が多数存在する場合にクラッシュや誤った行数が発生しうる問題を修正。 #9464 (tavplubix)insert_quorumを有効にして書き込まれたパーツに対するミューテーションを修正。 #9463 (alesapin)Poco::HTTPServerの破棄時に発生するデータ競合を修正しました。これは、サーバーを起動してすぐにシャットダウンした場合に発生する可能性がありました。 #9468 (Anton Popov)- 存在しないテーブルに対して
SHOW CREATE TABLE a_table_that_does_not_existを実行した際に、誤解を招きかねないエラーメッセージが表示されていた不具合を修正。 #8899 (achulkov2) SELECT句に定数があり、かつORDER BY句とLIMIT句がある場合の、特定のまれなケースで発生していたParameters are out of bound例外を修正しました。 #8892 (Guillaume Tassery)- 完了済みのミューテーションに
is_done=0のステータスが設定されてしまうことがあるミューテーションのファイナライゼーションを修正。 #9217 (alesapin) - 動作しないため、MergeTree テーブルに対する旧構文での
ALTER ADD INDEXの実行を禁止しました。 #8822 (Mikhail Korotov) - サーバーの起動中は、
LIVE VIEWが依存するテーブルにアクセスしないようにし、サーバーが起動できるようにします。また、LIVE VIEWをデタッチする際には、その依存関係を削除します。LIVE VIEWは実験的な機能です。 #8824 (tavplubix) PREWHERE実行中に発生する可能性があるMergeTreeRangeReaderのセグメンテーションフォールトを修正。 #9106 (Anton Popov)- カラム TTL に関連して発生しうるチェックサム不一致を修正。#9451(Anton Popov)
- ボリュームが 1 つだけの場合に、TTL ルールによってバックグラウンドでパーツが移動されなくなる不具合を修正しました。 #8672 (Vladimir Chebotarev)
Method createColumn() is not implemented for data type Setという問題を修正しました。これにより #7799 が解決されました。#8674(alexey-milovidov)- これにより、
MUTATIONの最終処理をより頻繁に行うようにしました。 #9427 (alesapin) - 定数を 1 減らすことで
intDivを修正 #9351 (hcz) BlockIOにおけるレースコンディションが発生する可能性のある問題を修正。 #9356 (Nikolai Kochetov)- 誤ったパラメータで作成された
Kafkaテーブルを使用/削除しようとするとサーバが異常終了するバグを修正しました。 #9513 (filimonov) - OS が
timer_create関数に対して誤った結果を返す場合のワークアラウンドを追加しました。 #8837 (alexey-milovidov) min_marks_for_seekパラメータの使用方法に関する不具合を修正しました。Distributed テーブルにシャーディングキーが存在しない場合に未使用のシャードをスキップしようとした際のエラーメッセージを修正しました。 #8908 (Azat Khuzhin)
改善
ReplicatedMergeTree*エンジンファミリーに対して、mutation を使用したALTER MODIFY/DROPクエリを実装しました。これにより、ALTERはメタデータ更新段階でのみブロックし、その後はブロックしません。 #8701 (alesapin)- CROSS を、テーブル修飾のない列名を含む
WHERE句付きの INNER JOIN に書き換えられるようにした。 #9512 (Artem Zuikov) SHOW TABLESおよびSHOW DATABASESクエリでWHERE句とFROM/IN句をサポートするようにした #9076 (sundyli)- 設定
deduplicate_blocks_in_dependent_materialized_viewsを追加しました。 #9070 (urykhy) - 最近の変更により、MySQL クライアントがバイナリ文字列を 16 進数表記で出力するようになり、人間にとって読めなくなりました(#9032)。ClickHouse での回避策は、文字列カラムを UTF-8 としてマークすることですが、これは常にそうとは限らないものの、通常は当てはまります。#9079(Yuriy Baranov)
sumMapに String および FixedString キーのサポートを追加 #8903 (Baudouin Giard)- SummingMergeTree の Map で文字列キーをサポート #8933 (Baudouin Giard)
- スレッドが例外をスローした場合でも、スレッドプールに対してスレッドの終了を通知するようにしました #8736 (Ding Xiang Fei)
clickhouse-benchmarkでquery_idを設定可能にしました #9416 (Anton Popov)ALTER TABLE ... PARTITION partitionクエリで不正な式が含まれることを許可しないようにしました。これは #7192 #8835 に対応します(alexey-milovidov)- テーブル
system.table_enginesは、supports_ttlやsupports_sort_orderなどの機能対応状況に関する情報を提供するようになりました。 #8830 (Max Akhmedov) - デフォルトで
system.metric_logを有効にします。これには、ProfileEvents と CurrentMetrics の値がcollect_interval_milliseconds間隔(デフォルトでは 1 秒)で収集された行が含まれます。このテーブルは非常に小さく(通常はメガバイトオーダーのサイズ)であり、このデータをデフォルトで収集するのは妥当です。#9225(alexey-milovidov) - グループ内のすべてのスレッドで query profiler を初期化し、例えば insert クエリを完全にプロファイルできるようにしました。これにより #6964 と #8874 が修正されました (Ivan)
- 以前の構文が
CREATE TEMPORARY TABLE ...と一貫していなかったため、現在は一時的なLIVE VIEWをCREATE TEMPORARY LIVE VIEW ...ではなくCREATE LIVE VIEW name WITH TIMEOUT [42] ...で作成するようになりました。 #9131 (tavplubix) system.text_logテーブルに書き込まれるエントリを制限するための text_log.level 設定パラメータを追加 #8809 (Azat Khuzhin)- TTL ルールに基づいてダウンロードしたパーツをディスク/ボリュームに配置できるようにした #8598 (Vladimir Chebotarev)
- 外部 MySQL 辞書向けに、MySQL コネクションプールを辞書間で共有できるようにしました。このオプションにより、MySQL サーバーへの接続数を大幅に削減できます。 #9409 (Clément Rodriguez)
clickhouse-benchmarkの出力において、補間値ではなく、各分位点に対して最も近いクエリの実行時間を表示するように変更しました。いずれかのクエリの実行時間に実際に対応する値を表示した方が望ましいためです。 #8712 (alexey-milovidov)- Kafka へのデータ挿入時にメッセージキーとタイムスタンプを追加できるようにしました。#7198 #8969 を修正(filimonov)
- サーバーをターミナル上で実行している場合、スレッド番号、クエリ ID、ログの優先度を色分けして表示するようにしました。これにより、開発者が相関付けられたログメッセージをより読みやすく確認できるようになります。 #8961 (alexey-milovidov)
Ordinaryデータベースでテーブルをロードする際の例外メッセージを改善しました。 #9527 (alexey-milovidov)- 集約関数状態を要素とする配列向けに
arraySliceを実装しました。これにより #9388 および #9391 が修正されました(alexey-milovidov) - IN 演算子の右辺で定数関数や定数配列を使用できるようにしました。 #8813 (Anton Popov)
- system.replicas のデータ取得中に ZooKeeper の例外が発生した場合、その情報を別の列に表示するようにしました。これは #9137 #9138(alexey-milovidov)の実装です。
- 破棄時に MergeTree のデータパーツをアトミックに削除するように変更。 #8402 (Vladimir Chebotarev)
- Distributed テーブルで行レベルセキュリティをサポート。 #8926 (Ivan)
- 設定値に付与されたサフィックス(KB、KiB など)を認識できるようになりました。 #8072 (Mikhail Korotov)
- 大規模な JOIN の結果を構築する際にメモリ不足 (out of memory) が発生しないようにしました。 #8637 (Artem Zuikov)
clickhouse-clientのインタラクティブモードでの補完候補にクラスタ名を追加しました。 #8709 (alexey-milovidov)- グループ内のすべてのスレッドに対してクエリプロファイラを初期化します。例えば、これにより INSERT クエリの完全なプロファイリングが可能になります #8820 (Ivan)
system.query_logテーブルにexception_codeカラムを追加しました。 #8770 (Mikhail Korotov)- デフォルトのサーバー設定ファイルでポート
9004の MySQL 互換サーバーを有効にしました。設定例中のパスワード生成コマンドを修正しました。 #8771 (Yuriy Baranov) - ファイルシステムが読み取り専用の場合でも、シャットダウン時に異常終了しないようにしました。これにより #9094 #9100 が修正されました(alexey-milovidov)
- HTTP POST クエリで
lengthが必須となる場合の例外メッセージを改善。 #9453 (alexey-milovidov) HDFSおよびFileエンジンならびにhdfsおよびfileテーブル関数に_pathと_fileの仮想列を追加 #8489 (Olga Khvostikova)MATERIALIZED VIEWの内部テーブルに新しいカラムを追加した場合に、そのビューに対する挿入で発生していたCannot find columnエラーを修正しました。 #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov)- ネイティブのクライアント-サーバープロトコルにおける progress の扱いを修正し、(ログと同様に)最終更新の後に progress を送信するようにしました。これは、ネイティブプロトコルを使用している一部のサードパーティーツールにのみ影響する可能性があります。 #9495 (Azat Khuzhin)
- MySQL プロトコルを使用しているクライアント接続数を追跡するシステムメトリクスを追加。(#9013) #9015 (Eugene Klimov)
- 今後、HTTP レスポンスには、
SELECT timezone()が返すタイムゾーン値と同じ値が設定されたX-ClickHouse-Timezoneヘッダーが含まれます。 #9493 (Denis Glazachev)
パフォーマンスの改善
- IN を使用したインデックス解析のパフォーマンスを改善。#9261 (Anton Popov)
- Logical Functions において、よりシンプルかつ効率的なコードに変更し、コードをクリーンアップ。#8718 #8728 のフォローアップ。(Alexander Kazakov)
- C++20 の機能を用いて、より厳密なエイリアシングを保証することで、全体的なパフォーマンスを改善(影響を受けるクエリで 5%〜200% 向上)。#9304 (Amos Bird)
- 比較関数の内部ループに対して、より厳密なエイリアシングを適用。#9327 (alexey-milovidov)
- 算術関数の内部ループに対して、より厳密なエイリアシングを適用。#9325 (alexey-milovidov)
- ColumnVector::replicate() の実装を約 3 倍高速化し、これを通じて ColumnConst::convertToFullColumn() が実装されています。定数を materialize するテストでも有用です。#9293 (Alexander Kazakov)
ColumnVector::replicate()に対する別の小さなパフォーマンス改善(materialize関数および高階関数を高速化)。#9293 に対するさらなる改善。#9442 (Alexander Kazakov)stochasticLinearRegression集約関数のパフォーマンスを改善。このパッチは Intel によって提供されました。#8652 (alexey-milovidov)reinterpretAsFixedString関数のパフォーマンスを改善。#9342 (alexey-milovidov)- プロセッサパイプラインにおいて、
Nullフォーマットの場合はクライアントにブロックを送信しないように変更。#8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)
ビルド/テスト/パッケージングの改善
- Windows Subsystem for Linux 上で例外処理が正しく動作するようになりました。詳細は https://github.com/ClickHouse-Extras/libunwind/pull/3 を参照してください。これにより #6480 と #9564 が解決されました(sobolevsv)。
clickhouse-clientの対話的な行編集機能のためにreadlineをreplxxに置き換えました #8416 (Ivan)- FunctionsComparison におけるビルド時間を短縮し、テンプレートのインスタンス化回数を削減しました。 #9324 (alexey-milovidov)
- CI での
clang-tidy連携を追加しました。あわせて #6044 #9566 も参照してください(alexey-milovidov) - CI で ClickHouse をリンクする際に、
gccの場合でもlldを使用するようになりました。 #9049 (alesapin) THREAD_FUZZER_*環境変数が設定されている場合に、スレッドスケジューリングをランダム化し、意図的な不具合(グリッチ)を挿入できるようにしました。これによりテストが容易になります。 #9459 (alexey-milovidov)- ステートレステストでセキュアソケットを有効にする #9288 (tavplubix)
- SPLIT_SHARED_LIBRARIES=OFF の堅牢性を向上 #9156 (Azat Khuzhin)
- CI 環境でサーバーがランダムにハングする場合にも "performance_introspection_and_logging" テストが安定して動作するようにしました。あわせて #9515 および #9528 も参照してください(alexey-milovidov)。
- スタイルチェックで XML を検証するようにしました。 #9550 (alexey-milovidov)
- テスト
00738_lock_for_inner_tableにおける競合状態(レースコンディション)を修正しました。このテストはsleepに依存していました。 #9555 (alexey-milovidov) once型のパフォーマンス テストを削除しました。これは、すべてのパフォーマンス テストを統計的な比較モード(より信頼性が高い)で実行するために必要です。 #9557 (alexey-milovidov)- 算術関数のパフォーマンステストを追加しました。 #9326 (alexey-milovidov)
sumMapおよびsumMapWithOverflow集約関数のパフォーマンス テストを追加しました。#8933 #8947 に対するフォローアップです(alexey-milovidov)。- スタイルチェックで ErrorCodes のスタイルを統一。 #9370 (alexey-milovidov)
- テスト履歴用スクリプトを追加。 #8796 (alesapin)
- GCC の警告オプション
-Wsuggest-overrideを追加し、overrideキーワードを使用すべき箇所をすべて特定して修正しました。 #8760 (kreuzerkrieg) - Mac OS X では必ず定義されているはずの weak symbol を無視する #9538 (削除されたユーザー)
- パフォーマンステストにおいて一部のクエリの実行時間を正規化しました。これは、すべてのパフォーマンステストを比較モードで実行するための準備の一環です。 #9565 (alexey-milovidov)
- pytest を使用したクエリテストをサポートするために一部のテストを修正 #9062 (Ivan)
- MSan ビルドで SSL を有効化し、ステートレステスト実行時にサーバーが起動に失敗しないようにする #9531 (tavplubix)
- テスト結果でのデータベース置換処理を修正 #9384 (Ilya Yatsishin)
- 各種プラットフォーム向けのビルド修正 #9381 (proller) #8755 (proller) #8631 (proller)
- stateless-with-coverage テスト用の Docker イメージに disks セクションを追加 #9213 (Pavel Kovalenko)
- gRPC でビルドする際にソースツリー内のファイルを使用しないようにする #9588 (Amos Bird)
- Context から SessionCleaner を削除することでビルド時間をわずかに短縮。SessionCleaner のコードをより簡素化。 #9232 (alexey-milovidov)
- clickhouse-test スクリプトにおけるハングしたクエリのチェックを更新 #8858 (Alexander Kazakov)
- リポジトリから不要なファイルを削除しました。 #8843 (alexey-milovidov)
- math のパフォーマンステストのタイプを
onceからloopに変更しました。 #8783 (Nikolai Kochetov) - コードベース向けのインタラクティブなコードブラウザ形式の HTML レポートを生成できる Docker イメージを追加。 #8781 (alesapin) Woboq Code Browser を参照。
- MSan 環境で発生する一部のテスト失敗を抑制。 #8780 (Alexander Kuzmenkov)
- "exception while insert" テストを高速化。このテストは debug-with-coverage ビルドで頻繁にタイムアウトします。 #8711 (alexey-milovidov)
libcxxとlibcxxabiを master ブランチに更新しました。#9304 および #9308 に向けた準備です(alexey-milovidov)- 不安定なテスト
00910_zookeeper_test_alter_compression_codecsを修正。 #9525 (alexey-milovidov) - 重複したリンカフラグを整理し、リンカが予期しないシンボルを参照しに行かないようにしました。 #9433 (Amos Bird)
- テストイメージに
clickhouse-odbcドライバーを追加しました。これにより、ClickHouse 独自の ODBC ドライバーを介した ClickHouse 間の連携をテストできるようになります。 #9348 (filimonov) - ユニットテストの複数のバグを修正。 #9047 (alesapin)
- 存在しない
includeディレクトリをすべて検出して排除するために、-Wmissing-include-dirsGCC 警告を有効にしました。これは主に CMake スクリプトのエラーに起因します #8704 (kreuzerkrieg) - クエリプロファイラを使用できない場合の理由を記述します。これは #9049 および #9144(alexey-milovidov)に対応するものです。
- OpenSSL を upstream の master に更新しました。TLS 接続が失敗し、
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorやSSL Exception: error:2400006E:random number generator::error retrieving entropyというメッセージが表示されることがある問題を修正しました。この問題はバージョン 20.1 で発生していました。 #8956 (alexey-milovidov) - サーバー用 Dockerfile を更新 #8893 (Ilya Mazaev)
- build-gcc-from-sources スクリプトの細かな修正 #8774 (Michael Nacharov)
number列を使用していないパフォーマンステストでは、numbersをzerosに置き換えました。これにより、よりクリーンなテスト結果が得られます。 #9600 (Nikolai Kochetov)- Column コンストラクタで
initializer_listを使用した際にスタックオーバーフローが発生する問題を修正。 #9367 (Deleted user) - librdkafka を v1.3.0 にアップグレードし、Mac OS X でバンドルされた
rdkafkaとgsaslライブラリを有効にしました。 #9000 (Andrew Onyshchuk) - GCC 9.2.0 向けのビルド修正 #9306 (vxider)
ClickHouse リリース v20.1
ClickHouse リリース v20.1.16.120-stable 2020-60-26
バグ修正
- prewhere 条件で
Nullableカラムを使用した場合に発生する、まれなクラッシュを修正しました。#11608 の継続対応です。#11869(Nikolai Kochetov)。 - 高階関数内で arrayJoin を許可しないようにしました。これが原因でプロトコルの同期が破綻する問題が発生していました。この変更により #3933 がクローズされました。#11846(alexey-milovidov)。
SELECT *, xyz.*のようなクエリが、本来はエラーとなるべきところで成功してしまっていた、予期しない挙動を修正しました。#11753(hexiaoting)。- Values 入力フォーマットにおける複雑なリテラルの型推論の誤りにより発生していた LOGICAL_ERROR を修正しました。#11732(tavplubix)。
- 定数カラムに対する
ORDER BY ... WITH FILLの問題を修正しました。#11697(Anton Popov)。 - XDBC ブリッジとの通信時に適切なタイムアウトを渡すようにしました。最近のバージョンでは、ブリッジの生存確認およびメタ情報の受信時にタイムアウトが考慮されていませんでした。#11690(alexey-milovidov)。
- 大文字・小文字を区別しないフラグ付きの正規表現をサポートしました。これにより #11101 と #11506 が修正されました。#11649(alexey-milovidov)。
- String に対するブルームフィルタ(データスキップインデックス)を修正しました。#11638(Azat Khuzhin)。
- prewhere 条件で
Nullableカラムを使用した場合に発生する、まれなクラッシュを修正しました。(おそらく #11572 と何らかの関連があります)。#11608(Nikolai Kochetov)。 - exception.code() % 256 = 0 の場合に、clickhouse-client の終了コードが誤っていた問題を修正しました。#11601(filimonov)。
- サーバー起動時の「Mark cache size was lowered」というログメッセージにおける些細な誤りを修正しました。この変更により #11399 がクローズされました。#11589(alexey-milovidov)。
- clickhouse-server の Docker コンテナが、サーバーの生存確認において IPv6 を優先して使用するようになりました。#11550(Ivan Starkov)。
- -State 関数を用いた集約の途中で例外がスローされた場合に発生していたメモリリークを修正しました。この変更により #8995 が修正されました。#11496(alexey-milovidov)。
- 'FINAL' 修飾子および 'ORDER BY' 最適化とともに、関数でラップされた主キーを使用した場合の動作を修正しました。#10715(Anton Popov)。
ClickHouse リリース v20.1.15.109-stable 2020-06-19
バグ修正
ClickHouse リリース v20.1.14.107-stable 2020-06-11
バグ修正
PREWHERE column in (subquery)およびARRAY JOINを使用したクエリで発生するSize of offsets does not match size of columnエラーを修正。#11580 (Nikolai Kochetov)。
ClickHouse リリース v20.1.13.105-stable 2020-06-10
バグ修正
min_bytes_to_use_direct_ioが有効で、PREWHERE が有効かつ SAMPLE を使用している場合、またはスレッド数が多い場合に発生しうるData compressed with different methodsエラーを修正します。これにより #11539 が修正されます。#11540(alexey-milovidov)。- コーデックで返される圧縮後サイズを修正。 #11448 (Nikolai Kochetov).
- 列がリテラル以外の引数を持つ圧縮コーデックを使用している場合に発生するサーバークラッシュを修正。#11365 を修正。#11431(alesapin)。
- point が NaN の場合の pointInPolygon の挙動を修正。#11375 を解決。#11421(Alexey Ilyukhov)。
- 緯度・経度の範囲外の引数が指定された場合の geohashesInBox の挙動を修正しました。 #11403 (Vasily Nemkov).
- 外部ソートと LIMIT を伴うクエリで発生する可能性がある
Pipeline stuckエラーを修正。 #11359 を修正。 #11366(Nikolai Kochetov)。 quantilesExactWeightedArrayでのクラッシュを修正。 #11337 (Nikolai Kochetov)。parallel_view_processing = 1を設定した場合のMATERIALIZED VIEWへの書き込みを、再び並列処理できるようにしました。#10241 を修正。#11330(Nikolai Kochetov)。- 抽出された JSON に、対応する閉じ括弧のない { または [ を含む文字列がある場合の visitParamExtractRaw の動作を修正。 #11318 (Ewout)。
- ThreadPool におけるごくまれに発生するレースコンディションを修正。 #11314 (alexey-milovidov)。
- 変換処理における未初期化メモリ使用の可能性を修正しました。例:
SELECT toIntervalSecond(now64())。#11311(alexey-milovidov)。 - プライマリキーに Array 型カラムが含まれており、クエリがそのカラムに対して
emptyまたはnotEmpty関数でフィルタしている場合に、インデックスの解析が機能しない問題を修正しました。これにより #11286 の問題が解決されます。#11303(alexey-milovidov)。 - クエリ実行速度の推定が不正確になり、クエリが
max_network_bandwidth、max_execution_speed、またはpriority設定によってスロットルされている場合にmin_execution_speedの制限が機能しない、または正しく機能しないバグを修正しました。timeout_before_checking_execution_speedのデフォルト値を 0 以外に変更しました。そうしないと、min_execution_speedおよびmax_execution_speedの設定が効果を持たないためです。これにより #11297 を修正しました。これにより #5732 を修正しました。これにより #6228 を修正しました。操作性の改善:clickhouse-clientにおいて、例外メッセージとプログレスバーが連結されて表示されてしまうことを回避しました。#11296 (alexey-milovidov)。 - Protobuf 形式の不正なデータを読み込む際に発生するクラッシュを修正しました。これにより #5957 と #11203 が修正されます。#11258(Vitaly Baranov)。
Array(Array(LowCardinality))をキャプチャ引数に取る高階関数で発生する可能性のあるエラー「Cannot capture column」を修正。 #11185 (Nikolai Kochetov).- バックグラウンドマージ中に変更されるカラム(SummingMergeTree、AggregatingMergeTree、TTL GROUP BY の場合など)に依存するデータスキッピングインデックスは、正しく計算されていませんでした。この問題は、マージ後にインデックスを計算するように処理の順序を変更し、マージ後のデータに対してインデックスが計算されるようにすることで修正されました。 #11162 (Azat Khuzhin).
- 何もファイナライズされなかった場合には、ミューテーションのファイナライズタスクでのログ出力を行わないようにしました。 #11109 (alesapin).
- parseDateTime64BestEffort の引数解決に関する不具合を修正しました。 #10925. #11038 (Vasily Nemkov).
- メソッド
getRawData()における生データサイズの誤った値を修正。#10964 (Igr). - Distributedテーブルにおけるタプルの後方互換性の問題を修正。 #10889 (Anton Popov).
- StringHashTable で、キーが存在しない場合に発生していた SIGSEGV を修正。 #10870 (Azat Khuzhin).
ReplicatedMergeTreeにおいて、あるレプリカが非アクティブになった後もそのレプリカを待ち続けてしまい、OPTIMIZEクエリ内の一部のALTERがハングする可能性があった不具合を修正しました。 #10849 (tavplubix)。- Block::sortColumns() 実行後のカラム順を修正し、実際のユースケース(Buffer エンジン)に影響することを示すテストも追加。#10826 (Azat Khuzhin)。
- 識別子のクオートを行わないよう指定された場合の ODBC ブリッジの不具合を修正しました。これにより #7984 が解決されます。 #10821 (alexey-milovidov)。
- DateLUT における UBSan および MSan の報告を修正。 #10798 (alexey-milovidov).
-
- キー条件で正しい型変換を行うために
src_typeを使用するようにしました。これにより #6287 が修正されました。#10791 (Andrew Onyshchuk).
- キー条件で正しい型変換を行うために
parallel_view_processingの動作を修正しました。これにより、例外が発生した場合でも、すべてのMATERIALIZED VIEWへの挿入処理が最後まで実行されるようになりました。#10241 を修正しました。#10757(Nikolai Kochetov)。- -State と組み合わせた場合の -OrNull および -OrDefault を修正しました。 #10741 (hcz).
- 消えてしまう合計値の問題を修正しました。クエリに
JOINや外側のWHERE条件を持つサブクエリが含まれている場合、合計値がフィルタリングされてしまうことがありました。#10674。#10698(Nikolai Kochetov)。 - 1 つのクエリ内で同一の集合に対して
IN演算子を複数回使用している場合の処理を修正しました。 #10686 (Anton Popov). - AggregateTransform コンストラクタのパラメータ順を修正。 #10667 (palasonic1).
distributed_aggregation_memory_efficientが有効な場合にリモートクエリが並列実行されない問題を修正しました。#10655 を解決。#10664(Nikolai Kochetov)。HAVING句を含むクエリ(つまりクエリ発行サーバー側でのフィルタリングが必要な場合)に対して、式の順序を保持することで分散クエリの述語最適化(enable_optimize_predicate_expression=1)を修正します(これだけで問題は解消されます)。さらに、アグリゲータがインデックスではなくカラム名を使用するように強制します。修正: #10613, #11413。#10621(Azat Khuzhin)。- エラー
the BloomFilter false positive must be a double number between 0 and 1を修正しました #10551。#10569(Winter Zhang)。 - デフォルト式の型が列の型と異なる ALIAS 列に対する SELECT を修正。 #10563 (Azat Khuzhin).
-
- DateTime64 と String の値の比較を実装しました(DateTime の場合と同様に)。 #10560 (Vasily Nemkov)
ClickHouse リリース v20.1.12.86, 2020-05-26
不具合修正
- 20.1 より前のバージョンとの間で発生していた二段階集約の非互換性を修正しました。この非互換性は、イニシエーターノードとリモートノードで異なるバージョンの ClickHouse を使用しており、
GROUP BYの結果セットのサイズが大きく、かつ単一のStringフィールドで集約を行っている場合に発生します。その結果、単一のキーに対してマージされていない複数行が結果に含まれる問題がありました。#10952(alexey-milovidov)。 SummingMergeTreeにおいて、マージ後に発生する可能性があったLowCardinality(FixedString)キー列のデータ破損を修正しました。 #10489 を解決します。 #10721 (Nikolai Kochetov)。- バグを修正しました。このバグにより、
readonly=2かつcancel_http_readonly_queries_on_client_close=1の場合に、クライアント切断時に HTTP リクエストがハングすることがありました。 #7939、 #7019、 #7736、 #7091 を修正しました。 #10684(tavplubix)。 SYSTEM DROP DNS CACHEクエリを実行した際に、特定の IP アドレスからの接続が許可されているかを確認するために使用されるキャッシュも同時に削除されてしまうバグを修正しました。 #10608 (tavplubix).- このクエリに依存テーブルが含まれている場合に、
MATERIALIZED VIEWの内部クエリ内で誤ったスカラー値が返される問題を修正しました。 #10603 (Nikolai Kochetov). - すべてのパーツに対するミューテーションが完了しているにもかかわらず、
is_done=0の状態のままハングしてしまう不具合を修正しました。 #10526 (alesapin). - UTC からのオフセットが小数のタイムゾーンにおいて、Unix epoch の開始時点で発生していたオーバーフローの問題を修正しました。これにより #9335 が解決されます。#10513(alexey-milovidov)。
- Distributed ストレージの不適切な終了処理を修正しました。 #10491 (Azat Khuzhin).
simpleLinearRegressionにおいて、大きな整数を扱う際に発生していたオーバーフローを修正しました。 #10474 (hcz).ATTACH DATABASEが失敗した際にメタデータディレクトリが削除される問題を修正しました。 #10442 (Winter Zhang).BloomFilterインデックスを作成する際の引数の数および型を検査する機能を追加しました #9623。#10431(Winter Zhang)。ARRAY JOIN、ORDER BY、LIMITを含むクエリで不完全な結果が返される可能性があった問題を修正しました。これにより #10226 が解決しました。 #10427(alexey-milovidov)。skip_unavailable_shardsよりもfallback_to_stale_replicasの使用を推奨します。 #10422 (Azat Khuzhin).Array(Tuple(...))データ型の誤ったフラット化処理を修正しました。これにより #10259 が修正されました。#10390(alexey-milovidov)。HashTableの誤った動作を修正し、バッファから HashMap を読み込もうとした際にコンパイルエラーが発生する原因となっていた問題を修正しました。 #10386 (palasonic1).ConcatProcessorにおいて、リモートクエリの実行中に発生する可能性があったPipeline stuckエラーを修正しました。 #10381 (Nikolai Kochetov).max_rows_to_group_byとgroup_by_overflow_mode = 'break'の組み合わせで発生するPipeline stuckエラーを修正しました。 #10279 (Nikolai Kochetov).- 一部のデータがクォーラム付きで挿入された後に、
DROP PARTITIONやTTLなどで削除された場合に、INSERTがハングしたり、SELECTで誤って例外が発生したりしていた複数のバグを修正しました。これにより #9946 が修正されました。 #10188 (Nikita Mikhaylov)。 - リモートサーバーで 18.12.17 より前のバージョンが使用され、クエリを開始するサーバーではより新しいバージョンが使用されており、かつ GROUP BY で固定キーと非固定キーの両方を使用し、さらに二段階の GROUP BY メソッドが有効になっている場合に発生する非互換性を修正しました。 #3254 (alexey-milovidov).
ビルド/テスト/パッケージングの改善
ClickHouse リリース v20.1.10.70, 2020-04-17
バグ修正
- まれに発生しうる例外
Cannot drain connections: cancel firstを修正しました。 #10239 (Nikolai Kochetov). - ClickHouse で、ユーザーが
ENGINE = Replicated*を使用するテーブルに対してALTER UPDATE/DELETEを実行しようとした際に'Unknown function lambda.'というエラーメッセージがスローされる不具合を修正しました。非決定的関数のチェックが、ラムダ式も正しく扱うようになりました。 #10237 (Alexander Kazakov). - 曜日が火曜日または木曜日の RFC-2822 形式の文字列に対する
parseDateTimeBestEffortの処理を修正しました。これにより #10082 が解決されます。#10214(alexey-milovidov)。 JOINの内部にある定数のカラム名が、JOINの外側にある定数の名前と衝突しないように修正しました。 #10207 (alexey-milovidov).system.numbersやsystem.zerosのような無限ソースから読み取る際に、本来は LIMIT で停止すべきクエリが終了せずに実行され続けてしまう可能性がある問題を修正。#10206 (Nikolai Kochetov)。- 特定のケースにおいて、
arrayJoin関数が使用されている場合の move-to-prewhere 最適化を修正しました。これにより #10092 が解決されました。 #10195(alexey-milovidov)。 - ミューテーションにおける非決定的関数の使用制限を緩和できる
allow_nondeterministic_mutations設定を追加しました。 #10186 (filimonov). Distributedエンジンを使用するテーブルへのINSERT時に構造が一致しない場合に、ブロックを変換するようになりました。 #10135 (Azat Khuzhin).Distributedテーブルの構造が配下のテーブルと異なる場合に、INSERT実行時に発生するSIGSEGVを修正。 #10105 (Azat Khuzhin).JOINおよびUNION ALLを含むクエリで行が失われる可能性のある問題を修正。#9826、#10113 を修正。#10099(Nikolai Kochetov)。- MySQL データベースエンジン向けに引数チェックを追加し、識別子引数をサポートしました。 #10077 (Winter Zhang).
- localhost 上の ClickHouse サーバーを辞書ソースとして使用する ClickHouse 辞書に存在したバグを修正しました。辞書とソースの型が互換性を持たない場合に、メモリ破壊が発生する可能性がありました。 #10071 (alesapin).
- エラー
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransformを修正しました。これは、distributed_aggregation_memory_efficient設定が有効になっていて、分散クエリが異なるシャードから異なるレベルで集約されたデータ(単一レベルおよび二段階の集約が混在している状態)を読み込んだ際に発生していました。 #10063 (Nikolai Kochetov)。 - 末尾にゼロバイトを含む文字列キーに対する
GROUP BYで発生する可能性のあるセグメンテーションフォルトを修正しました(#8636, #8925)。 #10025(Alexander Kuzmenkov)。 - 一部のデータベースに対するクエリを処理する特定の段階で、必要なテーブルが取得されていなかった不具合を修正しました。これにより #9699 を修正します。#9949(achulkov2)。
JOINとTOTALSを併用した場合に発生する'Not found column in block'エラーを修正しました。 #9839 の不具合に対応。 #9939 (Artem Zuikov).- サーバー起動時に
ON CLUSTERDDL クエリがフリーズするバグを修正しました。 #9927 (Gagan Arneja). - Join テーブルエンジン向けの
TRUNCATEの動作を修正(#9917)。#9920(Amos Bird)。 - ALTER クエリで発生していた
'scalar does not exist'エラーを修正 (#9878)。#9904(Amos Bird)。 ReplicatedMergeTreeにおける drop と optimize の間で発生する競合状態を修正。 #9901 (alesapin).ATTACH PARTにおけるDeleteOnDestroyのロジックを修正し、アタッチされたパーツが自動的に削除されてしまう可能性があった問題を解消し、いくつかのテストを追加しました。 #9410 (Vladimir Chebotarev).
ビルド/テスト/パッケージングの改善
- ユニットテスト
collapsing_sorted_streamを修正。#9367 (Deleted user)。
ClickHouse リリース v20.1.9.54, 2020-03-28
バグ修正
- 分散テーブル上のクエリに
PREWHEREとWHEREがあり、かつSET distributed_product_mode = 'local'が設定されている場合に発生する'Different expressions with the same alias'エラーを修正。#9871 (Artem Zuikov)。 - 複合主キーを持つテーブルに対する mutation で発生していた過剰なメモリ消費を修正。これにより #9850 が修正されます。#9860 (alesapin)。
INSERTクエリについて、これまでは例外を投げていたところを、イニシエータから受け取った設定値をシャード側の制約に収まるよう補正するように変更。この修正により、異なる制約を持つシャードに対してもINSERTクエリを送信できるようになりました。この変更は、#9447 に対する修正をさらに改善するものです。#9852 (Vitaly Baranov)。- クライアント側で発生しうる
Got 0 in totals chunk, expected 1という例外を修正。これは、右側の結合テーブルの行数が 0 の場合のJOINを伴うクエリで発生していました。例:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。#9777 を修正。#9823 (Nikolai Kochetov)。 - 型を変換できない場合に
optimize_skip_unused_shardsで発生する可能性があったSIGSEGVを修正。#9804 (Azat Khuzhin)。 - 関数引数のタイムゾーンが正しく使用されていなかったいくつかのケースを修正。#9574 (Vasily Nemkov)。
改善
- mutation では単一スレッドで単一の順序付けられたパートから読み込むため、mutation からは
ORDER BYステージを削除。また、mutation 内の行の順序がソートキー順に並んでおり、その順序が崩れていないことをチェックする処理を追加。#9886 (alesapin)。
ビルド/テスト/パッケージングの改善
ClickHouse リリース v20.1.8.41, 2020-03-20
バグ修正
ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread内の未処理例外が原因で、Cannot schedule a taskエラーが恒久的に発生しうる問題を修正しました。この修正は #6833 を解決します。#9154(Azat Khuzhin)ALTERクエリ(mutations)でメモリ消費量が過大になる問題を修正しました。この修正は #9533 および #9670 を解決します。#9754(alesapin)- 外部ディクショナリの DDL におけるバッククォート処理のバグを修正しました。この修正は #9619 を解決します。#9734(alesapin)
ClickHouse リリース v20.1.7.38, 2020-03-18
バグ修正
sumKahanとsumWithOverflowの内部関数名の誤りを修正しました。これらの関数をリモートクエリで使用した際に、例外が発生していました。 #9636 (Azat Khuzhin)。この問題はすべての ClickHouse リリースに影響していました。- 内部レプリケーションを使用する
Distributedテーブルに対するALTER ON CLUSTERを許可するようにしました。これにより #3268 を修正しました。 #9617(shinoi2)。この問題はすべての ClickHouse リリースで発生していました。 MergeTreeRangeReaderにおいて発生しうる例外Size of filter does not match size of columnおよびInvalid number of rows in Chunkを修正しました。これらは一部のケースでPREWHERE句の実行中に発生する可能性がありました。#9132 を修正。#9612(Anton Popov)- 問題を修正しました。
time + 1のような単純な算術式で記述した場合に(time + INTERVAL 1 SECONDのような式とは対照的に)、タイムゾーンが保持されていませんでした。この修正は #5743 を解決します。 #9323(alexey-milovidov)。この問題はすべての ClickHouse リリースに影響していました。 - これにより、
a DEFAULT b, b DEFAULT aのような単純な循環エイリアスを持つカラムを作成または追加することはできなくなりました。 #9603 (alesapin) - base64 エンコードされた値の末尾のパディングが不正な形式になる場合がある不具合を修正しました。base64 ライブラリを更新しました。これにより #9491 が解決され、#9492 #9500 がクローズされました(alexey-milovidov)。
Poco::HTTPServerの破棄時に発生するデータレースを修正しました。サーバーが起動してすぐにシャットダウンされた場合に発生する可能性がありました。 #9468 (Anton Popov)LIMIT n WITH TIESで、n 番目の行と同一の行が多数存在する場合にクラッシュや行数の誤りが発生する可能性がある問題を修正。 #9464 (tavplubix)- カラム TTL によって発生し得るチェックサム不一致を修正。 #9451 (Anton Popov)
- 古い形式の
MergeTreeテーブルエンジンファミリーに対してユーザーがALTER MODIFY SETTINGを実行しようとした際に発生するクラッシュの問題を修正。 #9435 (alesapin) - これからは mutations の finalize がより頻繁に実行されるようになりました。 #9427 (alesapin)
- #8598 によって導入されたレプリケーションプロトコルの非互換性を修正。 #9412 (alesapin)
- 配列型の bloom_filter インデックスにおける not(has()) の動作を修正。 #9407 (achimbab)
haystackがゼロバイトの場合のmatch関数およびextract関数の動作を修正しました。haystackが定数のときの動作が不正でした。これにより #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov) が修正されます。
ビルド/テスト/パッケージングの改善
- Windows Subsystem for Linux 上での例外処理が正しく動作するようになりました。詳細は https://github.com/ClickHouse-Extras/libunwind/pull/3 を参照してください。この変更により #6480 と #9564 が修正されました (sobolevsv)
ClickHouse リリース v20.1.6.30, 2020-03-05
バグ修正
T64コーデックで圧縮した際に発生するデータ互換性の問題を修正。- 1 つのスレッドで MergeTree テーブルから読み込む際の範囲の順序を修正しました。 #8964 を修正。
PREWHERE実行時にMergeTreeRangeReaderでセグメンテーションフォルトが発生する可能性のあった不具合を修正しました。#9064 を解決。reinterpretAsFixedStringがStringではなくFixedStringを返すように修正しました。 #9052 (oandrew)joinGetが nullable な戻り値型を返せるように修正。 #8919 を修正 #9014 (amosbird)bitTestAll/bitTestAny関数におけるファズテストと誤った動作を修正。 #9143 (alexey-milovidov)- haystack のバイト数が 0 の場合における match および extract 関数の動作を修正しました。haystack が定数のときに動作が誤っていました。#9160 を修正しました。 #9163 (alexey-milovidov)
- 非厳密単調な関数インデックス使用時における反転述語の評価を修正。#9034 を修正。 #9223 (Akazz)
WHERE句に[NOT] LIKE演算子がある場合に、CROSSをINNER JOINに書き換えられるようにしました。#9191 を修正しました。- Log エンジンのテーブルで、先頭の列(複数可)をエイリアス列として使用できるようにしました。 #9231 (abyss7)
IN()内でのカンマ結合を許可し、#7314 を修正。 #9251 (4ertus2)ALTER MODIFY/ADDクエリのロジックを改善しました。これにより、型を指定せずにカラムをADDすることはできなくなり、MODIFYによるデフォルト式の変更ではカラムの型は変わらず、MODIFYによる型の変更でもデフォルト式の値は失われません。 #8669 を修正しました。 #9227 (alesapin)- mutation の完了処理を修正し、既に完了している mutation のステータスが is_done=0 になることがある問題を解消。 #9217 (alesapin)
- system.numbers および system.numbers_mt 向けに「Processors」パイプラインをサポートするようにしました。これにより、
max_execution_timeが適用されないバグも修正されています。 #7796 (KochetovNicolai) DictCacheKeysRequestedFoundメトリクスの誤ったカウント処理を修正。 #9411 (nikitamikhaylov)ATTACH PARTITION FROM、REPLACE PARTITION、MOVE TO TABLEでストレージポリシーをチェックする処理を追加しました。これにより、再起動後にパーツのデータへアクセスできなくなり、ClickHouse が起動しなくなる可能性のあった問題を防ぎます。 #9383 (excitoon)MergeTreeIndexSetにおける UBSan のレポートを修正しました。これにより #9250 が解決されました。 #9365 (alexey-milovidov)- BlockIO で発生する可能性のあったデータレースを修正。 #9356 (KochetovNicolai)
- JSON 関連関数で Int64 に収まらない
UInt64型の数値をサポート。SIMDJSONを master の最新版に更新。これにより #9209 が修正されます。 #9344 (alexey-milovidov) - データディレクトリが別のデバイスにマウントされている場合に、空き容量が正しく計算されない問題を修正します。デフォルトディスクでは、
dataサブディレクトリから空き容量を計算します。これにより #7441 が修正されます。 #9257 (millb) OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error and SSL Exception: error:2400006E:random number generator::error retrieving entropy.というメッセージが表示されて TLS 接続が失敗することがある問題を修正しました。OpenSSL を upstream の master ブランチの最新版に更新しました。 #8956 (alexey-milovidov)CREATEクエリを実行する際、ストレージエンジンの引数に含まれる定数式を畳み込みます。空のデータベース名は現在のデータベースに置き換えます。#6508、#3492 を修正します。さらに、ClickHouseDictionarySource におけるローカルアドレスのチェックも修正します。 #9262 (tavplubix)StorageMergeにおけるセグメンテーションフォルトを修正。StorageFile から読み取る際に発生する可能性がありました。 #9387 (tabplubix)- まれに発生する、サフィックスを読み取った後コミットする前に例外が発生した場合でも、
Kafkaでデータが失われないようにしました。#9378 の修正。関連: #7175 #9507 (filimonov) - 誤ったパラメータで作成された
Kafkaテーブルを使用または DROP しようとした際にサーバーがクラッシュしてしまうバグを修正しました。 #9494 に対する修正です。#9507 を取り込みました。 #9513 (filimonov)
新機能
- マテリアライズドビューを持つテーブルへの冪等な挿入の挙動を制御するために、
deduplicate_blocks_in_dependent_materialized_viewsオプションを追加しました。この新機能は、Altinity からの特別なリクエストによりバグ修正リリースに追加されました。 #9070 (urykhy)
ClickHouse リリース v20.1.2.4, 2020-01-22
後方互換性のない変更
- 設定
merge_tree_uniform_read_distributionを廃止しました。サーバーは依然としてこの設定を認識しますが、効果はありません。 #8308 (alexey-milovidov) - 関数
greatCircleDistanceの戻り値の型をFloat32に変更しました。これは、計算結果が現在Float32であるためです。 #7993 (alexey-milovidov) - クエリパラメータは、エスケープ済み形式で表現されることが求められるようになりました。たとえば、文字列
a<tab>bを渡すにはa\tbまたはa\<tab>bと記述する必要があり、それに対応して URL ではa%5Ctbまたはa%5C%09bと記述します。これは、\Nとして NULL を渡せるようにするために必要な変更です。これにより #7488 が修正されます。 #8517 (alexey-milovidov) ReplicatedMergeTreeに対して、use_minimalistic_part_header_in_zookeeper設定をデフォルトで有効化しました。これにより ZooKeeper に保存されるデータ量が大幅に削減されます。この設定はバージョン 19.1 からサポートされており、すでに半年以上、複数のサービスの本番環境で問題なく利用しています。19.1 より古いバージョンにダウングレードする可能性がある場合は、この設定を無効にしてください。 #6850 (alexey-milovidov)- データスキッピングインデックスは本番環境で利用可能な状態となり、デフォルトで有効になりました。
allow_experimental_data_skipping_indices、allow_experimental_cross_to_join_conversionおよびallow_experimental_multiple_joins_emulation設定は廃止され、何の効果も持たなくなりました。 #7974 (alexey-milovidov) JOIN演算と整合するStorageJoin用の新しいANY JOINロジックを追加しました。挙動を変更せずにアップグレードするには、Engine Join テーブルのメタデータにSETTINGS any_join_distinct_right_table_keys = 1を追加するか、アップグレード後にこれらのテーブルを再作成する必要があります。 #8400 (Artem Zuikov)- ログ設定の変更を反映させるには、サーバーの再起動を必須としました。これは、サーバーが削除済みのログファイルにログを書き出してしまうバグ(#8696 を参照)を回避するための一時的なワークアラウンドです。 #8707 (Alexander Kuzmenkov)
新機能
system.mergesにパートのパスに関する情報を追加しました。 #8043 (Vladimir Chebotarev)ON CLUSTERモードでSYSTEM RELOAD DICTIONARYクエリを実行できる機能を追加しました。 #8288 (Guillaume Tassery)ON CLUSTERモードでCREATE DICTIONARYクエリを実行できる機能を追加しました。 #8163 (alesapin)users.xml内のユーザープロファイルは、複数のプロファイルを継承できるようになりました。 #8343 (Mikhail f. Shiryaev)- すべてのサーバースレッドのスタックトレースを確認できる
system.stack_traceテーブルを追加しました。これは、開発者がサーバーの状態を調査するのに役立ちます。これにより #7576 が修正されました。 #8344 (alexey-milovidov) - サブ秒精度を指定可能な
DateTime64データ型を追加。 #7170 (Vasily Nemkov) - クラスタ内の全ノードを対象にクエリを実行できるテーブル関数
clusterAllReplicasを追加しました。 #8493 (kiran sunkari) - 離散特徴量の情報値を計算する集約関数
categoricalInformationValueを追加。 #8117 (hcz) CSV、TSV、JSONEachRow形式のデータファイルのパースを並列化し、高速化しました。 #7780 (Alexander Kuzmenkov)- バンカーズラウンディングを行う
bankerRound関数を追加。 #8112 (hcz) - リージョン名の組み込み辞書で、さらに多くの言語をサポートするようにしました: 'ru', 'en', 'ua', 'uk', 'by', 'kz', 'tr', 'de', 'uz', 'lv', 'lt', 'et', 'pt', 'he', 'vi'. #8189 (alexey-milovidov)
ANY JOINロジックの一貫性が向上しました。これにより、t1 ANY LEFT JOIN t2はt2 ANY RIGHT JOIN t1と同等になりました。 #7665 (Artem Zuikov)ANY INNER JOINの従来の挙動を有効にするための設定any_join_distinct_right_table_keysを追加しました。 #7665 (Artem Zuikov)- 新しい
SEMIおよびANTI JOINを追加しました。以前のANY INNER JOINの動作は、現在はSEMI LEFT JOINとして利用できます。 #7665 (Artem Zuikov) Fileエンジンおよびfileテーブル関数にDistributedフォーマットを追加し、Distributedテーブルへの非同期インサートによって生成された.binファイルを読み込めるようにしました。 #8535 (Nikolai Kochetov)runningAccumulateにオプションのリセット列引数を追加し、新しいキー値ごとに集計結果をリセットできるようにしました。 #8326 (Sergey Kononenko)- ClickHouse を Prometheus のエンドポイントとして利用できる機能を追加。 #7900 (vdimir)
config.xmlにセクション<remote_url_allow_hosts>が追加され、リモートテーブルエンジンおよびテーブル関数URL、S3、HDFSで許可されるホストを制限できるようになりました。 #7154 (Mikhail Korotov)- 球面上の距離を度単位で計算する関数
greatCircleAngleを追加しました。 #8105 (alexey-milovidov) - H3 ライブラリと整合するよう、地球半径の値を変更しました。 #8105 (alexey-milovidov)
- 入力および出力用に
JSONCompactEachRowとJSONCompactEachRowWithNamesAndTypesフォーマットを追加しました。 #7841 (Mikhail Korotov) - ファイル関連のテーブルエンジンおよびテーブル関数(
File、S3、URL、HDFS)に、追加のエンジンパラメータまたはファイル拡張子に応じてgzipファイルを読み書きできる機能を追加しました。 #7840 (Andrey Bodrov) randomASCII(length)関数を追加しました。この関数は、ランダムな ASCII 印字可能文字から構成される文字列を生成します。 #8401 (BayoNet)JSON文字列から未パースの JSON 配列要素をそのまま含む配列を返す関数JSONExtractArrayRawを追加。 #8081 (Oleg Matrokhin)- 同じ長さの複数の配列を1つのタプルの配列に結合する
arrayZip関数を追加。 #8149 (Winter Zhang) - 設定された
TTL式に従ってディスク間でデータを移動できる機能を、*MergeTreeテーブルエンジンファミリーに追加。 #8140 (Vladimir Chebotarev) - 加重平均を計算するための新しい集約関数
avgWeightedを追加しました。 #7898 (Andrey Bodrov) TSV、TSKV、CSV、JSONEachRowフォーマットでは、並列解析が既定で有効になりました。 #7894 (Nikita Mikhaylov)H3ライブラリの地理空間関数h3GetResolution、h3EdgeAngle、h3EdgeLength、h3IsValid、h3kRingをいくつか追加しました。 #8034 (Konstantin Malanchev)- ファイル関連のストレージおよびテーブル関数で、Brotli(
br)圧縮をサポートしました。これにより、#8156 が修正されました。#8526(alexey-milovidov) SimpleAggregationFunction型にgroupBit*関数を追加しました。 #8485 (Guillaume Tassery)
バグ修正
Distributedエンジンを使用するテーブルのリネーム処理を修正。問題 #7868 を修正。#8306 (tavplubix)- 辞書で、ClickHouse 以外の SQL 方言では任意の文字列内の属性に
EXPRESSIONを使用できるようになりました。 #8098 (alesapin) - 不具合のあった
INSERT SELECT FROM mysql(...)クエリを修正。この変更により #8070 および #7960 が解決される。 #8234 (tavplubix) JSONEachRowからデフォルトのTupleを挿入する際に発生するエラー "Mismatch column sizes" を修正。 この変更により #5653 が解決されます。 #8606 (tavplubix)- これにより、
LIMIT BYと併用してWITH TIESを使用した場合に例外がスローされるようになりました。また、LIMIT BYと併用してTOPも使用できるようになりました。これにより #7472 が修正されました。 #7637 (Nikita Mikhaylov) clickhouse-odbc-bridgeバイナリにおける最新の glibc バージョンへの意図しない依存を修正しました。 #8046 (Amos Bird)*MergeTreeエンジンファミリーの check 関数のバグを修正しました。これにより、最後の granule と最後の mark(non-final)の行数が同じ場合でもチェックが失敗しないようになりました。 #8047 (alesapin)- 基礎となる数値型がテーブルで指定された型と同一の場合に、
ALTERクエリ実行後のEnum*カラムへの挿入が正しく動作しない問題を修正しました。これにより #7836 が解決されます。 #7908 (Anton Popov) - 関数
substringに対して、負の非定数「size」引数を許可しました。本来は許可されるべきところが、誤って禁止されていました。この変更により #4832 が修正されました。#7703(alexey-milovidov) (O|J)DBCテーブルエンジンに誤った数の引数が渡された場合に発生するパースのバグを修正。 #7709 (alesapin)- syslog にログを送信する際、実行中の ClickHouse プロセスのコマンド名を使用するように変更しました。以前のバージョンでは、コマンド名の代わりに空文字列が使用されていました。 #8460 (Michael Nacharov)
localhostの許可ホストチェックを修正。この PR では、#8241 で提供された解決策を訂正します。#8342(Vitaly Baranov)- 長い文字列引数を扱う
argMinおよびargMax関数で、結果がrunningAccumulate関数で使用される場合にまれに発生するクラッシュを修正しました。これにより #8325 および #8341 が解決されました (dinosaur) Bufferエンジンを使用するテーブルにおけるメモリのオーバーコミットを修正。 #8345 (Azat Khuzhin)- 引数の1つとして
NULLを受け取り、NULL 以外を返すことができる関数における潜在的なバグを修正しました。 #8196 (alexey-milovidov) MergeTreeテーブルエンジンのバックグラウンド処理のためのスレッドプールにおけるメトリクス計算を改善。 #8194 (Vladimir Chebotarev)- 行レベルのテーブルフィルタがある場合の
WHERE句内でのIN関数の動作を修正。これにより #6687 #8357 を修正 (Ivan) - 設定値として指定された整数値が最後まで完全にパースされなかった場合、例外がスローされるようになりました。 #7678 (Mikhail Korotov)
- 2つを超えるローカルシャードを持つ分散テーブルへのクエリで集約関数を使用した際に例外が発生する問題を修正。 #8164 (小路)
- Bloom filter が長さ 0 の配列も処理できるようになり、冗長な計算を行わなくなりました。 #8242 (achimbab)
- クライアントホストが許可されているかを確認する処理を修正し、
users.xmlで指定されたhost_regexpとクライアントホストを照合するようにしました。 #8241 (Vitaly Baranov) - 複数の
JOIN ON句で誤検知を引き起こしていた列の曖昧さチェックを緩和しました。 #8385 (Artem Zuikov) Stringデータ型の値(UTF-8検証が必要)を含むデータをJSONまたはXML形式で送信または書き込めない場合、あるいは Brotli アルゴリズムで結果データを圧縮する場合やその他の稀なケースにサーバーがクラッシュ(std::terminate)する可能性があった不具合を修正しました。これにより #7603 #8384 が修正されました(alexey-milovidov)- CI によって検出された
StorageDistributedDirectoryMonitorのレースコンディションを修正。これにより #8364 を解決。#8383(Nikolai Kochetov) *MergeTreeテーブルエンジンファミリーにおけるバックグラウンドでのマージ処理が、ストレージポリシーのボリュームの順序をこれまでより正確に保持するようになりました。 #8549 (Vladimir Chebotarev)- テーブルエンジン
KafkaはNativeフォーマットで正しく動作するようになりました。これにより #6731 #7337 #8003 が修正されました。 #8016 (filimonov) - ヘッダー付きの固定フォーマット(
CSVWithNamesなど)で、テーブルエンジンKafkaに対して EOF に関する例外をスローしていた問題を修正しました。#8016 (filimonov) IN句の右側でサブクエリからセットを作成する処理に存在したバグを修正しました。これにより、#5767 および #2542 が解決されました。 #7755 (Nikita Mikhaylov)- ストレージ
Fileからの読み取り時に発生する可能性のあるクラッシュを修正。 #7756 (Nikolai Kochetov) list型カラムを含むParquet形式ファイルの読み込みを修正しました。 #8334 (maxulan)max_parallel_replicas > 1の場合に、サンプリングキーに依存したPREWHERE条件を含む分散クエリで発生するNot found columnエラーを修正。 #7913 (Nikolai Kochetov)- テーブルのエイリアスに依存する
PREWHERE句を使用しているクエリで、主キー条件によって結果セットが空になった場合に発生していたNot found columnエラーを修正しました。 #7911 (Nikolai Kochetov) Nullable型の引数を取る場合の関数randとrandConstantの戻り値の型を修正しました。これらの関数は常にUInt32を返し、Nullable(UInt32)を返すことはなくなりました。 #8204 (Nikolai Kochetov)WITH FILL式に対する述語プッシュダウンを無効化しました。これにより #7784 が修正されました。 #7789 (Winter Zhang)FINAL句使用時にSummingMergeTreeテーブルでcount()の結果が誤っていた問題を修正。 #3280 #7786 (Nikita Mikhaylov)- リモートサーバーからの定数関数で誤った結果が返される可能性があった問題を修正しました。これは、
version()やuptime()など、サーバーごとに異なる定数値を返す関数を含むクエリで発生していました。この修正により #7666 が解決されました。#7689(Nikolai Kochetov) - 誤った結果を引き起こしていた push-down predicate 最適化の複雑なバグを修正しました。これにより、push-down predicate 最適化に関する多くの問題が解決されます。 #8503 (Winter Zhang)
CREATE TABLE .. AS dictionaryクエリで発生するクラッシュを修正。 #8508 (Azat Khuzhin).g4ファイル内の ClickHouse 構文をいくつか改善しました。 #8294 (taiyang-li)Joinエンジンを使用するテーブルとのJOINにおいてクラッシュを引き起こしていたバグを修正しました。これにより、#7556 #8254 #7915 #8100 が修正されます。 #8298 (Artem Zuikov)CREATE DATABASE時に発生していた不要な辞書の再読み込みを修正。 #7916 (Azat Khuzhin)StorageFileおよびStorageHDFSからの読み取り時のストリーム数の上限を設定しました。#7650 を修正。 #7981 (alesapin)ALTER ... MODIFY ... CODECクエリで、ユーザーがデフォルト式と CODEC の両方を指定した場合に発生するバグを修正。Issue 8593 を修正。 #8614 (alesapin)SimpleAggregateFunction(LowCardinality)型の列のバックグラウンドマージ時に発生するエラーを修正。 #8613 (Nikolai Kochetov)- 関数
toDateTime64の型チェックを修正しました。 #8375 (Vasily Nemkov) - Join エンジンを使用し、未サポートの
join_use_nulls設定を有効にした状態でのLEFTまたはFULL JOINでも、サーバーがクラッシュしなくなりました。 #8479 (Artem Zuikov) DROP DICTIONARY IF EXISTS db.dictクエリは、dbが存在しない場合でも例外をスローしなくなりました。 #8185 (Vitaly Baranov)- テーブル関数(
file、mysql、remote)で、削除済みのIStorageオブジェクトへの参照を使用していたことに起因してクラッシュが発生し得る問題を修正。テーブル関数への挿入時に指定されたカラムのパースが誤っていた問題を修正。 #7762 (tavplubix) clickhouse-serverを起動する前に、ネットワークが起動していることを確認します。これにより #7507 が修正されます。 #8570 (Zhichang Yu)- セキュア接続時のタイムアウト処理を修正し、クエリが無期限にハングしないようにしました。これにより #8126 が解決されました。#8128(alexey-milovidov)
clickhouse-copierの同時ワーカー間で発生していた不要な競合を修正。 #7816 (Ding Xiang Fei)mutationsは、対応するmutation versionが現在のmutation versionより大きい場合でも、アタッチされたパーツをスキップしないようになりました。 #7812 (Zhichang Yu) #8250 (alesapin)- 別のディスクへの移動後およびサーバー再起動後に発生する
*MergeTreeデータパーツの冗長なコピーを無視するようにしました。 #7810 (Vladimir Chebotarev) LowCardinalityを含むJOINキーを使用したFULL JOIN時のクラッシュを修正。 #8252 (Artem Zuikov)INSERT INTO tbl (x, y, x)のように、INSERTクエリ内で同じカラム名を複数回使用することは禁止されました。これにより #5465、#7681 が修正されました。#7685(alesapin)- 不明な CPU 向けに物理 CPU コア数を検出するためのフォールバックを追加しました(論理 CPU コア数を使用)。これにより #5239 を修正しました。#7726(alexey-milovidov)
- マテリアライズド列およびエイリアス列で発生する
There's no columnエラーを修正。 #8210 (Artem Zuikov) TABLEまたはDICTIONARY修飾子なしでEXISTSクエリが使用された場合(EXISTS tのようなもの)に発生していたサーバークラッシュを修正しました。これにより、#8172 が修正されます。この不具合はバージョン 19.17 から発生していました。#8213 (alexey-milovidov)SimpleAggregateFunction列使用時にまれに"Sizes of columns does not match"エラーが発生するバグを修正。 #7790 (Boris Granveaud)allow_databasesが空のユーザーにすべてのデータベースへのアクセス権が与えられていたバグを修正(allow_dictionariesも同様)。 #7793 (DeifyTheGod)- サーバーがクライアントとの接続をすでに切断していた場合に発生するクライアントクラッシュを修正。 #8071 (Azat Khuzhin)
- プライマリキーのプレフィックスと、それに続く非プライマリキー列を組み合わせてソートする場合の
ORDER BYの動作を修正。 #7759 (Anton Popov) - テーブル内に修飾された列が存在するかどうかを確認します。これにより #6836 が修正されます。#7758 (Artem Zuikov)
- マージ完了直後に実行された
ALTER MOVEが、指定したパーツではなくそのスーパー パーツを移動してしまう問題を修正。 #8103 を修正。 #8104(Vladimir Chebotarev) - 列数の異なる
UNIONを使用した場合にサーバーがクラッシュする可能性のあった問題を修正。 #7279 を修正。 #7929(Nikolai Kochetov) - 負のサイズ指定時の
substr関数の結果部分文字列のサイズを修正しました。 #8589 (Nikolai Kochetov) - これにより、バックグラウンドスレッドプール内の空きスレッドが十分にない場合、サーバーは
MergeTreeのパーツのミューテーションを実行しなくなりました。 #8588 (tavplubix) UNION ALLAST のフォーマットに関する軽微な誤記を修正。 #7999 (litao91)- 負の数に対する誤ったブルームフィルタの結果を修正しました。これにより #8317 を解決しました。 #8566 (Winter Zhang)
decompressにおけるバッファオーバーフローの可能性を修正しました。悪意のあるユーザーが、バッファ範囲外の読み取りを引き起こすよう細工された圧縮データを渡すことができてしまう不具合がありました。この問題は Yandex の情報セキュリティチームの Eldar Zaitov 氏によって発見されました。 #8404 (alexey-milovidov)arrayIntersectにおいて、整数オーバーフローにより誤った結果が返される問題を修正。 #7777 (Nikolai Kochetov)OPTIMIZE TABLEクエリは、オフラインのレプリカが操作を実行するのを待機しなくなりました。 #8314 (javi santana)Replicated*MergeTreeテーブルのALTER TTLパーサーを修正。 #8318 (Vladimir Chebotarev)- サーバーとクライアント間の通信を修正し、クエリ失敗後でもサーバーが一時テーブルの情報を読み取れるようにしました。 #8084 (Azat Khuzhin)
- 集約ビットマップとスカラーのビットマップの積集合を求める際に発生する
bitmapAnd関数のエラーを修正。 #8082 (Yue Huang) - ZooKeeper Programmer's Guide に従って
ZXidの定義を見直し、clickhouse-cluster-copierのバグを修正しました。 #8088 (Ding Xiang Fei) odbcテーブル関数がexternal_table_functions_use_nulls設定に従うようになりました。 #7506 (Vasily Nemkov)- まれに発生するデータレースを引き起こしていたバグを修正しました。 #8143 (Alexander Kazakov)
SYSTEM RELOAD DICTIONARYは、update_fieldを無視して辞書を完全に再読み込みするようになりました。これにより #7440 が修正されました。 #8037(Vitaly Baranov)- CREATE クエリで辞書の存在を確認できるようにした。 #8032 (alesapin)
ValuesフォーマットにおけるFloat*のパース処理を修正しました。これにより #7817 が解決されました。 #7870 (tavplubix)*MergeTreeテーブルエンジンファミリーの一部のバックグラウンド処理で領域を予約できない場合に発生していたクラッシュを修正しました。 #7873 (Vladimir Chebotarev)SimpleAggregateFunction(LowCardinality)カラムを含むテーブルでマージ操作がクラッシュする問題を修正しました。これにより #8515 が解決されています。#8522(Azat Khuzhin)- ICU のすべてのロケールに対するサポートを復元し、定数式に照合順序を適用できるようにしました。また、
system.collationsテーブルに言語名を追加しました。 #8051 (alesapin) - 最小有効期間がゼロの外部辞書(
LIFETIME(MIN 0 MAX N)、LIFETIME(N))がバックグラウンドで更新されない問題を修正。 #7983 (alesapin) - ClickHouse をソースとする external dictionary がクエリにサブクエリを含む場合に発生するクラッシュを修正。 #8351 (Nikolai Kochetov)
- エンジン
URLを使用するテーブルでのファイル拡張子の誤った解析を修正しました。これにより #8157 が解決されます。 #8419 (Andrey Bodrov) - キーを持たない
*MergeTreeテーブルに対するCHECK TABLEクエリを修正。 #7543 の不具合を修正。 #7979 (alesapin) Float64の MySQL 型への変換処理を修正しました。 #8079 (Yuriy Baranov)- テーブルがサーバークラッシュにより完全には削除されなかった場合、サーバーはそのテーブルの復元とロードを試みます。 #8176 (tavplubix)
- 存在しないファイルに対して挿入を行う際に、テーブル関数
fileがクラッシュする問題を修正しました。この場合はファイルを作成してから挿入を処理するようになりました。 #8177 (Olga Khvostikova) trace_logが有効になっている場合に発生し得るまれなデッドロックを修正しました。 #7838 (filimonov)- DDL クエリから作成された
RangeHashed外部ディクショナリで、Date以外の型も扱えるようにしました。 7899 を修正。 #8275(alesapin) now64()が別の関数の結果を引数として呼び出された場合に発生するクラッシュを修正。 #8270 (Vasily Nemkov)- MySQL ワイヤプロトコル経由の接続におけるクライアント IP アドレス検出のバグを修正しました。 #7743 (Dmitry Muzyka)
arraySplit関数における空配列の処理を修正しました。これにより #7708 が解決されました。#7747 (hcz)- 別の実行中の
clickhouse-serverのpid-fileが削除される可能性があった問題を修正しました。 #8487 (Weiqing Xu) invalidate_queryを持つディクショナリのリロード処理を修正しました。これにより、以前の更新試行で更新が停止し、いくつかの例外が発生していました。 #8029 (alesapin)- 関数
arrayReduceにおける二重解放("double free")を引き起こす可能性のある不具合と、メモリリークを引き起こす可能性のある集約関数コンビネータResampleの不具合を修正しました。集約関数aggThrowを追加しました。この関数はテスト用途で使用できます。 #8446 (alexey-milovidov)
改善
S3テーブルエンジン使用時のログ出力を改善しました。 #8251 (Grigory Pervakov)clickhouse-localを引数なしで呼び出した場合にヘルプメッセージを出力するようにした。これにより #5335 が修正された。 #8230 (Andrey Nagorny)ALTER UPDATE/DELETEクエリの完了を同期的に待てるようにする設定mutations_syncを追加しました。 #8237 (alesapin)config.xml内で、format_schema_pathと同様の方法で相対パスのuser_files_pathを設定できるようにしました。 #7632 (hcz)-OrZero接尾辞を持つ変換関数において、不正な型に対して例外をスローするように変更。 #7880 (Andrey Konyaev)- 分散クエリでシャードにデータを送信する際のヘッダー形式を簡素化しました。 #8044 (Vitaly Baranov)
Live Viewテーブルエンジンのリファクタリング。 #8519 (vzakaznikov)- DDL クエリから作成された外部辞書に対して追加チェックを行うようにしました。 #8127 (alesapin)
FINALとSAMPLEを同時に使用した場合(例:select count() from table final sample 1/2)に発生するColumn ... already existsエラーを修正。#5186 を解決。 #7907 (Nikolai Kochetov)joinGet関数の最初の引数としてテーブル識別子を指定できるようになりました。 #7707 (Amos Bird)Kafkaテーブルを対象とするサブクエリでMaterializedViewを使用できるようにしました。 #8197 (filimonov)- ディスク間でのバックグラウンド移動処理は、専用のスレッドプールで実行されるようになりました。 #7670 (Vladimir Chebotarev)
SYSTEM RELOAD DICTIONARYは同期的に実行されるようになりました。 #8240 (Vitaly Baranov)- スタックトレースは、仮想メモリアドレス(オブジェクトファイルがロードされた位置)ではなく、物理アドレス(オブジェクトファイル内のオフセット)を表示するようになりました。これにより、バイナリがポジションインディペンデントで ASLR が有効な場合でも
addr2lineを使用できるようになります。この変更により #8360 が修正されました。#8387(alexey-milovidov) - 行レベルセキュリティフィルタの新しい構文
<table name='table_name'>...</table>に対応しました。 #5779 を修正。 #8381 (Ivan) cityHash関数がDecimal型およびUUID型でも動作するようになりました。これにより #5184 が修正されました。 #7693 (Mikhail Korotov)- アダプティブな粒度の実装により不要になったため、システムログから固定インデックス粒度(1024)を削除しました。 #7698 (alexey-milovidov)
- ClickHouse が SSL なしでコンパイルされている場合に、MySQL 互換サーバーを有効化しました。 #7852 (Yuriy Baranov)
- サーバー側で分散バッチのチェックサムを計算するようになり、バッチ内のデータが破損している場合に、より詳細なエラーが得られるようになりました。 #7914 (Azat Khuzhin)
MySQLデータベースエンジンでDROP DATABASE、DETACH TABLE、DROP TABLE、ATTACH TABLEをサポートしました。 #8202 (Winter Zhang)- S3 テーブル関数およびテーブルエンジンに認証を追加しました。 #7623 (Vladimir Chebotarev)
- 未定義のディスク上にあるデータパーツが見落とされないようにするため、異なるディスク上に存在する
MergeTreeの余分なパーツを検査するチェックを追加しました。 #8118 (Vladimir Chebotarev) - Mac クライアントおよびサーバーでの SSL サポートを有効化。 #8297 (Ivan)
- ClickHouse は、MySQL Federated サーバーとして動作できるようになりました(https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html を参照)。 #7717 (Maxim Fedotov)
clickhouse-clientは、マルチクエリがオンでかつマルチラインがオフのときにのみbracketed-pasteを有効にするようになりました。これにより #7757 が修正されました。#7761 (Amos Bird)if関数がArray(Decimal)をサポートするようになりました。 #7721 (Artem Zuikov)arrayDifference、arrayCumSum、arrayCumSumNegative関数で Decimal 型をサポート。 #7724 (Artem Zuikov)system.dictionariesテーブルにlifetime列を追加しました。 #6820 #7727 (kekekekule)*MergeTreeテーブルエンジンにおける、異なるディスク上の既存パーツのチェック処理を改善しました。 #7660 に対応します。 #8440(Vladimir Chebotarev)S3とのやり取りにAWS SDKを統合し、すべての S3 機能を追加設定なしで利用できるようにしました。 #8011 (Pavel Kovalenko)Live Viewテーブルでサブクエリがサポートされるようになりました。 #7792 (vzakaznikov)TTL式でDateまたはDateTime列が使用されているかどうかを確認するチェックが削除されました。 #7920 (Vladimir Chebotarev)- ディスク情報が
system.detached_partsテーブルに追加されました。 #7833 (Vladimir Chebotarev) max_(table|partition)_size_to_dropの設定値は、再起動なしで変更できるようになりました。 #7779 (Grigory Pervakov)- エラーメッセージの使い勝手をわずかに改善しました。
Stack trace:の下にある行を削除しないようにユーザーへ注意を促します。 #7897 (alexey-milovidov) - #7935 以降、
Kafkaエンジンからのメッセージをさまざまなフォーマットでより適切に読み取れるように改善。 #8035 (Ivan) sha2_password認証プラグインをサポートしていない MySQL クライアントとの互換性を改善しました。 #8036 (Yuriy Baranov)- MySQL 互換サーバーでより多様な列型をサポートしました。 #7975 (Yuriy Baranov)
MergeTreeテーブルを基盤とするMerge、Buffer、およびMaterilized Viewストレージに対するORDER BYの最適化を実装しました。 #8130 (Anton Popov)- 今後は常に
getrandomの POSIX 実装を使用し、3.17 未満の古いカーネルとの互換性を向上させます。 #7940 (Amos Bird) - MOVE TTL ルールで、移動先が有効かどうかをより厳密にチェックするようにしました。 #8410 (Vladimir Chebotarev)
Distributedテーブルエンジンにおける破損した挿入バッチの検出を改善。 #7933 (Azat Khuzhin)- 将来のミューテーション処理対象となるパーツ名の配列を格納するカラムを
system.mutationsテーブルに追加。 #8179 (alesapin) - プロセッサ用の並列マージソートの最適化。 #8552 (Nikolai Kochetov)
- 設定項目
mark_cache_min_lifetimeは現在は廃止されており、効果はありません。以前のバージョンでは、mark_cache_min_lifetime秒間データを保持するために、マークキャッシュがメモリ上でmark_cache_sizeを超えて増加する場合がありました。これは混乱を招き、想定以上のメモリ使用量につながっており、特にメモリ制約の厳しいシステムでは問題となっていました。このリリースをインストールした後にパフォーマンスの低下が見られる場合は、mark_cache_sizeを増やしてください。 #8484 (alexey-milovidov) tidを全体で使用できるようにするための準備。これは #7477 に必要です。#8276(alexey-milovidov)
パフォーマンスの改善
- プロセッサーパイプラインでのパフォーマンス最適化。 #7988 (Nikolai Kochetov)
- キャッシュ辞書における期限切れキーの非ブロッキング更新(古いエントリの読み取りを許可)。 #8303 (Nikita Mikhaylov)
- 使用可能なレジスタを 1 つ増やすため、ClickHouse 全体を
-fno-omit-frame-pointerオプションを付けずにコンパイルするようにしました。 #8097 (Amos Bird) greatCircleDistance関数を高速化し、そのパフォーマンス検証用テストを追加。 #7307 (Olga Khvostikova)- 関数
roundDownのパフォーマンスを改善しました。 #8465 (alexey-milovidov) DateTime64データ型に対するmax、min、argMin、argMaxの性能を改善しました。 #8199 (Vasily Nemkov)LIMITを指定しない場合、または大きなLIMITと外部ソートを行う場合のソート処理のパフォーマンスを改善。 #8545 (alexey-milovidov)- 浮動小数点数のフォーマット処理のパフォーマンスを最大6倍高速化しました。 #8542 (alexey-milovidov)
modulo関数のパフォーマンスを改善しました。 #7750 (Amos Bird)- 単一カラムキーでの
ORDER BYとマージの最適化。 #8335 (alexey-milovidov) arrayReduce、-Arrayおよび-Stateコンビネータの実装を改善。 #7710 (Amos Bird)- これにより、
PREWHEREは少なくともWHEREと同等の効率で動作するように最適化されているはずです。 #7769 (Amos Bird) roundおよびroundBankersにおける負の数の取り扱いを改善しました。 #8229 (hcz)DoubleDeltaとGorillaコーデックのデコード性能をおよそ 30~40% 向上しました。これにより #7082 が修正されました。 #8019 (Vasily Nemkov)base64関連関数のパフォーマンスを改善しました。 #8444 (alexey-milovidov)- 関数
geoDistanceを追加しました。これはgreatCircleDistanceと似ていますが、WGS-84 楕円体モデルに基づく近似計算を行います。両方の関数のパフォーマンスはほぼ同等です。 #8086 (alexey-milovidov) Decimalデータ型向けのminおよびmax集約関数の高速化。 #8144 (Artem Zuikov)arrayReduceの処理をベクトル化しました。 #7608 (Amos Bird)ifチェーンはmultiIfとして最適化されるようになりました。 #8355 (kamalov-ruslan)- 19.15 で発生した
Kafkaテーブルエンジンのパフォーマンス低下を修正します。これにより #7261 が修正されます。 #7935 (filimonov) - Debian パッケージの
gccがデフォルトで有効にしている場合がある「pie」コード生成を削除しました。 #8483 (alexey-milovidov) - データ形式の並列パース #6553 (Nikita Mikhaylov)
- 式を含む
Values用の最適化パーサをデフォルトで有効にしました(input_format_values_deduce_templates_of_expressions=1)。 #8231 (tavplubix)
ビルド/テスト/パッケージングの改善
ARM向けおよび最小モードでのビルドを修正。 #8304 (proller)std::atexitが呼び出されない場合にclickhouse-serverのカバレッジファイルのフラッシュ処理を追加しました。また、カバレッジ付きのステートレスなテストにおけるロギングをわずかに改善しました。 #8267 (alesapin)- contrib 内の LLVM ライブラリを更新しました。OS パッケージ提供の LLVM の使用は避けるようにしました。 #8258 (alexey-milovidov)
- バンドル版
curlのビルドを完全にサイレントにする。 #8232 #8203 (Pavel Kovalenko) - いくつかの
MemorySanitizer警告を修正。 #8235 (Alexander Kuzmenkov) CMakeLists.txtでadd_warningおよびno_warningマクロを使用するように変更。 #8604 (Ivan)- 統合テストを改善するために、Minio による S3 互換オブジェクトストレージ(https://min.io/)のサポートを追加しました。 #7863 #7875 (Pavel Kovalenko)
libcヘッダーを contrib にインポートしました。これにより、さまざまなシステム間でビルドをより一貫したものにできます(x86_64-linux-gnuのみ)。 #5773 (alexey-milovidov)- 一部のライブラリから
-fPICを削除しました。 #8464 (alexey-milovidov) - curl 用の
CMakeLists.txtをクリーンアップ。詳細は https://github.com/ClickHouse/ClickHouse/pull/8011#issuecomment-569478910 および #8459 を参照 (alexey-milovidov) CapNProtoライブラリでのサイレント警告。 #8220 (alexey-milovidov)- 短い文字列用に最適化されたハッシュテーブルのパフォーマンステストを追加。 #7679 (Amos Bird)
- これにより、
MADV_FREEが利用できない場合でも、ClickHouse をAArch64上でビルドできるようになりました。これによって #8027 が解決されました。 #8243 (Amos Bird) zlib-ngを更新して MemorySanitizer 関連の問題を修正しました。 #7182 #8206 (Alexander Kuzmenkov)- 非 Linux システムでは内部 MySQL ライブラリを有効化します。OS パッケージの利用は非常に不安定で、通常はまったく動作しないためです。これにより #5765 が修正されます。#8426(alexey-milovidov)
libc++を有効にした後に、一部のシステムでビルドが通らない問題を修正しました。この変更は #8374 に取って代わるものです。 #8380 (alexey-milovidov)Fieldメソッドをより型安全にし、より多くのエラーを検出できるようにしました。 #7386 #8209 (Alexander Kuzmenkov)libc-headersサブモジュールに不足していたファイルを追加しました。 #8507 (alexey-milovidov)- パフォーマンステストの出力で誤っていた
JSONのクォートを修正。 #8497 (Nikolai Kochetov) std::exceptionとPoco::Exceptionに対してもスタックトレースが表示されるようになりました。以前のバージョンではDB::Exceptionの場合にのみ表示されていました。これにより診断性が向上します。 #8501 (alexey-milovidov)- 最新の glibc バージョン向けに
clock_gettimeとclock_nanosleepを移植しました。 #8054 (Amos Bird) - 開発者向けサンプル設定で
part_logを有効化。 #8609 (alexey-milovidov) 01036_no_superfluous_dict_reload_on_create_database*におけるリロードの非同期処理の挙動を修正。#8111(Azat Khuzhin)- コーデックのパフォーマンステストを修正。 #8615 (Vasily Nemkov)
.tgzビルド用のインストールスクリプトとそのドキュメントを追加。 #8612 #8591 (alesapin)- 古い
ZSTDテストを削除しました(2016 年に作成されたもので、ZSTD の 1.0 以前のバージョンに存在したバグを再現するためのものです)。これにより、#8618 が解決されました。 #8619(alexey-milovidov) - Mac OS Catalina におけるビルドを修正。 #8600 (meo)
- コーデックの性能テストで使用する行数を増やし、結果の差がより明確に表れるようにしました。 #8574 (Vasily Nemkov)
- デバッグビルドでは、
LOGICAL_ERROR例外をアサーション失敗として扱うようにし、気付きやすくします。 #8475 (Alexander Kuzmenkov) - フォーマット関連のパフォーマンステストの再現性を高めました。 #8477 (alexey-milovidov)
- MemorySanitizer の不具合を修正するために
lz4を更新。#8181 (Alexander Kuzmenkov) - 例外処理時に発生する既知の MemorySanitizer の誤検知を抑制。 #8182 (Alexander Kuzmenkov)
build/docker/build.sh内のgccとg++をバージョン 9 に更新 #7766 (TLightSky)PREWHEREの方がWHEREよりも遅いことを検証するパフォーマンステストケースを追加。 #7768 (Amos Bird)- 不安定なテスト 1 件の修正に向けた進捗。 #8621 (alexey-milovidov)
libunwind由来のデータに対する MemorySanitizer の報告を回避。 #8539 (alexey-milovidov)libc++を最新版に更新しました。 #8324 (alexey-milovidov)- ICU ライブラリをソースコードからビルドするようにしました。これにより #6460 が解決します。 #8219 (alexey-milovidov)
libresslからopensslに切り替えました。この変更により、ClickHouse は TLS 1.3 と SNI をサポートします。これにより #8171 が修正されました。#8218 (alexey-milovidov)- SSL で
chacha20_poly1305を使用した際に発生していた UBSan レポートの問題を修正(https://yandex.ru/ への接続時に発生)。 #8214 (alexey-milovidov) .debベースの Linux ディストリビューション向けにデフォルトパスワードファイルのパーミッションを修正。 #8075 (proller)clickhouse-testにおけるclickhouse-serverの PID 取得方法を改善しました。 #8063 (Alexander Kazakov)- contrib/googletest を v1.10.0 に更新しました。 #8587 (Alexander Burmak)
base64ライブラリでの ThreadSanitizer レポートを修正しました。また、このライブラリを最新バージョンに更新しましたが、これは特に重要ではありません。この変更により #8397 が修正されました。 #8403 (alexey-milovidov)- プロセッサ用の
00600_replace_running_queryを修正。 #8272 (Nikolai Kochetov) CMakeLists.txtを簡素化するためにtcmallocのサポートを削除しました。 #8310 (alexey-milovidov)- リリース向けの gcc ビルドでは、
libstdc++の代わりにlibc++を使用するようになりました。これまでlibc++は clang の場合にのみ使用されていました。これにより、ビルド構成の一貫性と移植性が向上します。 #8311 (alexey-milovidov) - MemorySanitizer を使用したビルドで ICU ライブラリを有効にしました。 #8222 (alexey-milovidov)
CapNProtoライブラリからの警告を抑制する。 #8224 (alexey-milovidov)tcmalloc向けの特別なコードパスを削除しました。もはやサポートされていないためです。 #8225 (alexey-milovidov)- CI のカバレッジタスクでは、カバレッジレポートを保存できるよう、サーバーを正常終了させるようにしました。これにより、最近発生していた不完全なカバレッジレポートの問題を修正しました。 #8142 (alesapin)
- すべてのコーデックについて、
Float64およびUInt64値に対するパフォーマンス テストを実施。#8349(Vasily Nemkov) termcapは現在では強く非推奨であり、さまざまな問題の原因となります(例: 「up」cap が欠けている、複数行の代わりに^Jがエコーされる など)。terminfoまたは同梱のncursesを使用してください。 #7737 (Amos Bird)test_storage_s3統合テストを修正。 #7734 (Nikolai Kochetov)- ディスクに実際に書き込むことなく、指定したフォーマットのファイルにブロックを挿入できるようにする
StorageFile(<format>, null)をサポートしました。これはパフォーマンス テストに必要です。 #8455 (Amos Bird) - 機能テストに引数
--print-timeを追加し、テストごとの実行時間を表示するようにしました。 #8001 (Nikolai Kochetov) - RPN を評価する際の
KeyConditionにアサートを追加しました。これにより gcc-9 の警告が解消されます。 #8279 (alexey-milovidov) - CI ビルドで CMake オプションを出力するようにした。 #8273 (Alexander Kuzmenkov)
- 一部のサイズが大きいライブラリについてはデバッグ情報を生成しないようにしました。 #8271 (alexey-milovidov)
log_to_console.xmlがインタラクティブかどうかに関係なく、常に stderr にログを出力するようにしました。 #8395 (Alexander Kuzmenkov)clickhouse-performance-testツールから未使用の機能をいくつか削除しました。 #8555 (alexey-milovidov)- 対応する
clang-Xバージョンを持つlld-Xも検索するようになりました。 #8092 (alesapin) - Parquet のビルド処理を改善。 #8421 (maxulan)
- GCC 警告をさらに追加 #8221 (kreuzerkrieg)
- Arch Linux 用パッケージで、クライアントだけでなく ClickHouse サーバーも実行できるようになりました。 #8534 (Vladimir Chebotarev)
- プロセッサを使用したテストを修正。ごく小さなパフォーマンスの改善。 #7672 (Nikolai Kochetov)
- contrib/protobuf を更新。 #8256 (Matwey V. Kornilov)
- 新年の祝いに C++20 への移行を準備中。「C++ のフォースが ClickHouse とともにありますように。」#8447 (Amos Bird)
実験的機能
- 実験的な設定
min_bytes_to_use_mmap_ioを追加しました。これにより、カーネルからユーザー空間へのデータコピーを行わずに大きなファイルを読み取ることができます。この設定はデフォルトでは無効になっています。mmap/munmapは低速であるため、推奨されるしきい値は約 64 MB です。 #8520 (alexey-milovidov) - アクセス制御システムの一部としてクォータを再設計しました。新しいテーブル
system.quotas、新しい関数currentQuota、currentQuotaKey、新しい SQL 構文CREATE QUOTA、ALTER QUOTA、DROP QUOTA、SHOW QUOTAを追加しました。 #7257 (Vitaly Baranov) - 例外をスローする代わりに、警告を出して不明な設定をスキップできるようにしました。 #7653 (Vitaly Baranov)
- アクセス制御システムの一部として行ポリシーを再設計しました。新しいテーブル
system.row_policies、新しい関数currentRowPolicies()、新しい SQL 構文CREATE POLICY、ALTER POLICY、DROP POLICY、SHOW CREATE POLICY、SHOW POLICIESを追加しました。 #7808 (Vitaly Baranov)
セキュリティ修正
Fileテーブルエンジンを使用するテーブルで、ディレクトリ構造を読み取れてしまう可能性があった問題を修正しました。これにより #8536 が解決されます。 #8537 (alexey-milovidov)