2019 年の変更履歴
ClickHouse リリース 19.17
ClickHouse リリース 19.17.6.36, 2019-12-27
不具合修正
decompressにおける潜在的なバッファオーバーフローを修正しました。悪意のあるユーザーが、バッファ外の読み取りを引き起こすよう細工された圧縮データを渡すことで発生し得る問題がありました。この問題は Yandex の情報セキュリティチームに所属する Eldar Zaitov によって発見されました。 #8404 (alexey-milovidov)- サーバーが、UTF-8 検証を必要とする String データ型の値を含むデータを JSON または XML 形式で送信または書き込みできない場合、あるいは結果データを Brotli アルゴリズムで圧縮する場合、その他のいくつかのまれなケースにおいて
std::terminateによりクラッシュする可能性があった問題を修正しました。 #8384 (alexey-milovidov) - ClickHouse の
VIEWをソースとする固定ディクショナリで、それらを読み取るとThere is no queryエラーが発生していた問題を修正しました。 #8351 (Nikolai Kochetov) - クライアントホストが users.xml で指定された host_regexp によって許可されているかどうかのチェックを修正しました。 #8241, #8342 (Vitaly Baranov)
- 分散テーブルに対する
RENAME TABLEは、シャードに送信する前に挿入済みデータを含むフォルダーの名前を変更するようになりました。これにより、tableA->tableB、tableC->tableAのような連続したリネーム操作時の問題が修正されます。 #8306 (tavplubix) - DDL クエリで作成される
range_hashed外部ディクショナリで、任意の数値型で範囲を指定できるようになりました。 #8275 (alesapin) INSERT INTO table SELECT ... FROM mysql(...)テーブル関数の問題を修正しました。 #8234 (tavplubix)- 存在しないファイルに対して
INSERT INTO TABLE FUNCTION file()を実行した際に発生していたセグメンテーションフォルトを修正しました。この場合は、まずファイルが作成され、その後に INSERT 文が処理されるようになりました。 #8177 (Olga Khvostikova) - 集約済みビットマップとスカラービットマップの積集合を取る際の
bitmapAndエラーを修正しました。 #8082 (Yue Huang) EXISTS tのように、TABLEやDICTIONARY修飾子なしでEXISTSクエリが使用された場合に発生していたセグメンテーションフォルトを修正しました。 #8213 (alexey-milovidov)Nullableな引数が指定された場合のrandおよびrandConstant関数の戻り値の型を修正しました。これらの関数は常にUInt32を返し、Nullable(UInt32)を返すことはなくなりました。 #8204 (Nikolai Kochetov)DROP DICTIONARY IF EXISTS db.dictを修正し、dbが存在しないときにも例外をスローしないようにしました。 #8185 (Vitaly Baranov)- サーバークラッシュが原因でテーブルが完全に削除されなかった場合、サーバーはそのテーブルを復元して読み込もうとします #8176 (tavplubix)
- 2 つを超えるシャードのローカルテーブルを持つ分散テーブルに対する単純な
countクエリを修正しました。 #8164 (小路) - DB::BlockStreamProfileInfo::calculateRowsBeforeLimit() におけるデータレースの原因となっていたバグを修正 #8143 (Alexander Kazakov)
ALTER table MOVE partが指定されたパーツのマージ直後に即時実行されていた問題を修正しました。この不具合により、指定したパーツをマージした結果生成されたパーツを移動してしまう可能性がありました。現在は指定されたパーツのみを正しく移動します。 #8104 (Vladimir Chebotarev)- 辞書の式を文字列として指定できるようになりました。これは、ClickHouse 以外のソースからデータを抽出する際に属性を計算する場合に便利です。これにより、それらの式を ClickHouse 以外の構文で記述できます。 #8098 (alesapin)
- ZXid のオーバーフローが原因で
clickhouse-copierでごくまれに発生していたレースコンディションを修正しました。 #8088 (Ding Xiang Fei) - クエリが失敗した後(例えばエラー "Too many simultaneous queries" による失敗)に外部テーブルの情報が読み取られず、次のリクエストがこの情報を次のクエリの開始として解釈し、
Unknown packet from clientのようなエラーを引き起こしていたバグを修正しました。 #8084 (Azat Khuzhin) - 「Unknown packet X from server」発生後のヌルデリファレンスを回避 #8071 (Azat Khuzhin)
- すべての ICU ロケールのサポートを復元し、定数式に対して照合順序を適用できるようにし、
system.collationsテーブルに言語名を追加しました。 #8051 (alesapin) StorageFileおよびStorageHDFSからの読み取りに使用されるストリーム数は、メモリ制限超過を防ぐために制限されるようになりました。 #7981 (alesapin)- キーを持たない
*MergeTreeテーブルに対するCHECK TABLEクエリを修正。 #7979 (alesapin) - ミューテーションが存在しない場合には、パート名からミューテーション番号を削除しました。これにより、古いバージョンとの互換性が向上しました。 #8250 (alesapin)
- 一部のアタッチ済みパーツで、
data_versionがテーブルのミューテーションバージョンより大きい場合にミューテーションがスキップされてしまうバグを修正しました。 #7812 (Zhichang Yu) - パーツを別のデバイスに移動しても、その冗長コピーを残したままサーバーを起動できるようにしました。 #7810 (Vladimir Chebotarev)
- 集約関数のカラムを使用した際に発生する可能性があったエラー「Sizes of columns does not match」を修正しました。#7790 (Boris Granveaud)
- 今後は、
LIMIT BYと併用してWITH TIESを使用した場合に、例外がスローされます。また、LIMIT BYとともにTOPを使用できるようになりました。 #7637 (Nikita Mikhaylov) invalidate_queryを持つディクショナリのリロード処理を修正し、以前の更新試行時に更新が停止したり例外が発生したりしていた問題を解消しました。 #8029 (alesapin)
ClickHouse リリース 19.17.4.11, 2019-11-22
後方互換性のない変更
- スカラーサブクエリの結果を保存する際に、パフォーマンス向上のため AST ではなくカラムを使用するように変更しました。設定項目
enable_scalar_subquery_optimizationは 19.17 で追加され、デフォルトで有効になっていました。このため、以前のバージョンから 19.17.2 または 19.17.3 へアップグレードする際に、このような エラーが発生していました。この設定は 19.17.4 ではデフォルトで無効となり、19.16 およびそれ以前のバージョンからエラーなくアップグレードできるようになりました。 #7392 (Amos Bird)
新機能
- DDL クエリでディクショナリを作成できる機能を追加しました。 #7360 (alesapin)
bloom_filter型のインデックスがLowCardinalityおよびNullableをサポートするようにしました。 #7363 #7561 (Nikolai Kochetov)- 渡された文字列が有効な JSON であるかを検査する関数
isValidJSONを追加しました。 #5910 #7293 (Vdimir) arrayCompact関数を実装しました。 #7328 (Memo)- Decimal 数値用の関数
hexを追加しました。これはhex(reinterpretAsString())と同様に動作しますが、末尾のゼロバイトを削除しません。 #7355 (Mikhail Korotov) - 配列内で、要素をその前後にある他の要素で置き換える
arrayFillおよびarrayReverseFill関数を追加しました。 #7380 (hcz) CRC32IEEE()/CRC64()のサポートを追加しました。 #7480 (Azat Khuzhin)- MySQL のものと同様の
char関数を実装しました。 #7486 (sundyli) bitmapTransform関数を追加しました。これはビットマップ内の値の配列を別の値の配列へ変換し、その結果として新しいビットマップを返します。 #7598 (Zhichang Yu)javaHashUTF16LE()関数を実装しました。 #7651 (achimbab)- Distributed エンジン向けの仮想カラム
_shard_numを追加しました。 #7624 (Azat Khuzhin)
実験的機能
MergeTreeにおける processors(新しいクエリ実行パイプライン)のサポートを追加しました。 #7181 (Nikolai Kochetov)
バグ修正
Valuesで発生していた浮動小数点数の誤解析を修正 #7817 #7870 (tavplubix)- trace_log 有効時にごくまれに発生するデッドロックを修正。 #7838 (filimonov)
- それを参照する任意のマテリアライズドビュー (MV) を持つ Kafka テーブルにプロデュースする際のメッセージの重複を防止 #7265 (Ivan)
IN句でのArray(LowCardinality(Nullable(String)))のサポート。#7364 #7366 を解決 (achimbab)- ODBC Bridge で
SQL_TINYINTおよびSQL_BIGINTの取り扱いを追加し、SQL_FLOATデータソース型の取り扱いを修正。#7491 (Denis Glazachev) - 空の decimal 列に対する集約(
avgおよび分位数)の処理を修正 #7431 (Andrey Konyaev) MATERIALIZEDカラムを持つ Distributed テーブルへのINSERTを修正 #7377 (Azat Khuzhin)- パーティションの一部がすでに宛先ディスクまたはボリューム上にある場合でも
MOVE PARTITIONが動作するようにしました #7434 (Vladimir Chebotarev) - マルチディスク構成で、
ReplicatedMergeTreeの mutation 実行中にハードリンクの作成に失敗するバグを修正しました。 #7558 (Vladimir Chebotarev) - MergeTree でのミューテーションにおいて、パーツ全体が変更されない場合に、最適な配置先が別ディスクとして選択されると発生していたバグを修正しました #7602 (Vladimir Chebotarev)
- ディスク設定から
keep_free_space_ratioが読み込まれないバグを修正 #7645 (Vladimir Chebotarev) Tuple列または複雑なパスを持つ列のみから成るテーブルで発生していたバグを修正しました。 7541 を修正。 #7545 (alesapin)- max_memory_usage 制限に Buffer エンジンのメモリを含めない #7552 (Azat Khuzhin)
ORDER BY tuple()が指定されたMergeTreeテーブルにおける final mark の扱いを修正しました。まれなケースで、SELECT 時にCan't adjust last granuleエラーが発生する可能性がありました。 #7639 (Anton Popov)- コンテキストを必要とするアクション(たとえば JSON 関数)を含む述語を持つミューテーションに存在していたバグを修正しました。このバグにより、クラッシュや異常な例外が発生する可能性がありました。 #7664 (alesapin)
data/ディレクトリとshadow/ディレクトリにおけるデータベース名およびテーブル名のエスケープ方法の不一致を修正 #7575 (Alexander Burmak)- RIGHT|FULL JOIN における重複キーをサポート(例:
ON t.x = u.x AND t.x = u.y)。このケースで発生していたクラッシュを修正。 #7586 (Artem Zuikov) - 式による RIGHT または FULL JOIN の際に発生する
Not found column <expression> in blockエラーを修正。 #7641 (Artem Zuikov) PrettySpaceフォーマットの無限ループを修正するための再試行 #7591 (Olga Khvostikova)- すべての引数が同じサイズの
FixedStringの場合に発生していたconcat関数のバグを修正しました。 #7635 (alesapin) - S3、URL、HDFS ストレージを 1 つの引数のみで定義した場合に発生していた例外を修正しました。 #7618 (Vladimir Chebotarev)
- ビューのクエリにおける InterpreterSelectQuery のスコープを修正 #7601 (Azat Khuzhin)
改良
Nullableカラムが認識され、NULL 値が ODBC-bridge によって正しく処理されるようにしました。#7402 (Vasily Nemkov)- 分散送信時に現在のバッチを書き込む処理をアトミックにしました。#7600 (Azat Khuzhin)
- クエリ内のカラム名からテーブルを特定できない場合は、例外をスローするようにしました。#7358 (Artem Zuikov)
MergeTreeSettingsにmerge_max_block_size設定を追加しました。#7412 (Artem Zuikov)HAVINGを含みGROUP BYを含まないクエリは、定数によるGROUP BYを仮定するようにしました。そのため、SELECT 1 HAVING 1は結果を返すようになりました。#7496 (Amos Bird)(X,)を Python と同様にタプルとしてパースできるようにしました。#7501, #7562 (Amos Bird)range関数の挙動を、ほぼ Python と同じものにしました。#7518 (sundyli)- テーブル
system.settingsにconstraintsカラムを追加しました。#7553 (Vitaly Baranov) - TCP ハンドラー向けの Null フォーマットを改善し、
select ignore(<expression>) from table format Nullを clickhouse-client 経由でのパフォーマンス計測に利用できるようにしました。#7606 (Amos Bird) CREATE TABLE ... AS (SELECT (1, 2))のようなクエリを正しくパースできるようにしました。#7542 (hcz)
パフォーマンスの改善
- 短い文字列キーに対する集約のパフォーマンスを改善しました。#6243 (Alexander Kuzmenkov, Amos Bird)
- 定数述語が折り畳まれた後に、潜在的な最適化を得るため構文/式解析をもう一度実行するようにしました。#7497 (Amos Bird)
SELECT count() FROM table;のような自明なクエリを評価する際に、ストレージのメタ情報を使用するようにしました。#7510 (Amos Bird, alexey-milovidov)- Aggregator の
addBatchと同様に、arrayReduceの処理をベクトル化しました。#7608 (Amos Bird) Kafkaのコンシューム処理のパフォーマンスをわずかに改善しました。#7475 (Ivan)
ビルド/テスト/パッケージングの改善
- CPU アーキテクチャ AARCH64 向けのクロスコンパイルサポートを追加。パッケージャースクリプトをリファクタリング。#7370 #7539 (Ivan)
- パッケージをビルドする際に、darwin-x86_64 と linux-aarch64 のツールチェーンをマウントされた Docker ボリュームに展開 #7534 (Ivan)
- バイナリパッケージャー用の Docker イメージを更新 #7474 (Ivan)
- macOS Catalina でのコンパイルエラーを修正 #7585 (Ernest Poletaev)
- クエリ解析ロジックを一部リファクタリング:複雑なクラスをいくつかの単純なクラスに分割。#7454 (Artem Zuikov)
- サブモジュールなしでのビルドを修正 #7295 (proller)
- CMake ファイル内の
add_globsを改善 #7418 (Amos Bird) unwindターゲット内のハードコードされたパスを削除 #7460 (Konstantin Podshumok)- SSL なしで mysql フォーマットを使用できるようにする #7524 (proller)
その他
- ClickHouse SQL 方言向けの ANTLR4 文法を追加 #7595 #7596 (alexey-milovidov)
ClickHouse リリース 19.16
ClickHouse リリース 19.16.14.65, 2020-03-25
- 複数引数(10 個超)に対する三項論理演算子のバッチ計算に存在したバグを修正しました。 #8718 (Alexander Kazakov) このバグ修正は、Altinity からの特別な要望によりバージョン 19.16 にバックポートされました。
ClickHouse リリース 19.16.14.65, 2020-03-05
- 古い ClickHouse バージョンとの分散サブクエリの非互換性を修正しました。#7851 を修正。 (tabplubix)
CREATEクエリの実行時に、ストレージエンジン引数内の定数式を折りたたむようにしました。空のデータベース名は現在のデータベース名に置き換えるようにしました。#6508、#3492 を修正。また、ClickHouseDictionarySourceにおけるローカルアドレスのチェックも修正しました。 #9262 (tabplubix)*MergeTreeテーブルエンジンファミリーにおけるバックグラウンドマージが、ストレージポリシーのボリュームの順序をより正確に保持するようになりました。 #8549 (Vladimir Chebotarev)- サフィックスを読み取った後、コミット前に例外が発生するというまれなケースで
Kafkaのデータが失われるのを防止しました。#9378 を修正。関連: #7175 #9507 (filimonov) - 誤ったパラメータで作成された
Kafkaテーブルを使用/削除しようとした際にサーバーが終了してしまうバグを修正しました。#9494 を修正。#9507 を取り込みました。 #9513 (filimonov) Kafkaテーブルの上位にあるサブクエリでMaterializedViewを使用できるようにしました。 #8197 (filimonov)
新機能
- マテリアライズドビューを持つテーブルへの冪等な挿入の動作を制御するための
deduplicate_blocks_in_dependent_materialized_viewsオプションを追加しました。この新機能は、Altinity からの特別な要望によりバグ修正リリースに追加されました。 #9070 (urykhy)
ClickHouse リリース 19.16.2.2, 2019-10-30
後方互換性のない変更
- count/countIf に対する不足していた引数個数(arity)の検証を追加しました。 #7095 #7298 (Vdimir)
- レガシー設定
asterisk_left_columns_onlyを削除しました(デフォルトで無効化されていました)。 #7335 (Artem Zuikov) - Template データフォーマット用のフォーマット文字列は、ファイル内で指定するようになりました。 #7118 (tavplubix)
新機能
- UINT_MAX を超えるカーディナリティを計算するための uniqCombined64() を導入。 #7213, #7222 (Azat Khuzhin)
- Array カラムに対する Bloom filter インデックスをサポート。 #6984 (achimbab)
- サーバー設定内の対応する
<macros>の値を String として返す関数getMacro(name)を追加。 #7240 (alexey-milovidov) - HTTP ソースに基づくディクショナリ用に、
credentialsとhttp-headersの 2 つの設定オプションを追加。 #7092 (Guillaume Tassery) - 起動されたバックグラウンドマージの回数をカウントする新しい ProfileEvent
Mergeを追加。 #7093 (Mikhail Korotov) - 完全修飾ドメイン名を返す fullHostName 関数を追加。 #7263 #7291 (sundyli)
- 「切り取り」条件で配列を分割する
arraySplitおよびarrayReverseSplit関数を追加。 時系列データの処理に有用。 #7294 (hcz) - multiMatch 系の関数において、一致したすべてのインデックスを含む Array を返す新しい関数を追加。 #7299 (Danila Kutenin)
- 多数の小さな -Log テーブルを保存するのに最適化された、新しいデータベースエンジン
Lazyを追加。 #7171 (Nikita Vasilev) - ビットマップカラム向けの集約関数 groupBitmapAnd、-Or、-Xor を追加。 #7109 (Zhichang Yu)
- 集約対象が存在しない場合に null またはデフォルト値を返す集約関数コンビネータ -OrNull および -OrDefault を追加。 #7331 (hcz)
- カスタムエスケープおよび区切りルールをサポートする CustomSeparated データ形式を導入。 #7118 (tavplubix)
- 外部ディクショナリのソースとして Redis をサポート。 #4361 #6962 (comunodi, Anton Popov)
バグ修正
WHERE IN (SELECT ...)セクションを含み、optimize_read_in_orderが使用されている場合に誤ったクエリ結果が返される問題を修正しました。 #7371 (Anton Popov)- プロジェクト外のファイルに依存している MariaDB 認証プラグインを無効にしました。 #7140 (Yuriy Baranov)
now(),today(),yesterday(),randConstant()関数が使用されているときに、まれに発生することがあった例外Cannot convert column ... because it is constant but values of constants are different in source and resultを修正しました。 #7156 (Nikolai Kochetov)- TCP keep-alive タイムアウトではなく HTTP keep-alive タイムアウトが使用されていた問題を修正しました。 #7351 (Vasily Nemkov)
- groupBitmapOr で発生するセグメンテーションフォルトを修正しました(issue #7109)。 #7289 (Zhichang Yu)
- マテリアライズドビューに対しては、すべてのデータが書き込まれた後に Kafka へのコミットが行われるようにしました。 #7175 (Ivan)
system.part_logテーブル内のduration_msの誤った値を修正しました。実際の値よりも 10 倍の誤差がありました。 #7172 (Vladimir Chebotarev)- LIVE VIEW テーブルでのクラッシュを解消し、すべての LIVE VIEW テストを再度有効にするための簡易的な修正を行いました。 #7201 (vzakaznikov)
- MergeTree パーツの min/max インデックスにおいて、NULL 値が正しくシリアライズされるようにしました。 #7234 (Alexander Kuzmenkov)
- テーブルが
CREATE TABLE ASで作成される場合に、仮想カラムを .sql メタデータに含めないようにしました。 #7183 (Ivan) ATTACH PARTクエリで発生するセグメンテーションフォルトを修正しました。 #7185 (alesapin)- 空の IN サブクエリおよび空の INNER/RIGHT JOIN の最適化によって、一部のクエリで誤った結果が返される問題を修正しました。 #7284 (Nikolai Kochetov)
- LIVE VIEW の getHeader() メソッドにおける AddressSanitizer エラーを修正しました。 #7271 (vzakaznikov)
改良
queue_wait_max_msの待機が発生した場合にメッセージを出力。 #7390 (Azat Khuzhin)- 設定
s3_min_upload_part_sizeをテーブルレベルの設定に変更。 #7059 (Vladimir Chebotarev) - StorageFactory で TTL をチェック。 #7304 (sundyli)
- 部分マージ結合において左側ブロックをまとめて圧縮(最適化)。 #7122 (Artem Zuikov)
- Replicated テーブルエンジンの mutation で非決定的な関数を許可しないように変更。これは レプリカ間の不整合を引き起こす可能性があるため。 #7247 (Alexander Kazakov)
- 例外スタックトレースを文字列に変換する際にメモリトラッカーを無効化。
これにより、サーバー側で
Memory limit exceeded種別のエラーメッセージが失われ、 クライアント側でAttempt to read after eof例外を引き起こしていた問題を防止できる。 #7264 (Nikolai Kochetov) - 各種フォーマットを改善し、次の issue を解決。 #6033, #2633, #6611, #6742 #7215 (tavplubix)
- ClickHouse は、
IN演算子の右辺にあって左辺の型に変換できない値を無視していた。 複合型(Array および Tuple)でも正しく動作するように修正。 #7283 (Alexander Kuzmenkov) - ASOF JOIN に対して不足していた不等比較演算をサポート。 ON 句の構文で、ASOF 列に対して「以下」バリアントおよび厳密な「より大きい」「より小さい」 バリアントで結合できるようになった。 #7282 (Artem Zuikov)
- 部分マージ結合を最適化。 #7070 (Artem Zuikov)
uniqCombined関数で 98 KB を超えるメモリを使用しないように変更。 #7236, #7270 (Azat Khuzhin)- メモリが不足している場合、PartialMergeJoin で右側の結合テーブルの一部を ディスクに書き出すように変更。必要に応じてデータを再読み込み。 #7186 (Artem Zuikov)
パフォーマンスの改善
- データの重複を避けることで、定数引数を持つ
joinGetを高速化。 #7359 (Amos Bird) - サブクエリが空の場合は早期に復帰するように変更。 #7007 (小路)
Values内の SQL 式のパースを最適化。 #6781 (tavplubix)
ビルド/テスト/パッケージングの改善
- Mac OS 向けのクロスコンパイルで一部の contrib を無効化。 #7101 (Ivan)
- clickhouse_common_io に対する PocoXML への不足していたリンクを追加。 #7200 (Azat Khuzhin)
- clickhouse-test で複数のテストフィルター引数を受け付けるようにする。 #7226 (Alexander Kuzmenkov)
- ARM 向けに musl と jemalloc を有効化。 #7300 (Amos Bird)
clickhouse-testに--client-optionパラメータを追加し、クライアントに追加のパラメータを指定できるようにしました。 #7277 (Nikolai Kochetov)- rpm パッケージのアップグレード時に既存の設定を保持するようになりました。 #7103 (filimonov)
- PVS が検出したエラーを修正。 #7153 (Artem Zuikov)
- Darwin 向けビルドを修正。 #7149 (Ivan)
- glibc 2.29 との互換性。#7142 (Amos Bird)
dh_cleanが候補となり得るソースファイルを処理しないようにする。 #7205 (Amos Bird)- altinity RPM からの更新時に競合が発生しないように対応しました。設定ファイルは clickhouse-server-common で別パッケージとして提供されています。 #7073 (filimonov)
- 一部のヘッダーファイルを最適化し、再ビルド時間を短縮しました。 #7212, #7231 (Alexander Kuzmenkov)
- Date と DateTime 型のパフォーマンステストを追加。#7332 (Vasily Nemkov)
- 非決定的な変更を含んでいた一部のテストを修正。 #7132 (Alexander Kazakov)
- MemorySanitizer を有効にしたビルドを CI に追加。 #7066 (Alexander Kuzmenkov)
- MetricsTransmitter で未初期化値が使用されないようにしました。 #7158 (Azat Khuzhin)
- MemorySanitizer によって検出された Fields のいくつかの問題を修正しました。 #7135, #7179 (Alexander Kuzmenkov), #7376 (Amos Bird)
- murmurhash32 の未定義の動作を修正。 #7388 (Amos Bird)
- StoragesInfoStream の未定義動作を修正 #7384 (tavplubix)
- 外部データベースエンジン(MySQL、ODBC、JDBC)に対する定数式のフォールディング処理を修正しました。以前のバージョンでは、複数の定数式に対しては機能せず、また Date、DateTime、UUID 型ではまったく機能していませんでした。これにより #7245 #7252 (alexey-milovidov)が修正されました。
- LIVE VIEW で no_users_thread 変数にアクセスする際に ThreadSanitizer が報告するデータレースを修正。 #7353 (vzakaznikov)
- libcommon の malloc シンボルを削除 #7134, #7065 (Amos Bird)
- すべてのライブラリを無効化するためのグローバルフラグ ENABLE_LIBRARIES を追加しました。 #7063 (proller)
コードのクリーンアップ
- 辞書の DDL に備えて設定リポジトリを汎用化。 #7155 (alesapin)
- 意味解析を行わない辞書用 DDL パーサーを追加。 #7209 (alesapin)
ParserCreateQueryを複数の小さいパーサーに分割。 #7253 (alesapin)- 外部辞書まわりの小さなリファクタリングとリネーム。 #7111 (alesapin)
- ロールベースアクセス制御に備えて一部コードをリファクタリング。 #7235 (Vitaly Baranov)
DatabaseOrdinaryのコードにいくつかの改善を実施。 #7086 (Nikita Vasilev)- ハッシュテーブルの
find()およびemplace()メソッドでイテレータを使用しないように変更。 #7026 (Alexander Kuzmenkov) - パラメータ root が空でない場合の
getMultipleValuesFromConfigの不具合を修正。 #7374 (Mikhail Korotov) - 一部のコピーペーストコード(
TemporaryFileとTemporaryFileStream)を削除。 #7166 (Artem Zuikov) - コードの可読性をわずかに改善(
MergeTreeData::getActiveContainingPart)。 #7361 (Vladimir Chebotarev) ThreadPool::schedule(...)が例外をスローする場合、ローカルオブジェクトを使用しているすべてのスケジュール済みジョブを待機するように変更。ThreadPool::schedule(...)の名前をThreadPool::scheduleOrThrowOnError(...)に変更し、 例外をスローする可能性があることが明確になるようコメントを修正。 #7350 (tavplubix)
ClickHouse リリース 19.15
ClickHouse リリース 19.15.4.10, 2019-10-31
バグ修正
- ODBC Bridge において、SQL_TINYINT と SQL_BIGINT の処理を追加し、SQL_FLOAT データソース型の処理を修正。 #7491 (Denis Glazachev)
- MOVE PARTITION で、宛先ディスクまたはボリューム上に一部のパーツが既に存在していても許可するようにした。 #7434 (Vladimir Chebotarev)
- ODBC Bridge 経由の Nullable カラムにおける NULL 値の扱いを修正。 #7402 (Vasily Nemkov)
- MATERIALIZED カラムを持つ Distributed の非ローカルノードへの INSERT を修正。 #7377 (Azat Khuzhin)
- 関数 getMultipleValuesFromConfig を修正。 #7374 (Mikhail Korotov)
- TCP keep alive タイムアウトの代わりに HTTP keep alive タイムアウトを使用していた問題を修正。 #7351 (Vasily Nemkov)
- 例外発生時にすべてのジョブが完了するのを待機するようにした(まれなセグメンテーションフォルトを修正)。 #7350 (tavplubix)
- Kafka テーブルへの挿入時に、マテリアライズドビューへプッシュしないようにした。 #7265 (Ivan)
- 例外スタックに対してはメモリトラッカーを無効化。 #7264 (Nikolai Kochetov)
- 外部データベース向けにクエリを変換するコードの不具合を修正。 #7252 (alexey-milovidov)
- MetricsTransmitter で未初期化の値を使用しないようにした。 #7158 (Azat Khuzhin)
- テスト用のマクロ付きサンプル設定を追加。 (alexey-milovidov)
ClickHouse リリース 19.15.3.6, 2019-10-09
バグ修正
- ハッシュ辞書における bad_variant を修正。 (alesapin)
- ATTACH PART クエリでセグメンテーションフォルトが発生するバグを修正。 (alesapin)
MergeTreeDataにおける時間計算を修正。 (Vladimir Chebotarev)- 書き込みが完了した後に、Kafka へのコミットを明示的に実行するようにした。 #7175 (Ivan)
- MergeTree パーツの min/max インデックスで NULL 値を正しくシリアライズするようにした。 #7234 (Alexander Kuzmenkov)
ClickHouse リリース 19.15.2.2, 2019-10-01
新機能
- 階層ストレージ: MergeTree エンジンを使用するテーブルに対して複数のストレージボリュームを利用するためのサポート。新しいデータを SSD に保存し、古いデータを自動的に HDD に移動できます。(例) #4918 (Igr) #6489 (alesapin)
INSERT SELECTクエリで入力データを読み取るためのテーブル関数inputを追加。 #5450 (palasonic1) #6832 (Anton Popov)hashedレイアウトと機能的には同等だが、よりメモリ効率の高いsparse_hashed辞書レイアウトを追加。値の取得が遅くなる代わりに、メモリ使用量は約半分になります。 #6894 (Azat Khuzhin)- 辞書へアクセス可能なユーザーのリストを定義できるように実装。現在は接続中のデータベースでのみ使用されます。 #6907 (Guillaume Tassery)
SHOWクエリにLIMITオプションを追加。 #6944 (Philipp Malkovsky)- 集合内で
range_start以上である要素のうち最小のlimit個の値の部分集合を返すbitmapSubsetLimit(bitmap, range_start, limit)関数を追加。 #6957 (Zhichang Yu) bitmapMinおよびbitmapMax関数を追加。 #6970 (Zhichang Yu)- issue-6648 に関連する関数
repeatを追加。 #6999 (flynn)
実験的機能
- 現在のパイプラインを変更しない(メモリ内の)Merge Join のバリアントを実装。結果はマージキーで部分的にソートされます。この機能を使用するには
partial_merge_join = 1を設定します。Merge Join はまだ開発中です。 #6940 (Artem Zuikov) S3エンジンとテーブル関数を追加。まだ開発中であり(認証は未サポート)です。 #5596 (Vladimir Chebotarev)
改善
- Kafka から読み取られた各メッセージはアトミックに挿入されます。これにより、Kafka エンジンに関する既知のほとんどの問題が解決されます。 #6950 (Ivan)
- 分散クエリのフェイルオーバーを改善。復旧時間が短縮され、さらに設定可能になり、
system.clustersで確認できるようになりました。 #6399 (Vasily Nemkov) IN句で Enum に対する数値を直接サポート。#6766 #6941 (dimarub2000)- URL ストレージでのリダイレクトをサポート(オプションで、デフォルトでは無効)。 #6914 (maqroll)
- 古いバージョンのクライアントがサーバーに接続した際に情報メッセージを追加。 #6893 (Philipp Malkovsky)
- Distributed テーブルでデータを送信する際の最大バックオフスリープ時間の制限を削除。 #6895 (Azat Khuzhin)
- プロファイルイベント(カウンタ)を累積値として graphite に送信できるようにしました。サーバーの
config.xml内の<events_cumulative>で有効化できます。 #6969 (Azat Khuzhin) - HTTP 経由の Native 形式で
LowCardinality(T)型のカラムにデータを挿入する際に、型Tを自動的にLowCardinality(T)にキャストする機能を追加。 #6891 (Nikolai Kochetov) Float32、Float64に対してreinterpretAsStringを使用せずに関数hexを使用できるようにしました。 #7024 (Mikhail Korotov)
ビルド/テスト/パッケージングの改善
- デバッグ情報付きの clickhouse バイナリに gdb-index を追加。これにより
gdbの起動時間が短縮されます。 #6947 (alesapin) pigzを使用するようにパッチ適用した dpkg-deb により deb パッケージングを高速化。 #6960 (alesapin)enable_fuzzing = 1を設定して、プロジェクト全コードに対する libfuzzer のインストルメンテーションを有効化。 #7042 (kyprizel)- CI に split build のスモークテストを追加。 #7061 (alesapin)
- CI に MemorySanitizer を用いたビルドを追加。 #7066 (Alexander Kuzmenkov)
libsparsehashをsparsehash-c11に置き換え。 #6965 (Azat Khuzhin)
バグ修正
- 大きなテーブル上の複雑なキーに対するインデックス解析のパフォーマンス低下を修正しました。#6924 を修正します。 #7075 (alexey-milovidov)
- Kafka の空のトピックからの SELECT 時にセグメンテーションフォルトを引き起こしていた論理エラーを修正しました。 #6909 (Ivan)
MySQLBlockInputStream.cppにおいて MySQL 接続が早期にクローズされてしまう問題を修正しました。 #6882 (Clément Rodriguez)- 非常に古い Linux カーネルのサポートを再度有効にしました(#6841 の修正)。 #6853 (alexey-milovidov)
- 入力ストリームに空のブロックが存在する場合に
insert selectクエリで発生し得るデータ損失の問題を修正しました。#6834 #6862 #6911 (Nikolai Kochetov) - パラメータに空配列を含む場合の関数
АrrayEnumerateUniqRankedの不具合を修正しました。 #6928 (proller) - ARRAY JOIN およびグローバルサブクエリを含む複雑なクエリに関する不具合を修正しました。 #6934 (Ivan)
- 複数の JOIN を含む ORDER BY および GROUP BY で発生していた
Unknown identifierエラーを修正しました。 #7022 (Artem Zuikov) LowCardinality引数を取る関数の実行時に発生していたMSan警告を修正しました。 #7062 (Nikolai Kochetov)
後方互換性のない変更
- パフォーマンス向上のため、bitmap* 集約関数の状態のシリアライズ形式を変更しました。以前のバージョンでシリアライズされた bitmap* の状態は読み取ることができません。 #6908 (Zhichang Yu)
ClickHouse リリース 19.14
ClickHouse リリース 19.14.7.15, 2019-10-02
バグ修正
- このリリースには、19.11.12.69 のすべてのバグ修正も含まれています。
- 19.14 とそれ以前のバージョン間の分散クエリの互換性を修正しました。これにより #7068 が解決されています。 #7069 (alexey-milovidov)
ClickHouse リリース 19.14.6.12, 2019-09-19
バグ修正
- パラメータに空配列が渡された場合の関数
АrrayEnumerateUniqRankedの動作を修正しました。 #6928 (proller) ARRAY JOINおよびエイリアス付きのGLOBAL IN subqueryを含むクエリにおけるサブクエリ名を修正しました。サブクエリのエイリアスが指定されている場合は、そのエイリアスを外部テーブル名として使用します。 #6934 (Ivan)
ビルド/テスト/パッケージングの改善
- ミューテーションの適用を待つ必要があるため、シェルスクリプトに書き換えることで、flapping テスト
00715_fetch_merged_or_mutated_part_zookeeperを修正しました。 #6977 (Alexander Kazakov) - 空の配列引数を取る関数
groupUniqArrayにおける UBSan および MemSan のエラーを修正しました。これは、ゼロセル値のコンストラクタが呼び出されていなかったため、空のPaddedPODArrayをハッシュテーブルのゼロセルに配置していたことが原因です。 #6937 (Amos Bird)
ClickHouse リリース 19.14.3.3, 2019-09-10
新機能
ORDER BY向けのWITH FILL修飾子。(#5069 の続き) #6610 (Anton Popov)LIMIT用のWITH TIES修飾子。(#5069 の続き) #6610 (Anton Popov)- クオートされていない
NULLリテラルを NULL としてパースします(設定format_csv_unquoted_null_literal_as_null=1の場合)。このフィールドのデータ型が Nullable 型でない場合は、NULL フィールドをデフォルト値で初期化します(設定input_format_null_as_default=1の場合)。 #5990 #6055 (tavplubix) - テーブル関数
fileおよびhdfsのパスでワイルドカードがサポートされるようになりました。パスにワイルドカードが含まれている場合、テーブルは読み取り専用として扱われます。使用例:select * from hdfs('hdfs://hdfs1:9000/some_dir/another_dir/*/file{0..9}{0..9}')およびselect * from file('some_dir/{some_file,another_file,yet_another}.tsv', 'TSV', 'value UInt32')。 #6092(Olga Khvostikova) - 新しい
system.metric_logテーブル。指定した時間間隔でsystem.eventsとsystem.metricsの値を保存します。 #6363 #6467 (Nikita Mikhaylov) #6530 (alexey-milovidov) - ClickHouse のテキストログを
system.text_logテーブルに書き込めるようになりました。 #6037 #6103 (Nikita Mikhaylov) #6164 (alexey-milovidov) - スタックトレースにプライベートシンボルを表示できるようにしました(ELF ファイルのシンボルテーブルをパースすることで実現)。デバッグ情報が存在する場合、スタックトレースにファイル名および行番号を追加しました。プログラム内に存在するシンボルをインデックス化することで、シンボル名のルックアップを高速化しました。イントロスペクション用の新しい SQL 関数
demangleおよびaddressToLineを追加しました。一貫性のため、関数symbolizeAddressをaddressToSymbolにリネームしました。関数addressToSymbolはパフォーマンス上の理由からマングル済みの名前を返すため、demangleを適用する必要があります。デフォルトでは無効になっている設定allow_introspection_functionsを追加しました。 #6201 (alexey-milovidov) - テーブル関数
values(名前の大文字・小文字は区別されません)。この関数を使用すると、#5984 で提案されたVALUESリストから読み取ることができます。例:SELECT * FROM VALUES('a UInt64, s String', (1, 'one'), (2, 'two'), (3, 'three'))。#6217。#6209(dimarub2000) - ストレージ設定を変更できるようになりました。構文:
ALTER TABLE <table> MODIFY SETTING <setting> = <value>. #6366 #6669 #6685 (alesapin) - デタッチされたパーツを削除する機能をサポートしました。構文:
ALTER TABLE <table_name> DROP DETACHED PART '<part_id>'。#6158 (tavplubix) - テーブル制約。テーブル定義に制約を追加でき、挿入時に検査されます。 #5273 (Gleb Novikov) #6652 (alexey-milovidov)
- カスケードマテリアライズドビューのサポート。 #6324 (Amos Bird)
- デフォルトでクエリプロファイラを有効にし、すべてのクエリ実行スレッドを1秒ごとにサンプリングするようにしました。 #6283 (alexey-milovidov)
- 入力フォーマット
ORCを追加。 #6454 #6703 (akonyaev90) - 2 つの新しい関数
sigmoidとtanhを追加しました(機械学習用途で有用です)。 #6254 (alexey-milovidov) - 関数
hasToken(haystack, token)、hasTokenCaseInsensitive(haystack, token)は、指定した token が haystack に含まれているかどうかを判定します。token は、2 つの英数字以外の ASCII 文字(または haystack の境界)に挟まれた、最大長の部分文字列です。token は定数文字列である必要があります。tokenbf_v1インデックスの特殊化でサポートされています。 #6596, #6662 (Vasily Nemkov) - 新しい関数
neighbor(value, offset[, default_value])。データブロック内の列において、直前/直後の値にアクセスできるようにします。 #5925 (Alex Krash) 6685365ab8c5b74f9650492c88a012596eb1b0c6 341e2e4587a18065c2da1ca888c73389f48ce36c Alexey Milovidov - 認証済みユーザーのログイン名を返す関数
currentUser()を追加しました。MySQL との互換性のためにエイリアスuser()を追加しました。 #6470 (Alex Krash) - #5885 で提案された新しい集約関数
quantilesExactInclusiveとquantilesExactExclusive。#6477 (dimarub2000) bitmapRange(bitmap, range_begin, range_end)関数は、指定した範囲(range_endは含まない)の要素からなる新しい集合を返します。 #6314 (Zhichang Yu)- 関数
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision)は、指定された領域をカバーする geohash ボックスを表す、precision 文字の文字列からなる配列を作成します。 #6127 (Vasily Nemkov) Kafkaテーブルに対する INSERT クエリのサポートを実装しました。 #6012 (Ivan)- Kafka エンジンに
_partitionおよび_timestamp仮想カラムのサポートを追加しました。 #6400 (Ivan) query_log、サーバーログ、プロセスリストから、正規表現ベースのルールを使って機密データを削除できるようにしました。#5710 (filimonov)
実験的機能
- 入出力データ形式
Template。入力および出力に対してカスタムフォーマット文字列を指定できます。#4354 #6727 (tavplubix) LIVE VIEWテーブルの実装。これはもともと #2898 で提案され、#3925 で準備され、その後 #5541 で更新されました。詳細な説明については #5541 を参照してください。#5541 (vzakaznikov) #6425 (Nikolai Kochetov) #6656 (vzakaznikov) なお、LIVE VIEW機能は今後のバージョンで削除される可能性があります。
バグ修正
- このリリースには、19.13 および 19.11 のすべてのバグ修正も含まれています。
- テーブルにスキップインデックスがあり、垂直マージが行われた際にセグメンテーションフォルトが発生する問題を修正。 #6723 (alesapin)
- 複雑なカラムデフォルトを持つカラムごとの TTL を修正しました。以前は、
OPTIMIZE ... FINALクエリによって TTL マージを強制した場合、期限切れの値がユーザー指定のカラムデフォルトではなく、型のデフォルト値で置き換えられていました。 #6796 (Anton Popov) - 通常のサーバー再起動時に発生する Kafka メッセージの重複問題を修正。 #6597 (Ivan)
- Kafka メッセージの読み取り時に発生していた無限ループを修正しました。サブスクリプション時にはコンシューマの一時停止/再開を一切行わないようにしました。そうしないと、特定の状況ではコンシューマが無期限に一時停止されたままになる可能性があるためです。 #6354 (Ivan)
bitmapContains関数で発生するKey expression contains comparison between inconvertible typesという例外の問題を修正しました。 #6136 #6146 #6156 (dimarub2000)optimize_skip_unused_shards有効時にシャーディングキー未指定の場合に発生していたセグメンテーションフォルトを修正。 #6384 (Anton Popov)- メモリ破損を引き起こす可能性のあった mutation で使用されていた誤ったコードを修正しました。
system.partsまたはsystem.parts_columnsからのSELECTとDROP TABLEの同時実行によって発生しうる、アドレス0x14c0の読み取り時のセグメンテーションフォルトを修正しました。mutation クエリの準備処理で発生していた競合状態を修正しました。Replicated テーブルのOPTIMIZEと ALTER などの同時変更操作によって発生していたデッドロックを修正しました。 #6514 (alexey-milovidov) - MySQL インターフェイスでの不要に冗長なログ出力を削除しました #6389 (alexey-milovidov)
- 設定ファイル内で、'true' および 'false' からブール値設定を解析できる機能を復元しました。 #6278 (alesapin)
Nullable(Decimal128)で発生するquantileおよびmedian関数のクラッシュを修正。 #6378 (Artem Zuikov)- 主キーに対する
WHERE句で Float 型への変換を含むSELECTクエリが、不完全な結果を返す可能性があった問題を修正しました。原因は、toFloat関数における単調性の判定が誤っていたためです。 #6248 #6374 (dimarub2000) - ミューテーション用の
max_expanded_ast_elements設定を確認します。TRUNCATE TABLE実行後にミューテーションをクリアします。 #6205 (Winter Zhang) join_use_nullsを使用した場合のキー列に対する JOIN の結果を修正しました。列のデフォルト値ではなく NULL を設定するようにしました。 #6249 (Artem Zuikov)- vertical merge および ALTER におけるスキップインデックスの問題を修正。
Bad size of marks file例外を修正。 #6594 #6713 (alesapin) - マージ対象/変更対象のパーツのどちらかが空(0 行)の場合に発生する
ALTER MODIFY COLUMNおよび垂直マージのまれなクラッシュを修正 #6746 #6780 (alesapin) AggregateFunctionFactoryにおけるLowCardinality型の変換バグを修正しました。これにより #6257 が解決されました。 #6281 (Nikolai Kochetov)topKおよびtopKWeighted集約関数における誤った動作と、セグメンテーションフォルトを引き起こしうる問題を修正しました。 #6404 (Anton Popov)getIdentifier関数周辺の安全でないコードを修正。 #6401 #6409 (alexey-milovidov)- MySQL クライアントから ClickHouse に接続する際に使用される MySQL ワイヤプロトコルのバグを修正しました。原因は
PacketPayloadWriteBufferにおけるヒープバッファオーバーフローでした。 #6212 (Yuriy Baranov) bitmapSubsetInRange関数のメモリリークを修正しました。 #6819 (Zhichang Yu)- 粒度変更後に実行されたミューテーションでまれに発生するバグを修正。 #6816 (alesapin)
- デフォルトで全フィールドを含む protobuf メッセージを許可。 #6132 (Vitaly Baranov)
nullIf関数において、第 2 引数としてNULLを渡した場合に発生するバグを修正。 #6446 (Guillaume Tassery)- 文字列フィールドを含む複合キーキャッシュディクショナリにおいて、誤ったメモリの割り当て/解放処理によりメモリを無制限に消費してしまう(メモリリークのように見える)まれなバグを修正。バグは、文字列長が 8 から始まる 2 の累乗(8, 16, 32 など)の場合に再現する。#6447 (alesapin)
- 短いシーケンスに対する Gorilla エンコーディングの不具合を修正し、
Cannot write after end of bufferという例外が発生していた問題を解消しました。 #6398 #6444 (Vasily Nemkov) join_use_nullsが有効な場合でも、JOIN で NULL 非許容型を使用できるようにしました。 #6705 (Artem Zuikov)clickhouse-clientのクエリ内でのPoco::AbstractConfigurationによる置換を無効化。 #6706 (alexey-milovidov)REPLACE PARTITIONでのデッドロックの発生を回避。 #6677 (alexey-milovidov)arrayReduceを定数引数に対して使用すると、セグメンテーションフォルトが発生する可能性があります。 #6242 #6326 (alexey-milovidov)DROP PARTITIONの後にレプリカを復元した場合に一貫性のないパーツが現れることがある問題を修正。 #6522 #6523 (tavplubix)JSONExtractRaw関数がハングする問題を修正しました。 #6195 #6198 (alexey-milovidov)- adaptive granularity 使用時における skip indices の誤ったシリアライゼーションおよび集約に関するバグを修正。 #6594. #6748 (alesapin)
- 二段階の集約を行う
GROUP BYにおけるWITH ROLLUPおよびWITH CUBE修飾子を修正しました。 #6225 (Anton Popov) - アダプティブグラニュラリティ使用時のセカンダリインデックスのマークの書き込みに関するバグを修正。 #6126 (alesapin)
- サーバー起動時の初期化順序を修正しました。
StorageMergeTree::background_task_handleはstartup()内で初期化されるため、初期化が完了する前にMergeTreeBlockOutputStream::write()がそれを使用しようとする可能性があります。そのため、初期化済みかどうかを確認するようにしました。 #6080 (Ivan) - エラーで終了した前回の読み取り処理で使用したデータバッファをクリアするようにしました。 #6026 (Nikolay)
- Replicated*MergeTree テーブルの新しいレプリカを作成する際に
adaptive granularityを有効にする処理に関する不具合を修正。 #6394 #6452 (alesapin) - サーバー起動時に、初期化されていない
ThreadStatus構造体へのアクセス中に発生した例外を処理する際、libunwind内でさらに例外が発生するとクラッシュする可能性があった問題を修正しました。 #6456 (Nikita Mikhaylov) yandexConsistentHash関数で発生していたクラッシュを修正。fuzz テストで検出されました。 #6304 #6305 (alexey-milovidov)- サーバーが過負荷になり、グローバルスレッドプールがほぼ上限に達した状態のときにクエリがハングする可能性があった問題を修正しました。分散クエリは各シャードへの接続ごとに 1 スレッドを割り当てるため、この問題はシャード数が多い(数百シャード規模の)クラスタで発生しやすくなります。たとえば、330 シャードのクラスタで 30 個の分散クエリを同時に処理している場合に、この問題が発生する可能性があります。この問題は 19.2 以降のすべてのバージョンに影響します。 #6301 (alexey-milovidov)
arrayEnumerateUniqRanked関数のロジックを修正しました。 #6423 (alexey-milovidov)- シンボルテーブルのデコード時に発生するセグメンテーションフォルトを修正。 #6603 (Amos Bird)
LowCardinality(Nullable)を Null を含まない Nullable ではない列にキャストする際に発生していた不要な例外を修正しました(例:SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)のようなクエリ)。 #6094 #6119 (Nikolai Kochetov)system.settingsテーブル内の description 列に対して行われていた余分な引用符付けを削除しました。 #6696 #6699 (alexey-milovidov)- Replicated テーブルの
TRUNCATEで発生しうるデッドロックを回避。 #6695 (alexey-milovidov) - ソートキー順での読み出し処理を修正。 #6189 (Anton Popov)
enable_mixed_granularity_parts=1のテーブルに対するALTER TABLE ... UPDATEクエリを修正。 #6543 (alesapin)- #4405(19.4.0 以降)で報告されたバグを修正。MergeTree テーブル上の Distributed テーブルに対するクエリで、どのカラムも参照しないクエリ(
SELECT 1)を実行した場合に発生する。#6236(alesapin) - 符号付き型から符号なし型への整数除算におけるオーバーフローを修正しました。動作は C や C++ 言語(整数型の昇格規則)とまったく同じであり、意外に感じられるかもしれません。なお、大きな符号付き整数を大きな符号なし整数で割る場合、あるいはその逆の場合には依然としてオーバーフローが発生し得ます(ただし、そのケースはあまり一般的ではありません)。この問題はすべてのサーバーバージョンに存在していました。 #6214 #6233 (alexey-milovidov)
max_execution_speedまたはmax_execution_speed_bytesが設定されている場合のスロットリング動作時におけるスリープ時間の上限を制限しました。Estimated query execution time (inf seconds) is too longのような誤検知のエラーを修正しました。 #5547 #6232 (alexey-milovidov)MaterializedViewにおけるMATERIALIZEDカラムおよびエイリアスの使用に関する問題を修正。#448 #3484 #3450 #2878 #2285 #3796 (Amos Bird) #6316 (alexey-milovidov)- プロセッサとして実装されていない入力ストリームに対する
FormatFactoryの挙動を修正。 #6495 (Nikolai Kochetov) - 誤字を修正しました。 #6631 (Alex Ryndin)
- エラーメッセージ内の誤植 (is → are)。 #6839 (Denis Zhuravlev)
- 型にカンマが含まれている場合、文字列からカラムリストを解析する際に発生していたエラーを修正しました(この問題は
File、URL、HDFSストレージで発生していました)#6217。 #6209 (dimarub2000)
セキュリティ修正
- このリリースには、19.13 および 19.11 のすべてのセキュリティ関連バグ修正も含まれています。
- SQL パーサーにおいて、細工されたクエリによりスタックオーバーフローが発生してサーバーがクラッシュする可能性を修正しました。Merge テーブルおよび Distributed テーブル、マテリアライズドビュー、サブクエリを含む行レベルセキュリティ条件におけるスタックオーバーフローの可能性も修正しました。 #6433 (alexey-milovidov)
改善
AND/ORのための三値論理に基づく正しい実装。 #6048 (Alexander Kazakov)- これで、TTL 期限切れの値や行は、TTL 情報を持たない古いパーツや古い TTL 情報を持つパーツから、
ALTER ... MODIFY TTLクエリ実行後などにOPTIMIZE ... FINALクエリを実行することで削除されるようになりました。TTL を伴うマージの割り当ておよび、すべてのマージにおける期限切れ値のフィルタリングを禁止/許可するためのSYSTEM STOP/START TTL MERGESクエリが追加されました。 #6274 (Anton Popov) - クライアントが使用する ClickHouse の履歴ファイルの保存先を
CLICKHOUSE_HISTORY_FILE環境変数で変更可能に。 #6840 (filimonov) InterpreterSelectQueryからdry_runフラグを削除しました。... #6375 (Nikolai Kochetov)ON句を伴うASOF JOINをサポートしました。 #6211 (Artem Zuikov)- ミューテーションおよびレプリケーションに対するスキップインデックスのサポートを改善しました。
MATERIALIZE/CLEAR INDEX ... IN PARTITIONクエリをサポートしました。UPDATE x = xは、カラムxを使用するすべてのインデックスを再計算します。 #5053 (Nikita Vasilev) allow_experimental_live_view設定に関係なく、ライブビューを(たとえばサーバー起動時に)ATTACHできるようにしました。 #6754 (alexey-milovidov)- クエリプロファイラで収集されたスタックトレースから、クエリプロファイラ自身が生成したスタックフレームを除外するようにしました。 #6250 (alexey-milovidov)
- テーブル関数
values、file、url、hdfsが ALIAS 列をサポートするようになりました。 #6255 (alexey-milovidov) config.dファイルに、設定ファイルと同じルート要素が含まれていない場合は、例外をスローします。 #6123 (dimarub2000)no space left on device発生時の例外メッセージに追加情報を含めるようにしました。 #6182, #6252 #6352 (tavplubix)- 読み取りクエリで対象とする
Distributedテーブルのシャードを決定する際(optimize_skip_unused_shards= 1 の場合)、ClickHouse は SELECT 文のprewhere句とwhere句の両方の条件を確認するようになりました。 #6521 (Alexander Kazakov) - AVX2 は搭載していないが SSE 4.2 と PCLMUL 命令セットは備えているマシン向けに
SIMDJSONを有効化しました。 #6285 #6320 (alexey-milovidov) - ClickHouse は、追加のチューニングなしで、
O_DIRECTをサポートしないファイルシステム(ZFS や BtrFS など)上でも動作できます。 #4449 #6730 (alexey-milovidov) - final サブクエリへの述語プッシュダウンをサポート。 #6120 (TCeason) #6162 (alexey-milovidov)
JOIN ONキー抽出の改善 #6131 (Artem Zuikov)SIMDJSONを更新しました。 #6285。 #6306 (alexey-milovidov)SELECT count()クエリ向けに、最小サイズのカラムを選択する処理を最適化。 #6344 (Amos Bird)windowFunnel()にstrictパラメータを追加しました。strictが有効な場合、windowFunnel()は一意の値に対してのみ条件を適用します。 #6548 (achimbab)mysqlxx::Poolのより安全なインターフェース。 #6150 (avasiliev)--helpオプションで実行した際のオプション一覧の行幅が、ターミナルのサイズに応じて自動的に調整されるようになりました。 #6590 (dimarub2000)- キーなしの集約に対する「read in order」最適化を無効化。 #6599 (Anton Popov)
INCORRECT_DATAおよびTYPE_MISMATCHエラーコードに対する HTTP ステータスコードは、デフォルトの500 Internal Server Errorから400 Bad Requestに変更されました。 #6271 (Alexander Rodin)JoinオブジェクトをExpressionActionからAnalyzedJoinに移動しました。ExpressionAnalyzerとExpressionActionはもはやJoinクラスを意識しません。そのロジックはAnalyzedJoinインターフェースの背後に隠蔽されています。 #6801 (Artem Zuikov)- 1 つのシャードが localhost であるにもかかわらず、クエリがネットワーク接続経由で送信される場合に発生しうる分散クエリのデッドロックの可能性を修正。 #6759 (alexey-milovidov)
- 複数テーブルに対する
RENAMEのセマンティクスを変更し、デッドロックが発生し得る状況を避けるようにしました。 #6757。 #6756 (alexey-milovidov) - MySQL 互換サーバーの実装を見直し、パケットのペイロード全体をメモリに読み込まないようにしました。各接続でのメモリ消費量をおよそ
2 * DBMS_DEFAULT_BUFFER_SIZE(読み取り/書き込みバッファ)にまで削減しました。 #5811 (Yuriy Baranov) - クエリのセマンティクスを知る必要のないパーサーの外に、AST エイリアス解釈ロジックを移動。 #6108 (Artem Zuikov)
NamesAndTypesListのパースをより安全にしました。 #6408. #6410 (alexey-milovidov)clickhouse-copier: パーティションの存在を確認するクエリでも、設定内のwhere_conditionで定義したpartition_keyエイリアスを使用できるようにしました(以前はデータ読み取りクエリでのみ使用されていました)。 #6577 (proller)throwIfにオプションのメッセージ引数を追加しました。 (#5772) #6329 (Vdimir)- データ挿入中に発生したサーバー側の例外が、クライアント側でも処理されるようになりました。 #5891 #6711 (dimarub2000)
- メトリクス
DistributedFilesToInsertを追加しました。これは、Distributed テーブルによってリモートサーバーへ送信するために選択されたファイルシステム上のファイルの総数を示します。この値はすべてのシャードの合計です。 #6600 (alexey-milovidov) - JOIN の準備ロジックの大部分を
ExpressionAction/ExpressionAnalyzerからAnalyzedJoinに移動。 #6785 (Artem Zuikov) - TSan の警告「lock-order-inversion」を修正。 #6740 (Vasily Nemkov)
- Linux のケーパビリティ不足に関する情報メッセージを改善しました。致命的なエラーを
fatalレベルでログに記録するようにし、system.text_logで検索しやすくしました。 #6441 (alexey-milovidov) GROUP BY、ORDER BYの実行中にメモリ使用量を制限するために一時データをディスクへダンプする機能を有効にした場合でも、空きディスク容量を検査していませんでした。この不具合は、新しい設定項目min_free_disk_spaceを追加することで修正され、空きディスク容量がこの閾値を下回る場合にはクエリを停止してErrorCodes::NOT_ENOUGH_SPACEをスローするようになりました。 #6678 (Weiqing Xu) #6691 (alexey-milovidov)- スレッドごとの再帰的な rwlock を削除しました。スレッドはクエリ間で再利用されるため、この仕組みには意味がありません。
SELECTクエリはあるスレッドでロックを取得し、別のスレッドで取得したロックを保持したまま最初のスレッドの処理を抜ける可能性があります。その間に、最初のスレッドがDROPクエリで再利用されることがあります。これにより、誤って「Attempt to acquire exclusive lock recursively」というメッセージが出力されてしまいます。#6771(alexey-milovidov) ExpressionAnalyzer.appendJoin()を分割し、ExpressionAnalyzer内にMergeJoin用の場所を用意。 #6524 (Artem Zuikov)- MySQL互換サーバーに
mysql_native_password認証プラグインを追加しました。 #6194 (Yuriy Baranov) clock_gettimeの呼び出し回数を削減し、Allocatorにおけるデバッグ版とリリース版間の ABI 互換性を修正(影響の小さい問題)。 #6197 (alexey-milovidov)collectUsedColumnsをExpressionAnalyzerからSyntaxAnalyzerに移動しました。SyntaxAnalyzerは、required_source_columnsを自前で生成するようになりました。 #6416 (Artem Zuikov)FROM句に複数のテーブルが存在する場合(つまり JOIN を含むクエリ)に、サブセレクトおよびテーブル関数にエイリアスを必須とする設定joined_subquery_requires_aliasを追加。 #6733 (Artem Zuikov)ExpressionAnalyzerからGetAggregatesVisitorクラスを切り出し。 #6458 (Artem Zuikov)system.query_log:type列のデータ型をEnum型に変更。 #6265 (Nikita Mikhaylov)sha256_password認証プラグインの静的リンク。 #6512 (Yuriy Baranov)- 設定
compileの動作に追加の依存関係が不要になりました。以前のバージョンでは、cannot open crti.o、unable to find library -lcなどのエラーが発生する場合がありました。 #6309 (alexey-milovidov) - 悪意のあるレプリカから送られてくる可能性のある入力に対する検証を強化。 #6303 (alexey-milovidov)
- 現在は、
clickhouse-obfuscatorファイルはclickhouse-clientパッケージに含まれています。以前のバージョンでは、clickhouse obfuscator(空白あり)として提供されていました。#5816 #6609 (dimarub2000) - 少なくとも 2 つのクエリがあり、それらが 2 つ以上のテーブルを異なる順序で読み取り、さらに別のクエリがそのテーブルの 1 つに対して DDL 操作を実行する場合に発生するデッドロックを修正しました。別の非常にまれなデッドロックも修正しました。 #6764 (alexey-milovidov)
- デバッグを容易にするため、
system.processesおよびsystem.query_logにos_thread_idsカラムを追加しました。 #6763 (alexey-milovidov) sha256_passwordがデフォルトの認証プラグインとして使用されている場合に発生する PHP mysqlnd 拡張機能のバグに対する回避策(#6031 で説明されています)。#6113(Yuriy Baranov)- null 許容性が変更されたカラムに関する不要な処理を削除。 #6693 (Artem Zuikov)
queue_max_wait_msのデフォルト値を 0 に変更しました。現在の値(5 秒)は妥当ではなく、この設定が有用となる状況はごくまれです。あいまいさを避けるために、replace_running_query_max_wait_ms、kafka_max_wait_ms、connection_pool_max_wait_msの各設定を追加しました。 #6692 (alexey-milovidov)ExpressionAnalyzerからSelectQueryExpressionAnalyzerを抽出しました。ExpressionAnalyzerは非 SELECT クエリ用として残します。 #6499 (Artem Zuikov)- 重複していた入力および出力フォーマットを削除しました。 #6239 (Nikolai Kochetov)
- 接続時にユーザーが
poll_intervalとidle_connection_timeoutの設定を上書きできるようにしました。 #6230 (alexey-milovidov) MergeTreeに、新たなオプションttl_only_drop_parts(デフォルトでは無効)が追加されました。これはパーツの部分的なプルーニングを防ぎ、パーツ内のすべての行が期限切れになったときに、そのパーツ全体が削除されるようにするためのものです。 #6191 (Sergi Vladykin)- set index 関数に対する型チェックを追加。関数が誤った型を受け取った場合は例外をスローする。これにより UBSan を用いたファジングテストの失敗が修正される。 #6511 (Nikita Vasilev)
パフォーマンスの改善
MergeTreeテーブルで、ソートキーと先頭部分(プレフィックス)が一致するexpressionsを持つ場合に、ORDER BY expressions句を用いたクエリを最適化しました。この最適化はoptimize_read_in_order設定で制御されます。 #6054 #6629 (Anton Popov)- パーツの読み込みおよび削除処理で複数スレッドを使用可能にしました。 #6372 #6074 #6438 (alexey-milovidov)
- 集約関数状態を更新するバッチ方式の処理を実装しました。これによりパフォーマンス向上が見込めます。 #6435 (alexey-milovidov)
- 関数
exp、log、sigmoid、tanhにFastOpsライブラリを使用しました。FastOps は Michael Parakhin (Yandex CTO) による高速ベクトル数値計算ライブラリです。expおよびlog関数の性能が 6 倍以上向上しました。Float32引数に対するexpおよびlog関数はFloat32を返すようになりました(以前のバージョンでは常にFloat64を返していました)。現在はexp(nan)がinfを返す場合があります。expおよびlog関数の結果は、真の解に対する機械表現可能な最も近い数値ではない場合があります。 #6254 (alexey-milovidov) FastOps を動作させるために Danila Kutenin によるバリアントを使用しました。 #6317 (alexey-milovidov) UInt8/16に対する連続キー最適化を無効化しました。 #6298 #6701 (akuzm)ParsedJson::Iteratorで動的メモリアロケーションを排除することで、simdjsonライブラリのパフォーマンスを改善しました。 #6479 (Vitaly Baranov)mmap()によるメモリアロケーション時にページを事前にフォルトインするようにしました。 #6667 (akuzm)Decimalの比較におけるパフォーマンスバグを修正しました。 #6380 (Artem Zuikov)
ビルド/テスト/パッケージングの改善
- Compiler(ランタイムでのテンプレートインスタンシエーション)を削除しました。すでにその方式の性能を上回っているためです。 #6646 (alexey-milovidov)
- gcc-9 における性能低下を、より独立した形で示すための性能テストを追加。 #6302 (alexey-milovidov)
- テーブル関数
numbersのマルチスレッド対応版であるnumbers_mtを追加しました。ハッシュ関数を用いたパフォーマンステストを更新しました。 #6554 (Nikolai Kochetov) clickhouse-benchmarkの比較モード #6220 #6343 (dimarub2000)- スタックトレース出力をベストエフォートで行うよう改善しました。さらに、実行中のスレッドのスタックトレースを出力するためのデバッグ用シグナルとして
SIGPROFを追加しました。 #6529 (alexey-milovidov) - 各関数をそれぞれ専用ファイルに分割(その10)。 #6321 (alexey-milovidov)
- 重複していた
TABLE_IS_READ_ONLYのconst定義を削除。 #6566 (filimonov) StringHashMapに関する PR #5417 の書式変更。 #6700 (akuzm)ExpressionAnalyzerにおける結合作成用サブクエリを改善。 #6824 (Artem Zuikov)- PVS-Studio が検出した冗長な条件を削除。 #6775 (akuzm)
ReverseIndex向けのハッシュテーブルインターフェイスを分離。 #6672 (akuzm)- 設定のリファクタリング。 #6689 (alesapin)
setインデックス関数にコメントを追加しました。 #6319 (Nikita Vasilev)- Linux のデバッグビルドで OOM スコアを引き上げる。 #6152 (akuzm)
- HDFS HA が debug ビルドでも動作するようになりました。 #6650 (Weiqing Xu)
transform_query_for_external_databaseにテストを追加しました。#6388 (alexey-milovidov)- Kafka テーブルに対する複数のマテリアライズドビューのテストを追加。 #6509 (Ivan)
- ビルドスキームを改善。 #6500 (Ivan)
root以外のユーザーで実行された場合にも動作するように、test_external_dictionariesのインテグレーションテストを修正しました。 #6507 (Nikolai Kochetov)- 書き込まれるパケットの合計サイズが
DBMS_DEFAULT_BUFFER_SIZEを超えると、このバグが再現します。 #6204 (Yuriy Baranov) - テーブルの
RENAME操作における競合状態に対するテストを追加 #6752 (alexey-milovidov) KILL QUERYにおける Settings のレースコンディションを回避。 #6753 (alexey-milovidov)- キャッシュ辞書によるエラー処理を検証するインテグレーションテストを追加。 #6755 (Vitaly Baranov)
- Mac OS では不要なため、ELF オブジェクトファイルの解析を無効化します。 #6578 (alexey-milovidov)
- チェンジログ生成ツールの改善を試み。 #6327 (alexey-milovidov)
- GCC に
-Wshadowスイッチを追加。 #6325 (kreuzerkrieg) mimallocサポート用の不要なコードを削除しました。 #6715 (alexey-milovidov)zlib-ngは x86 の機能を検出し、その情報をグローバル変数に保存します。これはdeflateInitの呼び出し時に行われますが、この呼び出しは複数のスレッドから同時に行われる可能性があります。マルチスレッド環境での書き込み競合を避けるため、ライブラリの初期化時に実行するようにしました。 #6141 (akuzm)- #5192 で修正された JOIN で発生していたバグに対する回帰テスト。#6147(Bakhtiyor Ruziev)
- MSan レポートを修正しました。 #6144 (alexey-milovidov)
- 不安定になっていた TTL テストを修正。 #6782 (Anton Popov)
MergeTreeDataPart::is_frozenフィールドで誤って報告されていたデータレースを修正しました。 #6583 (alexey-milovidov)- ファジングテストにおけるタイムアウトを修正しました。以前のバージョンでは、クエリ
SELECT * FROM numbers_mt(gccMurmurHash(''))でハングアップを誤検出していました。 #6582 (alexey-milovidov) - カラムの
static_castにデバッグ用チェックを追加しました。 #6581 (alexey-milovidov) - 公式 RPM パッケージにおける Oracle Linux のサポート。 #6356 #6585 (alexey-milovidov)
- JSON のパフォーマンステストを
onceタイプからloopタイプに変更しました。 #6536 (Nikolai Kochetov) odbc-bridge.cppはmain()を定義しているため、clickhouse-libには含めないようにしました。 #6538 (Orivej Desh)- 右テーブルのキーに null が含まれる場合に
FULL|RIGHT JOINがクラッシュする不具合のテスト。 #6362 (Artem Zuikov) - 念のため、エイリアス展開の上限を検証するテストを追加しました。 #6442 (alexey-milovidov)
- 適切な箇所で
boost::filesystemからstd::filesystemに切り替えました。 #6253 #6385 (alexey-milovidov) - RPM パッケージをウェブサイトに追加しました。 #6251 (alexey-milovidov)
INセクションでのUnknown identifier例外修正用のテストを追加。 #6708 (Artem Zuikov)- 理解しづらいという声があったため、
shared_ptr_helperを簡素化しました。 #6675 (alexey-milovidov) - 修正済み Gorilla および DoubleDelta コーデック用のパフォーマンステストを追加しました。 #6179 (Vasily Nemkov)
- 統合テスト
test_dictionariesを 4 つのテストに分割しました。 #6776 (Vitaly Baranov) PipelineExecutorでの PVS-Studio 警告を修正。 #6777 (Nikolai Kochetov)- ASan 使用時に
library辞書ソースを使用できるようにしました。 #6482 (alexey-milovidov) - PR のリストから変更履歴を生成するオプションを追加しました。 #6350 (alexey-milovidov)
TinyLogストレージを読み取り時にロックするようにしました。 #6226 (akuzm)- CI で壊れたシンボリックリンクを検出。#6634 (alexey-milovidov)
- デバッグビルドでは時間がかかる場合があるため、"stack overflow" テストのタイムアウト時間を延長しました。 #6637 (alexey-milovidov)
- 二重の空白を検出するためのチェックを追加しました。 #6643 (alexey-milovidov)
- サニタイザ有効化ビルド時の
new/deleteメモリトラッキングを修正します。トラッキングの動作はまだ不明瞭で、現状ではテストでのメモリ制限例外を防ぐためだけに機能します。#6450 (Artem Zuikov) - リンク時の未定義シンボルチェックを再度有効にした。 #6453 (Ivan)
hyperscanを毎日再ビルドしないようにする。 #6307 (alexey-milovidov)ProtobufWriterでの UBSan レポートを修正しました。 #6163 (alexey-milovidov)- 互換性がないため、Query Profiler をサニタイザーと併用できないようにしました。 #6769 (alexey-milovidov)
- タイマー失敗後に辞書を再読み込みするテストを追加。 #6114 (Vitaly Baranov)
PipelineExecutor::prepareProcessorの引数型の不整合を修正。 #6494 (Nikolai Kochetov)- 無効な URI に対するテストを追加しました。 #6493 (alexey-milovidov)
CAST関数に対するチェックをさらに追加しました。これにより、ファジングテストで発生するセグメンテーションフォルトに関する情報をより多く取得できるようにしました。 #6346 (Nikolai Kochetov)- ローカルでイメージをビルドする
docker/builderコンテナにgcc-9サポートを追加しました。 #6333 (Gleb Novikov) LowCardinality(String)を使用した主キーのテスト。 #5044 #6219 (dimarub2000)- スタックトレースの出力が遅い問題の影響を受けていたテストを修正しました。 #6315 (alexey-milovidov)
groupUniqArrayで発生していたクラッシュを再現するテストケースを追加。修正は #6029 を参照。 #4402 #6129 (akuzm)- インデックスミューテーション関連のテストを修正しました。 #6645 (Nikita Vasilev)
- パフォーマンステストでは、実行していないクエリのクエリログは読み取らないようにしました。 #6427 (akuzm)
- マテリアライズドビューは、疑わしい LowCardinality 型に関する設定にかかわらず、任意の LowCardinality 型で作成できるようになりました。 #6428 (Olga Khvostikova)
send_logs_level設定用のテストを更新。 #6207 (Nikolai Kochetov)- gcc-8.2 でのビルドを修正。 #6196 (Max Akhmedov)
- 内蔵の libc++ を使ったビルドを修正。 #6724 (Ivan)
rdkafkaライブラリを用いた共有ビルドを修正 #6101 (Ivan)- Mac OS 向けビルドの修正(不完全)。 #6390 (alexey-milovidov) #6429 (alex-zaitsev)
- 「splitted」ビルドの問題を修正。 #6618 (alexey-milovidov)
- その他のビルド関連の修正: #6186 (Amos Bird) #6486 #6348 (vxider) #6744 (Ivan) #6016 #6421 #6491 (proller)
後方互換性のない変更
- 使用頻度の低いテーブル関数
catBoostPoolおよびストレージCatBoostPoolを削除しました。このテーブル関数を使用している場合は、[email protected]までメールをお送りください。なお、CatBoost 連携自体は引き続き提供され、サポートされます。 #6279 (alexey-milovidov) - デフォルトで
ANY RIGHT JOINおよびANY FULL JOINを無効化しました。これらを有効にするには、any_join_distinct_right_table_keys設定を有効にしてください。 #5126 #6351 (Artem Zuikov)
ClickHouse リリース 19.13
ClickHouse リリース 19.13.6.51, 2019-10-02
バグ修正
- このリリースには、19.11.12.69 のすべてのバグ修正も含まれています。
ClickHouse リリース 19.13.5.44, 2019-09-20
バグ修正
- このリリースには、19.14.6.12 のすべてのバグ修正も含まれています。
- ZooKeeper にアクセスできない状態でレプリケートされたテーブルに対して
DROPクエリを実行した際に、テーブルが不整合な状態になる可能性があった問題を修正しました。 #6045 #6413 (Nikita Mikhaylov) - StorageMerge におけるデータ競合の問題を修正しました。 #6717 (alexey-milovidov)
- ソケットからの受信 (
recv) が無限に続いてしまう原因となっていた、クエリプロファイラで導入されたバグを修正しました。 #6386 (alesapin) - 真偽値に対して
JSONExtractRaw関数を実行した際の過剰な CPU 使用率を修正しました。 #6208 (Vitaly Baranov) - マテリアライズドビューへデータをプッシュする際に発生していたリグレッションを修正しました。 #6415 (Ivan)
- テーブル関数
urlにおいて、攻撃者が任意の HTTP ヘッダーをリクエストに挿入できてしまう脆弱性がありました。この問題は Nikita Tikhomirov によって発見されました。 #6466 (alexey-milovidov) - Set インデックスにおける不要な
ASTチェックを修正しました。 #6510 #6651 (Nikita Vasilev) - クエリ内に埋め込まれた
AggregateFunction値のパース処理を修正しました。 #6575 #6773 (Zhichang Yu) trim関数ファミリーの誤った動作を修正しました。 #6647 (alexey-milovidov)
ClickHouse リリース 19.13.4.32, 2019-09-10
バグ修正
- このリリースには、19.11.9.52 および 19.11.10.54 のすべてのバグ修正とセキュリティ修正も含まれます。
system.partsテーブルおよびALTERクエリでのデータレースを修正しました。#6245 #6513 (alexey-milovidov)sampleとprewhereを使用して空の分散テーブルを読み取る場合に発生していた、ストリーム内のヘッダー不一致を修正しました。#6167 (Lixiang Qian) #6823 (Nikolai Kochetov)- タプルを含むサブクエリを
IN句で使用した場合にクラッシュする問題を修正しました。#6125 #6550 (tavplubix) GLOBAL JOIN ONセクションで同じカラム名を使用した場合の問題を修正しました。#6181 (Artem Zuikov)- 対応していない型を
Decimalにキャストしたときにクラッシュする問題を修正しました。代わりに例外をスローするようにしました。#6297 (Artem Zuikov) extractAll()関数でのクラッシュを修正しました。#6644 (Artem Zuikov)MySQL、ODBC、JDBCテーブル関数に対するクエリ変換が、複数のAND式を含むSELECT WHEREクエリに対して正しく動作するようになりました。#6381 #6676 (dimarub2000)- MySQL 8 連携向けに、既存の宣言に対するチェックを追加しました。#6569 (Rafael David Tinoco)
セキュリティ修正
- 伸長処理フェーズにおけるコーデックの 2 つの脆弱性を修正しました(悪意のあるユーザーが、伸長時にバッファオーバーフローを引き起こすよう細工した圧縮データを作成できてしまう問題)。#6670 (Artem Zuikov)
ClickHouse リリース 19.13.3.26, 2019-08-22
バグ修正
enable_mixed_granularity_parts=1が設定されたテーブルに対するALTER TABLE ... UPDATEクエリを修正しました。 #6543 (alesapin)- タプルを含むサブクエリを伴う IN 句を使用した際に発生する NPE を修正しました。 #6125 #6550 (tavplubix)
- 古いレプリカが再度アクティブになった場合に、DROP PARTITION によって削除されたデータパーツを依然として保持してしまう可能性がある問題を修正しました。 #6522 #6523 (tavplubix)
- CSV のパースに関する問題を修正しました。 #6426 #6559 (tavplubix)
system.partsテーブルおよび ALTER クエリにおけるデータレースを修正しました。これにより #6245 の問題が解消されます。 #6513 (alexey-milovidov)- メモリ破損を引き起こす可能性のある mutation 処理内の誤ったコードを修正しました。
system.partsまたはsystem.parts_columnsに対するDROP TABLEとSELECTが同時に行われた場合に発生し得る、アドレス0x14c0読み取り時のセグメンテーションフォールトを修正しました。mutation クエリ準備時の競合状態を修正しました。Replicated テーブルのOPTIMIZEと ALTER などの変更操作が同時に行われた場合に発生するデッドロックを修正しました。 #6514 (alexey-milovidov) - スキッピングインデックスを持つテーブルに対する
ALTER DELETEクエリの実行後に、データが失われる可能性がある問題を修正しました。 #6224 #6282 (Nikita Vasilev)
セキュリティ修正
- 攻撃者が ZooKeeper への書き込み権限を持ち、かつ ClickHouse が動作しているネットワークから到達可能なカスタムサーバーを実行できる場合、ClickHouse のレプリカとして動作し ZooKeeper に登録される、カスタムビルドされた悪意のあるサーバーを作成できる可能性があります。別のレプリカがこの悪意あるレプリカからデータパーツをフェッチすると、その際に
clickhouse-serverに対してファイルシステム上の任意のパスへ書き込みを行わせることができるおそれがあります。Yandex の情報セキュリティチームの Eldar Zaitov によって発見されました。 #6247 (alexey-milovidov)
ClickHouse リリース 19.13.2.19, 2019-08-14
新機能
- クエリ単位のサンプリングプロファイラ。 例。 #4247 (laplab) #6124 (alexey-milovidov) #6250 #6283 #6386
COLUMNS('regexp')式を使用して、*アスタリスクのより高機能な拡張版として動作する列リストを指定できるようになりました。 #5951 (mfridental), (alexey-milovidov)CREATE TABLE AS table_function()が可能になりました。 #6057 (dimarub2000)- 確率的勾配降下法に対する Adam オプティマイザが、
stochasticLinearRegression()およびstochasticLogisticRegression()集約関数でデフォルトとして使用されるようになりました。ほとんどチューニングを行わなくても高い精度を示すためです。 #6000 (Quid37) - カスタム週番号を扱うための関数を追加しました。 #5212 (Andy Yang)
RENAMEクエリがすべてのストレージで動作するようになりました。 #5953 (Ivan)- クライアントは、サーバー設定で指定されたログレベルに関係なく、
send_logs_levelを設定することで、任意のレベルのログをサーバーから受信できるようになりました。 #5964 (Nikita Mikhaylov)
後方互換性のない変更
- 設定
input_format_defaults_for_omitted_fieldsがデフォルトで有効になりました。Distributed テーブルへの挿入では、この設定がクラスタ上で同一である必要があります(ローリングアップデートの前に設定する必要があります)。これにより、JSONEachRowおよびCSV*フォーマットにおいて、省略されたフィールドに対する複雑なデフォルト式の計算が有効になります。これは期待される振る舞いですが、ごくわずかなパフォーマンスの差異を引き起こす可能性があります。 #6043 (Artem Zuikov), #5625 (akuzm)
実験的機能
- 新しいクエリ処理パイプライン。
experimental_use_processors=1オプションを使用して有効にします。自己責任で使用してください。 #4914 (Nikolai Kochetov)
バグ修正
- このバージョンで Kafka 統合機能が修正されました。
DoubleDelta値が大きい場合のInt64に対するDoubleDeltaエンコーディングを修正し、Int32のランダムデータに対するDoubleDeltaエンコーディングを改善しました。 #5998 (Vasily Nemkov)- 設定
merge_tree_uniform_read_distributionが 0 に設定されている場合のmax_rows_to_readの過大評価を修正しました。 #6019 (alexey-milovidov)
改良
config.dファイルが、設定ファイルと対応するルート要素を持たない場合に例外をスローするようになりました。 #6123 (dimarub2000)
パフォーマンスの改善
ビルド/テスト/パッケージングの改善
- パフォーマンステストでメモリ使用量を報告するようにしました。 #5899 (akuzm)
- 外部
libcxxを使用したビルドを修正しました。 #6010 (Ivan) rdkafkaライブラリを使用した共有ビルドを修正しました。 #6101 (Ivan)
ClickHouse リリース 19.11
ClickHouse リリース 19.11.13.74, 2019-11-01
バグ修正
- マージ/変更されるパーツのうちの 1 つが空(0 行)の場合に、
ALTER MODIFY COLUMNおよび縦方向のマージでまれに発生していたクラッシュを修正。#6780 (alesapin) SIMDJSONを手動で更新。この変更により、標準エラー出力ファイルが誤った JSON 診断メッセージで埋め尽くされる可能性を解消。#7548 (Alexander Kazakov)- 変更処理における
mrkファイル拡張子に関するバグを修正。#7548 (alesapin)
ClickHouse リリース 19.11.12.69, 2019-10-02
バグ修正
- 大規模テーブル上の複雑なキーに対するインデックス解析のパフォーマンス低下を修正。この修正は #6924 に対応。#7075 (alexey-milovidov)
- Distributed エンジンを使用したテーブルでデータ送信中に、まれに発生していた SIGSEGV を回避(
Failed to send batch: file with index XXXXX is absent)。#7032 (Azat Khuzhin) - 複数の JOIN を行った際に発生する
Unknown identifierを修正。この修正は #5254 に対応。#7022 (Artem Zuikov)
ClickHouse リリース 19.11.11.57, 2019-09-13
- Kafka の空のトピックから SELECT する際にセグメンテーションフォルトを引き起こしていた論理エラーを修正。#6902 #6909 (Ivan)
- パラメータ内に空配列を含む場合の関数
АrrayEnumerateUniqRankedを修正。#6928 (proller)
ClickHouse リリース 19.11.10.54, 2019-09-10
バグ修正
- すべてのパーティションに対して一度にコミットできるよう、Kafka メッセージのオフセットを手動で保存するように変更。「1 コンシューマー - 複数パーティション」シナリオで重複が発生する可能性を修正。#6872 (Ivan)
ClickHouse リリース 19.11.9.52, 2019-09-6
- キャッシュ辞書のエラー処理を改善。 #6737 (Vitaly Baranov)
- 関数
arrayEnumerateUniqRankedのバグを修正。 #6779 (proller) - JSON から
Tupleを抽出する際のJSONExtract関数の動作を修正。 #6718 (Vitaly Baranov) - スキッピングインデックスを持つテーブルに対する
ALTER DELETEクエリの後に発生しうるデータ損失を修正。 #6224 #6282 (Nikita Vasilev) - パフォーマンステストを修正。 #6392 (alexey-milovidov)
- Parquet: boolean カラムの読み取りを修正。 #6579 (alexey-milovidov)
- 定数引数に対する
nullIf関数の誤った動作を修正。 #6518 (Guillaume Tassery) #6580 (alexey-milovidov) - 通常のサーバー再起動時に Kafka メッセージが重複する問題を修正。 #6597 (Ivan)
- 長時間実行される
ALTER UPDATEまたはALTER DELETEにより通常のマージが実行されなくなる問題を修正。利用可能な空きスレッドが十分に存在しない場合にはミューテーションが実行されないようにした。 #6502 #6617 (tavplubix) - サーバー設定ファイルで "timezone" を処理する際のエラーを修正。 #6709 (alexey-milovidov)
- Kafka テストを修正。 #6805 (Ivan)
セキュリティ修正
- 攻撃者が ZooKeeper への書き込み権限を持ち、かつ ClickHouse が動作しているネットワークから到達可能な独自サーバーを実行できる場合、ClickHouse レプリカとして動作し ZooKeeper に登録される、カスタムビルドの悪意あるサーバーを作成できます。別のレプリカがその悪意あるレプリカからデータパーツをフェッチする際、clickhouse-server にファイルシステム上の任意のパスへの書き込みを強制することが可能になります。Yandex の情報セキュリティチームの Eldar Zaitov によって発見されました。 #6247 (alexey-milovidov)
ClickHouse リリース 19.11.8.46, 2019-08-22
バグ修正
enable_mixed_granularity_parts=1のテーブルに対するALTER TABLE ... UPDATEクエリを修正。#6543 (alesapin)- タプルを含むサブクエリを伴う IN 句を使用した際の NPE を修正。#6125 #6550 (tavplubix)
- ステールなレプリカが復帰した場合に、
DROP PARTITIONによって削除されたデータパーツを依然として保持している可能性がある問題を修正。#6522 #6523 (tavplubix) - CSV のパースに関する問題を修正。#6426 #6559 (tavplubix)
system.partsテーブルと ALTER クエリにおけるデータレースを修正。この修正により #6245 が解決されます。#6513 (alexey-milovidov)- メモリ破損を引き起こす可能性がある mutation における誤ったコードを修正。
system.partsまたはsystem.parts_columnsからのSELECTとDROP TABLEの同時実行により発生し得た、アドレス0x14c0の読み取りに伴うセグメンテーションフォルトを修正。mutation クエリ準備時のレースコンディションを修正。Replicated テーブルのOPTIMIZEと ALTER などの同時変更操作により発生するデッドロックを修正。#6514 (alexey-milovidov)
ClickHouse リリース 19.11.7.40, 2019-08-14
バグ修正
- このバージョンで Kafka 統合が修正されました。
- 定数引数に対して
arrayReduceを使用した際のセグメンテーションフォルトを修正しました。 #6326 (alexey-milovidov) toFloat()の単調性を修正しました。 #6374 (dimarub2000)optimize_skip_unused_shardsが有効でシャーディングキーが欠落している場合に発生するセグメンテーションフォルトを修正しました。 #6384 (CurtizJ)arrayEnumerateUniqRanked関数のロジックを修正しました。 #6423 (alexey-milovidov)- MySQL ハンドラーから不要な詳細ログ出力を削除しました。 #6389 (alexey-milovidov)
- 集約関数
topKおよびtopKWeightedにおける誤った動作と、セグメンテーションフォルトが発生する可能性を修正しました。 #6404 (CurtizJ) - 後方互換性を維持するため、
system.columnsテーブルに仮想カラムを表示しないようにしました。 #6406 (alexey-milovidov) - 複合キーキャッシュ辞書における文字列フィールドのメモリ割り当てに関するバグを修正しました。 #6447 (alesapin)
Replicated*MergeTreeテーブルの新しいレプリカを作成する際に、アダプティブ粒度の有効化処理に関するバグを修正しました。 #6452 (alesapin)- Kafka メッセージ読み取り時に無限ループが発生する問題を修正しました。 #6354 (abyss7)
- 細工されたクエリにより、SQL パーサでスタックオーバーフローが発生してサーバーがクラッシュする可能性、および
MergeテーブルとDistributedテーブルでスタックオーバーフローが発生する可能性を修正しました。 #6433 (alexey-milovidov) - 短いシーケンスでの Gorilla エンコードエラーを修正しました。 #6444 (Enmk)
改善
- 接続時に
poll_intervalおよびidle_connection_timeout設定をユーザーが上書きできるようにしました。 #6230 (alexey-milovidov)
ClickHouse リリース 19.11.5.28, 2019-08-05
バグ修正
- サーバーが過負荷のときにクエリがハングする可能性を修正しました。 #6301 (alexey-milovidov)
yandexConsistentHash関数における FPE を修正しました。これにより #6304 が解決されます。 #6126 (alexey-milovidov)AggregateFunctionFactoryにおけるLowCardinality型の変換のバグを修正しました。これにより #6257 が解決されます。 #6281 (Nikolai Kochetov)- 設定ファイル内で、
trueおよびfalseという文字列からbool設定をパースする処理を修正しました。 #6278 (alesapin) WHEREの一部がPREWHEREに移動した場合に、MergeTreeテーブル上のDistributedテーブルへのクエリでストリームヘッダーの非互換が発生するまれなバグを修正しました。 #6236 (alesapin)- 符号付き型から符号なし型への整数除算で生じるオーバーフローを修正しました。これにより #6214 が解決されます。 #6233 (alexey-milovidov)
後方互換性のない変更
Kafkaは依然として動作しません。
ClickHouse リリース 19.11.4.24, 2019-08-01
バグ修正
- アダプティブグラニュラリティ使用時に、セカンダリインデックスのマークを書き込む処理のバグを修正。 #6126 (alesapin)
- 2 段階集約での
GROUP BYのWITH ROLLUPおよびWITH CUBE修飾子を修正。 #6225 (Anton Popov) JSONExtractRaw関数で発生していたハングを修正し、#6195 #6198 を解決。 (alexey-milovidov)- ExternalLoader::reloadOutdated() でのセグメンテーションフォールトを修正。 #6082 (Vitaly Baranov)
- サーバーがリッスンソケットをクローズしてもシャットダウンせず、残りのクエリの処理を続ける場合がある問題を修正。この結果、2 つの clickhouse-server プロセスが同時に動作してしまう可能性がありました。残りのクエリに対してサーバーが
bad_function_callエラーを返すことがある問題も修正。 #6231 (alexey-milovidov) - ODBC、MySQL、ClickHouse および HTTP を介した外部辞書の初回ロード時における、更新フィールドに対する無意味かつ不正確な条件を修正。これにより #6069 #6083 を解決。 (alexey-milovidov)
LowCardinality(Nullable)から Null を含まない非 Nullable カラムへのキャスト時に、不要な例外が発生する問題を修正(例:SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)のようなクエリ)。 #6094 #6119 (Nikolai Kochetov)- 極めてまれなケースで "uniq" 集約関数が非決定的な結果を返す問題を修正。このバグはすべての ClickHouse バージョンに存在していました。 #6058 (alexey-milovidov)
- 関数
IPv6CIDRToRangeで CIDR をわずかに大きく設定しすぎた場合に発生するセグメンテーションフォールトを修正。 #6068 (Guillaume Tassery) - サーバーが多数の異なるコンテキストから多くの例外をスローする場合に発生していた小さなメモリリークを修正。 #6144 (alexey-milovidov)
- コンシューマーがサブスクリプション前に一時停止され、その後再開されない状況を修正。 #6075 (Ivan) このバージョンでは Kafka が正常に動作しないことに注意してください。
- 以前の読み取り操作がエラーで終了した際に、Kafka データバッファをクリアする処理を追加。 #6026 (Nikolay) このバージョンでは Kafka が正常に動作しないことに注意してください。
StorageMergeTree::background_task_handleはstartup()で初期化されるため、MergeTreeBlockOutputStream::write()が初期化前にこれを使用しようとする可能性があります。初期化されているかどうかを確認するように修正。 #6080 (Ivan)
ビルド/テスト/パッケージングの改善
- 公式の
rpmパッケージを追加。#5740 (proller) (alesapin) packagerスクリプトで.rpmと.tgzパッケージをビルドできる機能を追加。#5769 (alesapin)- 「Arcadia」ビルドシステム向けの修正。#6223 (proller)
後方互換性のない変更
- このバージョンでは
Kafkaは動作しません。
ClickHouse Release 19.11.3.11, 2019-07-18
新機能
- プリペアドステートメントのサポートを追加。#5331 (Alexander) #5630 (alexey-milovidov)
DoubleDeltaとGorilla列コーデック。#5600 (Vasily Nemkov)- クエリ処理スレッドの "nice" 値を制御できる
os_thread_priority設定を追加。これは OS が動的スケジューリング優先度を調整するために使用します。動作にはCAP_SYS_NICEケーパビリティが必要です。#5858 #5909 を実装。(alexey-milovidov) - Kafka エンジン向けに
_topic,_offset,_key列を実装。#5382 (Ivan) なお、このバージョンではKafkaは動作しません。 - 集約関数コンビネーター
-Resampleを追加。#5590 (hcz) - ウィンドウサイズの制限あり/なしで移動合計/平均を計算する集約関数
groupArrayMovingSum(win_size)(x)とgroupArrayMovingAvg(win_size)(x)を追加。#5595 (inv2004) - 同義語
arrayFlatten<->flattenを追加。#5764 (hcz) - Uber 由来の H3 関数
geoToH3を統合。#4724 (Remen Ivan) #5805 (alexey-milovidov)
バグ修正
- 非同期更新を行う DNS キャッシュを実装しました。専用スレッドがすべてのホストを解決し、一定間隔(設定値
dns_cache_update_period)で DNS キャッシュを更新します。ホストの IP アドレスが頻繁に変更される場合に役立ちます。 #5857 (Anton Popov) - 32 ビット未満の値を扱う列に影響する
Deltaコーデックのセグメンテーションフォールトを修正しました。このバグによりメモリがランダムに破壊されていました。 #5786 (alesapin) - 非物理カラムを含むブロックにおける TTL マージで発生していたセグメンテーションフォールトを修正。 #5819 (Anton Popov)
LowCardinalityカラムを含むパーツのチェック時にまれに発生するバグを修正しました。以前は、LowCardinalityカラムを含むパーツに対してcheckDataPartが常に失敗していました。 #5832 (alesapin)- サーバーのスレッドプールがいっぱいのときに、接続がハングアップしたままにならないようにします。これは、接続タイムアウトが長い場合の
remoteテーブル関数からの接続や、レプリカのないシャードへの接続にとって重要です。この変更により #5878 #5881 が修正されます(alexey-milovidov) evalMLModel関数で定数引数をサポートしました。これにより、#5817 と #5820 が修正されました(alexey-milovidov)- ClickHouse がデフォルトタイムゾーンを
UTCではなくUCTと判定してしまう問題を修正しました。これにより #5804 が解決されました。 #5828 (alexey-milovidov) visitParamExtractRawにおけるバッファのアンダーフローを修正しました。この修正により #5901 および #5902 が解決されます(alexey-milovidov)- 分散実行される
DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTERクエリは、リーダーレプリカ上で直接実行されるようになりました。 #5757 (alesapin) ColumnConstとColumnNullableの組み合わせに対するcoalesceの修正と、それに関連する変更。 #5755 (Artem Zuikov)ReadBufferFromKafkaConsumerを修正し、以前に停止していた場合でもcommit()後に新しいメッセージの読み取りを継続できるようにした #5852 (Ivan)- 右テーブルの
Nullableキーで結合する際のFULLおよびRIGHTJOIN の結果を修正。 #5859 (Artem Zuikov) - 低優先度クエリが無限にスリープし続けてしまう問題に対する修正候補。 #5842 (alexey-milovidov)
SYSTEM FLUSH LOGSクエリの後に一部のクエリがquery_logに記録されないことがあるレースコンディションの問題を修正。 #5456 #5685 (Anton Popov)- watch が既に削除された copier オブジェクトを使用しようとしていたことにより発生していた、ClusterCopier 内の
heap-use-after-freeASan 警告を修正しました。 #5871 (Nikolai Kochetov) - いくつかの実装において
IColumn::deserializeAndInsertFromArenaから誤ったStringRefポインタが返されていた問題を修正しました。このバグはユニットテストのみに影響していました。 #5973 (Nikolai Kochetov) - ソースおよび中間の array join 列が同名の列を隠してしまうことを防止。 #5941 (Artem Zuikov)
- MySQL スタイルの識別子のクオートを使用する MySQL エンジン向けの
INSERTおよびSELECTクエリを修正。 #5704 (Winter Zhang) CHECK TABLEクエリが MergeTree エンジンファミリーでも動作するようになりました。各パーツ(より単純なエンジンの場合はファイル)ごとに、チェックのステータスと(存在する場合は)メッセージを返します。また、破損したパーツの取得に関するバグを修正しました。 #5865 (alesapin)- SPLIT_SHARED_LIBRARIES のランタイムを修正 #5793 (Danila Kutenin)
/etc/localtimeが../usr/share/zoneinfo/Asia/Istanbulのような相対シンボリックリンクになっている場合のタイムゾーン初期化処理を修正 #5922 (alexey-milovidov)- clickhouse-copier: シャットダウン時に発生する use-after-free を修正 #5752 (proller)
simdjsonを更新しました。ゼロバイトを含む一部の不正な JSON が正常にパースされてしまう問題を修正しました。 #5938 (alexey-milovidov)- SystemLogs のシャットダウンの問題を修正 #5802 (Anton Popov)
invalidate_queryの条件が辞書に依存している場合にハングする問題を修正。 #6011 (Vitaly Baranov)
改善点
- クラスタ設定で名前解決できないアドレスの指定を許可します。それらは利用不可として扱われ、接続のたびに再度の名前解決が試みられます。これは特に Kubernetes 環境で有用です。これにより #5714 #5924 が修正されました(alexey-milovidov)。
- アイドル状態の TCP 接続をクローズします(デフォルトのタイムアウトは 1 時間)。これは、すべてのサーバー上に複数の分散テーブルを持つ大規模クラスターでは特に重要です。各サーバーが他のすべてのサーバーへの接続プールを保持している可能性があり、ピーク時のクエリ並列実行後に接続がアイドル状態のまま残ってしまうためです。これにより #5879 #5880 が修正されました(alexey-milovidov)。
topK関数の品質を向上。SavingSpace セットの挙動を変更し、新しい要素の重みが既存の要素より大きい場合は末尾の要素を削除するようにしました。 #5833 #5850 (Guillaume Tassery)- ドメインを扱う URL 関数は、スキームのない不完全な URL に対しても動作するようになりました #5725 (alesapin)
- チェックサムを
system.parts_columnsテーブルに追加しました。 #5874 (Nikita Mikhaylov) Enum8またはEnum16のシノニムとして利用できるEnumデータ型を追加しました。 #5886 (dimarub2000)T64コーデック向けのフルビット転置バリアント。zstdを使用した場合に、圧縮率の向上が見込めます。 #5742 (Artem Zuikov)startsWith関数を条件に用いる場合にプライマリキーを使用できるようになりました。これにより、#5310、#5882、#5919 が修正されました(dimarub2000)。- 空のデータベース名の使用を許可することで、クロスレプリケーションクラスタートポロジで
clickhouse-copierを使用可能にしました。 #5745 (nvartolomei) tzdataが存在しないシステム(例: 素の Docker コンテナ)では、デフォルトのタイムゾーンとしてUTCが使用されるようになりました。このパッチ以前は、Could not determine local time zoneというエラーメッセージが出力され、サーバーやクライアントは起動しませんでした。 #5827 (alexey-milovidov)- 後方互換性のため、関数
quantileTimingにおける浮動小数点引数のサポートを再導入しました。 #5911 (alexey-milovidov) - エラーメッセージに、列が不足しているテーブル名を表示するようにしました。 #5768 (Ivan)
- 複数ユーザーによる同一の query_id を持つクエリの実行を禁止 #5430 (proller)
- Graphite へメトリクスを送信するためのより堅牢なコード。複数の
RENAME TABLE操作が長時間実行されている間でも動作します。 #5875 (alexey-milovidov) - ThreadPool がタスクの実行をスケジュールできない場合に、より詳細なエラーメッセージが表示されるようになりました。これにより #5305 #5801 が修正されました(alexey-milovidov)
- ngramSearch の挙動を反転し、より直感的にする #5807 (Danila Kutenin)
- HDFS エンジンビルダーにユーザーのパース処理を追加 #5946 (akonyaev90)
max_ast_elementsパラメータのデフォルト値を更新 #5933 (Artem Konovalov)- 非推奨設定という概念を追加しました。非推奨設定である
allow_experimental_low_cardinality_typeは、指定しても動作に影響はありません。 0f15c01c6802f7ce1a1494c12c846be8c98944cd Alexey Milovidov
パフォーマンスの改善
- Merge テーブルに対する
SELECTのストリーム数を増やし、スレッドの分散をより均一にします。設定max_streams_multiplier_for_merge_tablesを追加しました。これにより、#5797 および #5915 が修正されました (alexey-milovidov)
ビルド/テスト/パッケージングの改善
- 異なるバージョンの ClickHouse 間でのクライアント/サーバー間通信に対する下位互換性テストを追加しました。 #5868 (alesapin)
- 各コミットおよびプルリクエストごとにテストカバレッジ情報を提供。 #5896 (alesapin)
- アドレスサニタイザと連携してカスタムアロケータ(
ArenaとArenaWithFreeLists)をサポートし、「use-after-free」エラーのデバッグを容易にする。 #5728 (akuzm) - C++ の例外処理およびスタックトレース出力に LLVM libunwind 実装 を使用するように変更 #4828(Nikita Lapkov)
- -Weverything による警告をさらに 2 件追加 #5923 (alexey-milovidov)
- Memory Sanitizer 対応の ClickHouse ビルドを可能にしました。 #3949 (alexey-milovidov)
- fuzz テストにおける
bitTest関数に関する UBSan レポートを修正。#5943 (alexey-milovidov) - Docker: 認証が必要な ClickHouse インスタンスを初期化できるようになりました。 #5727 (Korviakov Andrey)
- librdkafka をバージョン 1.1.0 に更新 #5872 (Ivan)
- インテグレーションテスト向けのグローバルタイムアウトを追加し、一部のテストをテストコード内で無効化しました。 #5741 (alesapin)
- いくつかの ThreadSanitizer のエラーを修正。#5854 (akuzm)
--no-undefinedオプションは、リンク時にリンカにすべての外部シンボル名の存在チェックを強制します。分割ビルドモードにおいて、ライブラリ間の実際の依存関係を追跡するのに非常に有用です。 #5855 (Ivan)- #5797 および #5914 向けのパフォーマンステストを追加しました (alexey-milovidov)
- gcc-7 との互換性を修正。 #5840 (alexey-milovidov)
- gcc-9 のサポートを追加しました。これにより、#5717 および #5774 を修正しました(alexey-milovidov)
- libunwind が誤ってリンクされる可能性がある不具合を修正しました。 #5948 (alexey-milovidov)
- PVS-Studio によって検出された警告をいくつか修正しました。 #5921 (alexey-milovidov)
clang-tidy静的解析ツールの初期サポートを追加しました。 #5806 (alexey-milovidov)- BSD/Linux のエンディアンマクロ('be64toh' と 'htobe64')を Mac OS X の同等マクロに変換する #5785 (Fu Chen)
- 統合テストガイドを改善しました。 #5796 (Vladimir Chebotarev)
- macOS + gcc9 環境でのビルドを修正 #5822 (filimonov)
- 気付きにくいタイポを修正: aggreAGte -> aggregate。 #5753 (akuzm)
- FreeBSD 向けビルドの修正 #5760 (proller)
- 実験的な YouTube チャンネルへのリンクを Web サイトに追加 #5845 (Ivan Blinkov)
- CMake: カバレッジ用フラグのオプション WITH_COVERAGE を追加 #5776 (proller)
- いくつかのインライン PODArray の初期サイズを修正しました。 #5787 (akuzm)
- clickhouse-server.postinst: CentOS 6 における OS の検出処理を修正 #5788 (proller)
- Arch Linux 向けパッケージ生成を追加。 #5719 (Vladimir Chebotarev)
- Common/config.h をライブラリ(dbms)単位に分割 #5715 (proller)
- "Arcadia" ビルドプラットフォーム向けの修正 #5795 (proller)
- 非標準ビルド (gcc9、サブモジュールなし) 向けの修正 #5792 (proller)
- unalignedStore ではバグが発生しやすいことが判明したため、明示的な型指定を必須にした。#5791 (akuzm)
- macOS 向けビルドを修正 #5830 (filimonov)
- 新しい JIT 機能に関するパフォーマンステストを大規模データセットで実施(リクエスト元: #5263 #5887(Guillaume Tassery))
- ストレステストでステートフルテストを実行 12693e568722f11e19859742f56428455501fd2a (alesapin)
後方互換性のない変更
- このバージョンでは
Kafkaは正常に動作しません。 - 新しい
MergeTreeテーブルに対して、デフォルトでadaptive_index_granularity= 10MB を有効化しました。バージョン 19.11 以降で新しい MergeTree テーブルを作成した場合、19.6 より前のバージョンへのダウングレードは不可能になります。 #5628 (alesapin) - Yandex.Metrica で使用されていた、古い非公開の組み込みディクショナリを削除しました。関数
OSIn、SEIn、OSToRoot、SEToRoot、OSHierarchy、SEHierarchyは利用できなくなりました。これらの関数を使用している場合は、[email protected] までメールを送ってください。注記: 直前になって、当面のあいだこれらの関数を残すことを決定しました。 #5780 (alexey-milovidov)
ClickHouse リリース 19.10
ClickHouse リリース 19.10.1.5, 2019-07-12
新機能
- 新しいカラムコーデック
T64を追加。これは (U)IntX/EnumX/Date(Time)/DecimalX カラム向けに作られています。定数もしくは狭い範囲の値を持つカラムに適しています。このコーデックでは、再圧縮なしにデータ型を拡大・縮小できます。#5557 (Artem Zuikov) - リモートの MySQL サーバー上のすべてのテーブルを参照できるデータベースエンジン
MySQLを追加。#5599 (Winter Zhang) bitmapContainsを実装。2 番目のビットマップが 1 要素のみを含む場合、bitmapHasAnyより 2 倍高速です。#5535 (Zhichang Yu)crc32関数をサポート(MySQL や PHP と全く同じ動作)。ハッシュ関数が必要な場合には使用しないでください。#5661 (Remen Ivan)Distributedテーブルへの非同期挿入を制御するために、SYSTEM START/STOP DISTRIBUTED SENDSクエリを実装。#4935 (Winter Zhang)
バグ修正
- ミューテーション実行中は、クエリ実行制限およびマージ制限用のパーツサイズ上限を無視するように修正。#5659 (Anton Popov)
- 通常ブロックの重複排除(極めて稀)や重複ブロックの挿入(より高頻度)を引き起こす可能性のあるバグを修正。#5549 (alesapin)
- 空配列を引数に取る場合の
arrayEnumerateUniqRanked関数の不具合を修正。#5559 (proller) - メッセージをポーリングする意図がない場合には、Kafka トピックを購読しないように変更。#5698 (Ivan)
- Nullable の中に入ることができない型については、設定
join_use_nullsが影響を与えないように修正。#5700 (Olga Khvostikova) Incorrect size of index granularityエラーを修正。#5720 (coraxster)- Float から Decimal への変換時のオーバーフローを修正。#5607 (coraxster)
WriteBufferFromHDFSのデストラクタが呼び出された際にバッファをフラッシュするように変更。これによりHDFSへの書き込みの問題が解消されます。#5684 (Xindong Peng)
改良
- 設定
input_format_defaults_for_omitted_fieldsが有効な場合、CSV内の空セルをデフォルト値として扱います。 #5625 (akuzm) - 外部辞書の非ブロッキング読み込み。 #5567 (Vitaly Baranov)
- ネットワークタイムアウトは、設定に従って、すでに確立されている接続に対して動的に変更できます。 #4558 (Konstantin Podshumok)
- 関数
firstSignificantSubdomain、cutToFirstSignificantSubdomainで "public_suffix_list" を使用。gperfによって生成された完全ハッシュテーブルを、次のファイルから生成されたリストに対して使用します: https://publicsuffix.org/list/public_suffix_list.dat(例えば、現在ではドメインac.ukを重要でないドメインとして認識します)。 #5030 (Guillaume Tassery) - system テーブルで
IPv6データ型を採用し、system.processesとsystem.query_logのクライアント情報列を統一しました。 #5640 (alexey-milovidov) - MySQL 互換プロトコルでの接続にセッションを使用。#5476 #5646 (Yuriy Baranov)
- より多くの
ALTERクエリでのON CLUSTERをサポート。 #5593 #5613 (sundyli) clickhouse-localの設定ファイルで<logger>セクションをサポート。 #5540 (proller)clickhouse-localでremoteテーブル関数を使ったクエリを実行可能にしました。 #5627 (proller)
パフォーマンス改善
- MergeTree 列の末尾に最終マークを書き込む機能を追加しました。これにより、テーブルデータ範囲外のキーに対する不要な読み取りを回避できます。これは、アダプティブインデックス粒度が使用されている場合にのみ有効です。 #5624 (alesapin)
statシステムコールの回数を減らすことで、非常に遅いファイルシステム上での MergeTree テーブルのパフォーマンスを改善しました。 #5648 (alexey-milovidov)- バージョン 19.6 で導入された、MergeTree テーブルからの読み取りにおけるパフォーマンス低下を修正しました。#5631 を修正。 #5633 (alexey-milovidov)
ビルド/テスト/パッケージングの改善
- テスト用の ZooKeeper インターフェイス実装として
TestKeeperを導入しました #5643 (alexey-milovidov) (levushkin aleksej) - 今後、
.sqlテストはサーバーごとに分離し、並列かつランダムなデータベース名で実行できるようになりました。これにより、テストをより高速に実行し、カスタムサーバー構成を使用した新しいテストを追加しつつ、異なるテスト同士が互いに影響しないことを保証できます。 #5554 (Ivan) - パフォーマンス テストから
<name>と<metrics>を削除しました #5672 (Olga Khvostikova) Prettyフォーマット向けの「select_format」パフォーマンス テストを修正しました #5642 (alexey-milovidov)
ClickHouse Release 19.9
ClickHouse Release 19.9.3.31, 2019-07-05
バグ修正
- 32 ビット未満のサイズの値を持つカラムに影響する Delta codec のセグメンテーションフォルトを修正。このバグにより、ランダムなメモリ破壊が発生していました。 #5786 (alesapin)
- LowCardinality カラムを持つパーツのチェックにおけるまれなバグを修正。 #5832 (alesapin)
- ブロック内の非物理カラムを含む TTL マージでのセグメンテーションフォルトを修正。 #5819 (Anton Popov)
- 低優先度クエリが無限にスリープしうる可能性を修正。 #5842 (alexey-milovidov)
- ClickHouse がデフォルトのタイムゾーンを UTC ではなく UCT と誤判定していた問題を修正。 #5828 (alexey-milovidov)
- フォロワーレプリカで、リーダーレプリカより先に分散
DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTERクエリが実行されるバグを修正。現在は、それらは直接リーダーレプリカ上で実行されます。 #5757 (alesapin) SYSTEM FLUSH LOGSクエリの直後に、一部のクエリがquery_logに即座に現れない原因となっていたレースコンディションを修正。 #5685 (Anton Popov)evalMLModel関数で、これまで未対応だった定数引数のサポートを追加。 #5820 (alexey-milovidov)
ClickHouse Release 19.9.2.4, 2019-06-24
新機能
system.partsテーブルで、フリーズされたパーツに関する情報を出力。 #5471 (proller)- 引数でパスワードが設定されていない場合、TTY 上で
clickhouse-client起動時にクライアントのパスワードを問い合わせるように変更。 #5092 (proller) - Decimal 型に対する
dictGetおよびdictGetOrDefault関数を実装。 #5394 (Artem Zuikov)
改良
- Debian init: サービス停止タイムアウトを追加。 #5522 (proller)
- LowCardinality 用の疑わしい型を持つテーブル作成を、デフォルトで禁止する設定を追加。 #5448 (Olga Khvostikova)
- 回帰関数が、
evalMLMethod関数内で State として使用されていない場合にモデルの重みを返すように変更。 #5411 (Quid37) - 回帰メソッドの名称変更と改善。 #5492 (Quid37)
- 文字列検索器のインターフェースをより明確に改善。 #5586 (Danila Kutenin)
バグ修正
- Kafka での潜在的なデータ損失を修正 #5445 (Ivan)
PrettySpaceフォーマットが列数 0 で呼び出された場合に発生する可能性のある無限ループを修正 #5560 (Olga Khvostikova)- 線形モデルにおける UInt32 のオーバーフローのバグを修正。非 const の model 引数に対して ML モデルの eval を許可。 #5516 (Nikolai Kochetov)
- 指定したインデックスが存在しない場合、
ALTER TABLE ... DROP INDEX IF EXISTS ...は例外を発生させないようになりました #5524 (Gleb Novikov) - スカラーサブクエリ内の
bitmapHasAnyによるセグメンテーションフォルトを修正 #5528 (Zhichang Yu) - DNS キャッシュが破棄された場合でも、レプリケーション接続プールがホスト名の再解決を再試行しない不具合を修正。 #5534 (alesapin)
- ReplicatedMergeTree での
ALTER ... MODIFY TTLの動作を修正しました。 #5539 (Anton Popov) - MATERIALIZED 列を含む Distributed テーブルへの INSERT を修正 #5429 (Azat Khuzhin)
- Join ストレージの TRUNCATE 時に発生する bad alloc エラーを修正 #5437 (TCeason)
- 最近のバージョンの tzdata パッケージでは、一部のファイルがシンボリックリンクになっています。デフォルトのタイムゾーンを検出する現在の仕組みが動作しなくなり、一部のタイムゾーンに対して誤った名前を返すようになっています。少なくとも現時点では、TZ が指定されている場合、その内容をタイムゾーン名として強制的に使用するようにしました。 #5443 (Ivan)
sum内の定数 needle の合計長が少なくとも 16KB になる場合に発生する、MultiVolnitsky searcher におけるごくまれな不具合を修正しました。アルゴリズムが以前の結果を見逃したり上書きしてしまい、その結果としてmultiSearchAnyが誤った結果を返す可能性がありました。 #5588 (Danila Kutenin)- ExternalData リクエストの設定で ClickHouse の設定を使用できなかった問題を修正しました。また、現時点では名前が紛らわしいため、設定
date_time_input_formatとlow_cardinality_allow_in_native_formatは使用できません(外部データ側ではテーブルフォーマットとして解釈され得る一方で、クエリ側では設定として解釈され得るため)。 #5455 (Danila Kutenin) - パーツが ZooKeeper からドロップされず、ファイルシステム (FS) からのみ削除されていたバグを修正。 #5520 (alesapin)
- MySQL プロトコルからデバッグロギングを削除 #5478 (alexey-milovidov)
- DDL クエリ処理中に ZNONODE を無視 #5489 (Azat Khuzhin)
UNION ALLの結果列の型の混在を修正しました。結果列のデータおよびカラム型に不整合が生じるケースがありました。 #5503 (Artem Zuikov)dictGetT関数で誤った整数値が渡された場合、クラッシュするのではなく例外をスローするようにしました。 #5446 (Artem Zuikov)system.dictionariesテーブルのハッシュ辞書における誤ったelement_countとload_factorの値を修正。 #5440 (Azat Khuzhin)
ビルド/テスト/パッケージングの改善
BrotliHTTP 圧縮サポートなし(cmake 変数ENABLE_BROTLI=OFF)でのビルドを修正。#5521 (Anton Yuzhaninov)- roaring.h を roaring/roaring.h としてインクルード。#5523 (Orivej Desh)
- hyperscan における gcc9 の警告を修正(
#lineディレクティブは悪だ!)。#5546 (Danila Kutenin) - gcc-9 でコンパイルしたときのすべての警告を修正。一部の contrib の問題を修正。gcc9 の ICE を修正し、bugzilla に報告。#5498 (Danila Kutenin)
- lld でのリンクを修正。#5477 (alexey-milovidov)
- 辞書内の未使用の特殊化を削除。#5452 (Artem Zuikov)
- 異なる種類のファイルに対するテーブルのフォーマットおよびパースのパフォーマンステストを改善。#5497 (Olga Khvostikova)
- 並列テスト実行に関する修正。#5506 (proller)
- Docker: clickhouse-test の設定を使用。#5531 (proller)
- FreeBSD でのビルドを修正。#5447 (proller)
- Boost を 1.70 にアップグレード。#5570 (proller)
- サブモジュールとしての ClickHouse のビルドを修正。#5574 (proller)
- JSONExtract のパフォーマンステストを改善。#5444 (Vitaly Baranov)
ClickHouse リリース 19.8
ClickHouse リリース 19.8.3.8, 2019-06-11
新機能
- JSON を扱うための関数を追加しました。#4686 (hcz) #5124 (Vitaly Baranov)
- 多くの言語に存在する
basename関数(Python のos.path.basename、PHP のbasenameなど)と同様の挙動をする関数basenameを追加しました。UNIX 系パスと Windows パスの両方で動作します。 #5136 (Guillaume Tassery) LIMIT BY句に対してオフセット n を指定できるよう、LIMIT n, m BYまたはLIMIT m OFFSET n BY構文を追加しました。 #5138 (Anton Popov)AggregatingMergeTree内で軽量な集約を行う列を定義できる新しいデータ型SimpleAggregateFunctionを追加しました。これはany、anyLast、sum、min、maxのような単純な関数でのみ使用できます。 #4629 (Boris Granveaud)- 関数
ngramDistanceで非定数引数をサポートしました #5198 (Danila Kutenin) skewPop、skewSamp、kurtPopおよびkurtSamp関数を追加し、それぞれ母集団歪度、標本歪度、母集団尖度、標本尖度を計算できるようにしました。 #5200 (hcz)MaterializeViewストレージでのリネーム操作をサポート。 #5209 (Guillaume Tassery)- MySQL クライアントを使用して ClickHouse に接続できるサーバーを追加しました。 #4715 (Yuriy Baranov)
toDecimal*OrZeroとtoDecimal*OrNull関数を追加しました。 #5291 (Artem Zuikov)- 関数
quantile、quantiles、median、quantileExactWeighted、quantilesExactWeighted、medianExactWeightedに Decimal 型のサポートを追加。 #5304 (Artem Zuikov) - 無効な UTF-8 文字をすべて置換文字 � (U+FFFD) に置き換える
toValidUTF8関数を追加しました。 #5322 (Danila Kutenin) format関数を追加しました。引数で指定した文字列を用いて、定数パターン(簡略化された Python の format パターン)を整形します。 #5330 (Danila Kutenin)MergeTreeテーブルのデタッチされたパーツに関する情報を含むsystem.detached_partsテーブルを追加しました。 #5353 (akuzm)needleとhaystackの間の非対称な差分を計算するngramSearch関数を追加しました。 #5418#5422 (Danila Kutenin)- 集約関数インターフェイスを使用した基本的な機械学習手法(確率的線形回帰およびロジスティック回帰)の実装。モデルの重みを更新するためのさまざまな戦略(単純な勾配降下法、モメンタム法、Nesterov 法)をサポートします。任意のサイズのミニバッチにも対応しています。 #4943 (Quid37)
geohashEncodeおよびgeohashDecode関数の実装。#5003 (Vasily Nemkov)- 集約関数
timeSeriesGroupSumを追加しました。これは、サンプリング時刻(タイムスタンプ)が揃っていない異なる時系列を集約できます。2 つのサンプルタイムスタンプ間を線形補間し、その後に時系列を合算します。さらに、時系列のレート(変化率)を計算し、そのレートを合算する集約関数timeSeriesGroupRateSumを追加しました。 #4542 (Yangkuan Liu) - CIDR を使用してサブネット内の IP アドレスの下限値および上限値を計算する関数
IPv4CIDRtoIPv4RangeとIPv6CIDRtoIPv6Rangeを追加しました。 #5095 (Guillaume Tassery) - HTTP でクエリを送信する際に
send_progress_in_http_headers設定が有効な場合に、X-ClickHouse-Summaryヘッダーを追加します。通常のX-ClickHouse-Progressと同様の情報に加え、そのクエリで挿入された行数やバイト数などの追加情報を返します。 #5116 (Guillaume Tassery)
改善点
- MergeTree ファミリーのテーブルに、パーティションキーの危険な指定を防止する
max_parts_in_total設定(デフォルト: 100 000)を追加しました #5166。 #5171 (alexey-milovidov) clickhouse-obfuscator: 初期シード値とカラム名を組み合わせて、カラムの位置ではなく各カラム固有のシード値を導出します。これは複数の関連テーブルからなるデータセットを変換することを想定しており、変換後もテーブル同士を JOIN 可能な状態に保つためのものです。 #5178 (alexey-milovidov)- 関数
JSONExtractRaw、JSONExtractKeyAndValuesを追加しました。関数jsonExtract<type>をJSONExtract<type>にリネームしました。問題が発生した場合、これらの関数はNULLではなく対応する値を返します。関数JSONExtractを変更し、最後の引数から戻り値の型を取得し、Nullable を注入しないようにしました。AVX2 命令が利用できない場合は RapidJSON を用いるフォールバックを実装しました。Simdjson ライブラリを新しいバージョンに更新しました。#5235(Vitaly Baranov) ifおよびmultiIf関数は、条件式のNullableには依存せず、SQL との互換性のために分岐に依存するようになりました。 #5238 (Jian Wu)In述語は、Equal関数と同様に、Null入力に対してNull結果を返すようになりました。 #5152 (Jian Wu)- Kafka からの読み込みにおいて、(flush_interval / poll_timeout) 行ごとに時間制限を確認するようにしました。これにより、Kafka コンシューマからの読み取りをより頻繁に区切り、トップレベルのストリームの時間制限を確認できるようになります #5249 (Ivan)
- 同梱の SASL と rdkafka をリンクしました。これにより SASL SCRAM 認証を利用できるようになります #5253 (Ivan)
- ALL JOINS 用の RowRefList のバッチ処理版。 #5267 (Artem Zuikov)
- clickhouse-server: listen エラー発生時のメッセージをより詳細にしました。 #5268 (proller)
- clickhouse-copier において
<sharding_key>内の関数で辞書をサポート #5270 (proller) - Kafka のコミットポリシーを制御するための新しい設定
kafka_commit_every_batchを追加しました。 この設定では、各メッセージバッチの処理が終わるたびにコミットするか、ストレージにブロック全体を書き込んだ後にコミットするかのモードを指定できます。これは、一部のメッセージを失う可能性と、極端な状況で同じメッセージを重複して読み取る可能性とのトレードオフです。 #5308 (Ivan) windowFunnelが他の符号なし整数型にも対応しました。 #5320 (sundyli)- Merge エンジンで仮想カラム
_tableをシャドー(上書き)できるようにしました。 #5325 (Ivan) sequenceMatch集約関数が他の符号なし整数型にも対応するようにする #5339 (sundyli)- チェックサムの不一致がハードウェア障害に起因している可能性が高い場合に、より分かりやすいエラーメッセージが表示されるように改善しました。 #5355 (alexey-milovidov)
- 基盤となるテーブルが
StorageMerge用のサンプリングをサポートしていることを確認する #5366 (Ivan) - 外部辞書での使用後に MySQL 接続をクローズするよう変更しました。これは issue #893 に関連しています。 #5395 (Clément Rodriguez)
- MySQL Wire プロトコルの改善。フォーマット名を MySQLWire に変更。RSA_free を呼び出すために RAII を使用。コンテキストを作成できない場合は SSL を無効化するよう変更。 #5419 (Yuriy Baranov)
- clickhouse-client: 履歴ファイルにアクセスできない状態(読み取り専用、ディスク容量不足、ファイルがディレクトリである場合など)でも実行できるようにしました。 #5431 (proller)
- Distributed テーブルへの非同期 INSERT でクエリ設定が反映されるようになりました。 #4936 (TCeason)
- 関数
leastSqrをsimpleLinearRegression、LinearRegressionをlinearRegression、LogisticRegressionをlogisticRegressionに名前変更しました。 #5391 (Nikolai Kochetov)
パフォーマンスの改善
- 非レプリケートの MergeTree テーブルのパーツ処理を
ALTER MODIFYクエリで並列化。#4639 (Ivan Kush) - 正規表現による抽出処理を最適化。#5193 #5191 (Danila Kutenin)
JOIN ON句でのみ使用されている場合は、右側の結合キー列を結合結果に追加しないように変更。#5260 (Artem Zuikov)- 最初の空レスポンス後に Kafka バッファをフリーズするように変更。これにより、一部の行パースストリームで空結果に対して
ReadBuffer::next()が複数回呼ばれることを防止。#5283 (Ivan) - 複数引数に対する
concat関数を最適化。#5357 (Danila Kutenin) - クエリ最適化。カンマ結合/クロス結合を内部結合に書き換える際に、
IN句のプッシュダウンを許可。#5396 (Artem Zuikov) - LZ4 実装をリファレンス実装と同等のものに更新し、伸長処理を高速化。#5070 (Danila Kutenin)
- MSD radix sort(kxsort ベース)と部分ソートを実装。#5129 (Evgenii Pravda)
バグ修正
JOINにおける必須列のプッシュダウン処理を修正。#5192 (Winter Zhang)- ClickHouse を systemd で実行している場合に、
sudo service clickhouse-server forcerestartコマンドが期待どおりに動作しなかったバグを修正。#5204 (proller) - DataPartsExchange における HTTP エラーコードを修正(ポート 9009 のインターサーバー HTTP サーバーが、エラー時でも常にコード 200 を返していた問題)。#5216 (proller)
StringがMAX_SMALL_STRING_SIZEより長い場合のSimpleAggregateFunctionを修正。#5311 (Azat Khuzhin)INにおけるDecimalからNullable(Decimal)への変換エラーを修正。その他の Decimal 間の変換(スケールが異なる場合を含む)をサポート。#5350 (Artem Zuikov)- simdjson ライブラリでの FPU レジスタ破壊が原因で、
uniqHLLやuniqCombined集約関数、およびlogなどの数学関数が誤った計算結果となっていた問題を修正。#5354 (alexey-milovidov) - JSON 関数における定数/非定数が混在するケースの処理を修正。#5435 (Vitaly Baranov)
retention関数を修正。現在は、データの 1 行において満たされるすべての条件がデータ状態に追加されるようになっている。#5119 (小路)quantileExactの Decimals 使用時の結果型を修正。#5304 (Artem Zuikov)
ドキュメント
CollapsingMergeTreeのドキュメントを中国語に翻訳しました。 #5168 (张风啸)- テーブルエンジンに関する一部のドキュメントを中国語に翻訳しました。 #5134 #5328 (never lee)
ビルド/テスト/パッケージングの改善
- use-after-free が発生している可能性を示すいくつかのサニタイザーのレポートを修正しました。#5139 #5143 #5393 (Ivan)
- 利便性のため、パフォーマンステストを個別ディレクトリから移動しました。 #5158 (alexey-milovidov)
- 誤ったパフォーマンステストを修正しました。 #5255 (alesapin)
- ハードウェアの問題をデバッグするため、ビット反転によるチェックサムエラーを計算するツールを追加しました。 #5334 (alexey-milovidov)
- runner スクリプトをより使いやすくしました。 #5340#5360 (filimonov)
- パフォーマンステストの書き方に関する簡単な手順を追加しました。 #5408 (alesapin)
- パフォーマンステストにおいて、create / fill / drop クエリ内で置換を行える機能を追加しました。 #5367 (Olga Khvostikova)
ClickHouse リリース 19.7
ClickHouse リリース 19.7.5.29, 2019-07-05
バグ修正
- 一部の JOIN を含むクエリで発生していたパフォーマンス低下を修正。 #5192 (Winter Zhang)
ClickHouse リリース 19.7.5.27, 2019-06-09
新機能
- ビットマップ関連の関数
bitmapHasAnyおよびbitmapHasAllを追加。配列用の関数hasAnyおよびhasAllと同等の機能を提供。 #5279 (Sergi Vladykin)
バグ修正
minmaxINDEX に Null 値がある場合に発生するセグメンテーションフォールトを修正。#5246 (Nikita Vasilev)- LIMIT BY 内のすべての入力カラムを出力必須としてマークするように変更。一部の分散クエリで発生していた「Not found column」エラーを修正。#5407 (Constantin S. Pan)
- DEFAULT を持つカラムに対する
SELECT .. PREWHEREで発生する "Column '0' already exists" エラーを修正。#5397 (proller) ReplicatedMergeTreeに対するALTER MODIFY TTLクエリを修正。#5539 (Anton Popov)- Kafka コンシューマが起動に失敗した場合にサーバーがクラッシュしないように修正。#5285 (Ivan)
- ビットマップ関数が誤った結果を返す問題を修正。#5359 (Andy Yang)
- ハッシュディクショナリの element_count を修正(重複を含めないように変更)。#5440 (Azat Khuzhin)
- タイムゾーン名として環境変数 TZ の内容を使用するように変更。一部のケースでデフォルトタイムゾーンを正しく検出できるようにした。#5443 (Ivan)
dictGetT関数内で整数の変換を試みないように変更(正しく動作しないため)。代わりに例外をスローするようにした。#5446 (Artem Zuikov)- ExternalData HTTP リクエスト内の設定を修正。#5455 (Danila Kutenin)
- パーツがファイルシステムからのみ削除され、ZooKeeper からは削除されない不具合を修正。#5520 (alesapin)
bitmapHasAny関数でのセグメンテーションフォールトを修正。#5528 (Zhichang Yu)- レプリケーション接続プールが、DNS キャッシュが破棄された後でもホストの解決を再試行しないエラーを修正。#5534 (alesapin)
DROP INDEX IF EXISTSクエリを修正。これにより、指定されたインデックスが存在しない場合でも、ALTER TABLE ... DROP INDEX IF EXISTS ...クエリが例外をスローしないようになった。#5524 (Gleb Novikov)UNION ALLのスーパータイプのカラムを修正。結果カラムでデータおよびカラム型が不整合となるケースがあった。#5503 (Artem Zuikov)- DDL クエリ処理中に ZNONODE をスキップするように修正。以前は、別のノードがタスクキュー内の znode を削除した場合、そのタスクをまだ処理していないが、すでに子ノード一覧を取得していたノードが DDLWorker スレッドを終了させていた。#5489 (Azat Khuzhin)
- MATERIALIZED カラムを持つ Distributed() テーブルへの INSERT を修正。#5429 (Azat Khuzhin)
ClickHouse Release 19.7.3.9, 2019-05-30
新機能
- ユーザーが指定できる設定値の範囲を制限できるようにしました。 これらの制約はユーザー設定プロファイルで構成できます。 #4931 (Vitaly Baranov)
- 結果配列のサイズを制限するためのオプションの
max_sizeパラメータを持つ関数groupUniqArrayの第 2 バージョンを追加しました。 この動作はgroupArray(max_size)(x)関数と同様です。 #5026 (Guillaume Tassery) - TSVWithNames/CSVWithNames 入力ファイル形式において、カラム順序をファイルヘッダから判定できるようにしました。
これは
input_format_with_names_use_headerパラメータで制御されます。 #5081 (Alexander)
バグ修正
- merge 中の uncompressed_cache + JOIN によるクラッシュ (#5197) #5133 (Danila Kutenin)
- system テーブルに対する clickhouse-client クエリでセグメンテーションフォルトが発生する問題。#5066 #5127 (Ivan)
- KafkaEngine 経由の高負荷時に発生するデータ損失 (#4736) #5080 (Ivan)
- 少なくとも 2 つ以上の system.columns、system.tables、system.parts、system.parts_tables、または Merge ファミリーのテーブルからの SELECT を含む UNION ALL クエリを実行している際に、関連テーブルのカラムに対する ALTER を同時に実行すると、ごくまれに発生しうるデータレース状態を修正しました。#5189 (alexey-milovidov)
パフォーマンスの改善
LIMITなしで単一の数値カラムによるORDER BYを行う場合に、ソートに radix ソートを使用するようにしました。 #5106, #4439 (Evgenii Pravda, alexey-milovidov)
ドキュメント
ビルド/テスト/パッケージングの改善
clickhouse-testで UTF-8 文字を正しく出力するようにする。 #5084 (alexey-milovidov)- clickhouse-client に、サジェストデータを常に読み込むためのコマンドラインパラメータを追加。 #5102 (alexey-milovidov)
- 一部の PVS-Studio 警告を解消。 #5082 (alexey-milovidov)
- LZ4 を更新。 #5040 (Danila Kutenin)
- 今後のプルリクエスト #5030 に備えて、ビルド要件に gperf を追加。 #5110 (proller)
ClickHouse リリース 19.6
ClickHouse リリース 19.6.3.18, 2019-06-13
バグ修正
- テーブル関数
mysqlとodbcおよびそれに対応するテーブルエンジンに対するクエリで、IN 条件のプッシュダウンを修正しました。これにより #3540 と #2384 が解決されます。 #5313 (alexey-milovidov) - Zookeeper におけるデッドロックを修正しました。 #5297 (github1youlc)
- CSV で引用符付きの 10 進数を許可しました。 #5284 (Artem Zuikov
- float の Inf/NaN から Decimals への変換を禁止しました(例外をスローします)。 #5282 (Artem Zuikov)
- rename クエリでのデータレースを修正しました。 #5247 (Winter Zhang)
- 一時的に LFAlloc を無効化しました。LFAlloc を使用すると、UncompressedCache の割り当て時に多数の MAP_FAILED が発生し、その結果、高負荷のサーバー上でクエリがクラッシュする可能性があります。 cfdba93(Danila Kutenin)
ClickHouse リリース 19.6.2.11, 2019-05-13
新機能
- カラムおよびテーブルに対する TTL 式をサポートしました。 #4212 (Anton Popov)
- HTTP レスポンスに対する
brotli圧縮(Accept-Encoding: br)のサポートを追加しました。 #4388 (Mikhail) - バイト列が正しく UTF-8 エンコードされているかを検証するための新しい関数
isValidUTF8を追加しました。 #4934 (Danila Kutenin) - 新しいロードバランシングポリシー
first_or_randomを追加しました。これは、クエリをまず最初に指定されたホストへ送信し、それが到達不能な場合はシャード内のランダムなホストへクエリを送信します。クロスレプリケーションのトポロジ構成に有用です。 #5012 (nvartolomei)
実験的機能
改善点
- 関数
substringUTF8に対して、非定数および負の size / length 引数のサポートを追加。 #4989 (alexey-milovidov) - LEFT JOIN における右テーブル、RIGHT JOIN における左テーブル、FULL JOIN における両テーブルへのプッシュダウンを無効化。これにより一部のケースで発生していた誤った JOIN 結果を修正。 #4846 (Ivan)
clickhouse-copier:--task-fileオプションからタスク設定を自動的にアップロードする機能を追加。 #4876 (proller)- storage factory および table functions factory 向けのタイポハンドラーを追加。 #4891 (Danila Kutenin)
- サブクエリを使わない複数の JOIN に対して、アスタリスクおよび修飾アスタリスクをサポート。 #4898 (Artem Zuikov)
- 存在しないカラムに対するエラーメッセージをよりユーザーフレンドリーに改善。 #4915 (Artem Zuikov)
パフォーマンスの改善
- ASOF JOIN を大幅に高速化。 #4924 (Martijn Bakker)
後方互換性のない変更
バグ修正
clickhouse-copier内で発生しうるヌルポインタ参照を修正。 #4900 (proller)- JOIN + ARRAY JOIN を含むクエリでのエラーを修正。 #4938 (Artem Zuikov)
- engine=Dictionary のデータベースを介して、ある辞書が別の辞書に依存している場合に、サーバー起動時にハングする問題を修正。 #4962 (Vitaly Baranov)
distributed_product_mode = localを部分的に修正。テーブルエイリアスを用いることで、WHERE/HAVING/ORDER BY/... でローカルテーブルのカラムを使用できるようにした。テーブルにエイリアスがない場合は例外をスローする。現時点ではテーブルエイリアスなしでカラムへアクセスすることはまだできない。 #4986 (Artem Zuikov)JOINを伴うSELECT DISTINCTで結果が誤る可能性がある問題を修正。 #5001 (Artem Zuikov)- 少なくとも 2 つの SELECT が system.columns、system.tables、system.parts、system.parts_tables、あるいは Merge 系のテーブルからの SELECT を含む UNION ALL クエリを実行中に、関連テーブルのカラムに対する ALTER を同時に実行した場合に、ごくまれに発生しうるデータレース状態を修正。 #5189 (alexey-milovidov)
ビルド / テスト / パッケージングの改善
- 異なるホスト上で clickhouse-server を実行した際のテスト失敗を修正しました #4713 (Vasily Nemkov)
- clickhouse-test: 非TTY環境でカラー制御シーケンスを無効化しました #4937 (alesapin)
- clickhouse-test: 任意のテストデータベースを使用できるようにし、可能な箇所では
test.修飾子を削除しました #5008 (proller) - ubsan エラーを修正しました #5037 (Vitaly Baranov)
- Yandex LFAlloc を ClickHouse に追加し、MarkCache と UncompressedCache のデータを異なる方法で確保することで、セグメンテーションフォルトをより確実に検出できるようにしました #4995 (Danila Kutenin)
- バックポートおよびチェンジログ作成を支援する Python ユーティリティを追加しました #4949 (Ivan)
ClickHouse リリース 19.5
ClickHouse リリース 19.5.4.22, 2019-05-13
バグ修正
- bitmap* 関数で発生しうるクラッシュを修正しました。 #5220 #5228 (Andy Yang)
- 次の条件で発生しうる、非常にまれなデータレースを修正しました。
system.columns、system.tables、system.parts、system.parts_tablesまたは Merge ファミリのテーブルからの少なくとも 2 つのSELECTを含むUNION ALLを実行している最中に、関連するテーブルのカラムに対してALTERを並行して実行した場合です。 #5189 (alexey-milovidov) - エラー
Set for IN is not created yet in case of using single LowCardinality column in the left part of INを修正しました。このエラーは、LowCardinalityカラムが主キーの一部である場合に発生していました。 #5031 #5154 (Nikolai Kochetov) retention関数の動作を変更しました。以前は、ある行が最初の条件と N 番目の条件の両方を満たす場合、データ状態には最初に満たされた条件だけが追加されていました。現在は、その行で満たされるすべての条件がデータ状態に追加されます。 #5119 (小路)
ClickHouse リリース 19.5.3.8, 2019-04-18
バグ修正
- 設定
max_partitions_per_insert_blockの型を boolean から UInt64 に修正しました。 #5028 (Mohammad Hossein Sekhavat)
ClickHouse リリース 19.5.2.6, 2019-04-15
新機能
- Hyperscan による複数の正規表現マッチングが追加されました(関数
multiMatchAny、multiMatchAnyIndex、multiFuzzyMatchAny、multiFuzzyMatchAnyIndex)。 #4780, #4841 (Danila Kutenin) - 関数
multiSearchFirstPositionが追加されました。 #4780 (Danila Kutenin) - テーブルに対して、行ごとの事前定義済み式フィルタを実装しました。 #4792 (Ivan)
- Bloom filter に基づく新しい種類のデータスキップインデックスを追加しました(
equal、in、like関数で使用可能)。 #4499 (Nikita Vasilev) - 直近の既知の値に対して JOIN するクエリを実行できる
ASOF JOINを追加しました。 #4774 #4867 #4863 #4875 (Martijn Bakker, Artem Zuikov) - 複数の
COMMA JOINをCROSS JOINに書き換えるようにしました。さらに、可能であればINNER JOINに書き換えます。 #4661 (Artem Zuikov)
改善
topKとtopKWeightedでカスタムloadFactorをサポートしました(issue #4252 を修正)。#4634 (Kirill Danshin)- サンプリングなしのテーブルでも
parallel_replicas_count > 1を使用できるようにしました(そのようなテーブルではこの設定は単に無視されます)。以前のバージョンでは例外が発生していました。#4637 (Alexey Elymanov) CREATE OR REPLACE VIEWをサポートしました。1つのステートメントでビューの作成と新しい定義の設定を行えるようになりました。#4654 (Boris Granveaud)BufferテーブルエンジンがPREWHEREをサポートしました。#4671 (Yangkuan Liu)- ZooKeeper にメタデータが存在しない状態でも、
readonlyモードでレプリケーテッドテーブルを起動できるようにしました。#4691 (alesapin) - clickhouse-client におけるプログレスバーのちらつきを修正しました。この問題は、ストリーミングクエリで
FORMAT Nullを使用した場合に最も顕著でした。#4811 (alexey-milovidov) - 潜在的に過剰かつ制御不能なリソース使用を抑制するため、ユーザーごとに
hyperscanライブラリを用いる関数を無効化できるようにしました。#4816 (alexey-milovidov) - すべてのエラーにバージョン番号のロギングを追加しました。#4824 (proller)
multiMatch関数に対し、文字列サイズがunsigned intに収まることを要求する制約を追加しました。また、multiSearch関数には引数数の上限を追加しました。#4834 (Danila Kutenin)- Hyperscan におけるスクラッチ領域の利用方法とエラーハンドリングを改善しました。#4866 (Danila Kutenin)
*GraphiteMergeTreeエンジンのテーブル設定に基づいてsystem.graphite_detentionsを埋めるようにしました。#4584 (Mikhail f. Shiryaev)trigramDistance関数の名称をngramDistanceに変更し、CaseInsensitiveおよびUTFを伴う追加の関数を追加しました。#4602 (Danila Kutenin)- データスキッピングインデックスの計算を改善しました。#4640 (Nikita Vasilev)
- 通常のカラム、
DEFAULT、MATERIALIZED、ALIASカラムを単一のリストとして保持するようにしました(issue #2867 を修正)。#4707 (Alex Zatelepin)
バグ修正
- メモリ割り当て失敗時に
std::terminateが呼び出されないようにしました。これにより、期待どおりstd::bad_alloc例外がスローされるようになりました。 #4665 (alexey-milovidov) - バッファからの読み込み時の
capnprotoの処理を修正。HTTP 経由でファイルが正常に読み込まれないことがある問題を修正。#4674 (Vladislav) OPTIMIZE TABLE FINALクエリ実行後に発生するエラーUnknown log entry type: 0を修正。 #4683 (Amos Bird)hasAnyまたはhasAll関数に誤った引数を指定すると、セグメンテーションフォルトが発生する可能性があります。 #4698 (alexey-milovidov)DROP DATABASE dictionaryクエリの実行中にデッドロックが発生する可能性があります。 #4701 (alexey-milovidov)median関数およびquantile関数における未定義の動作を修正。#4702 (hcz)network_compression_methodが小文字指定の場合の圧縮レベル検出を修正。v19.1 で正しく動作していなかった不具合。#4706 (proller)<timezone>UTC</timezone>設定が無視されていた問題を修正しました(issue #4658 に対応)。#4718(proller)Distributedテーブルにおけるhistogram関数の挙動を修正。 #4741 (olegkv)destroy of a locked mutexに関する TSan レポートを修正しました。 #4742 (alexey-milovidov)- system logs の使用における競合状態が原因で、シャットダウン時に発生していた TSan レポートを修正。part_log が有効な場合にシャットダウン時に発生する可能性のあった use-after-free を修正。#4758 (alexey-milovidov)
- エラー発生時に
ReplicatedMergeTreeAlterThreadにおけるパーツの再チェック処理を修正。 #4772 (Nikolai Kochetov) - 集約関数の中間状態に対する算術演算が、(サブクエリ結果などの)定数引数では動作していませんでした。 #4776 (alexey-milovidov)
- メタデータ内のカラム名は常にバッククォートで囲んでください。そうしないと、
indexという名前のカラムを持つテーブルを作成できません(メタデータ内の形式不正なATTACHクエリが原因でサーバーが再起動しなくなります)。 #4782 (alexey-milovidov) DistributedテーブルでのALTER ... MODIFY ORDER BY実行時に発生していたクラッシュを修正。 #4790 (TCeason)enable_optimize_predicate_expressionが有効な場合にJOIN ONで発生するセグメンテーションフォールトを修正。 #4794 (Winter Zhang)- Kafka から Protobuf メッセージを読み込んだ後に余分な行が追加される不具合を修正。 #4808 (Vitaly Baranov)
JOINが not-nullable 列と nullable 列を扱う際にクラッシュする問題を修正しました。ANY JOINとjoin_use_nullsにおける右側キーのNULLの扱いを修正しました。#4815 (Artem Zuikov)clickhouse-copierにおけるセグメンテーションフォルトを修正。 #4835 (proller)- テーブルが並行してリネームまたは変更された場合の、
system.tablesからのSELECTにおける競合状態を修正しました。 #4836 (alexey-milovidov) - 既に無効になっているデータパートを取得する際に発生していたデータレースを修正しました。 #4839 (alexey-milovidov)
- MergeTree ファミリーのテーブルに対する
RENAME実行中にまれに発生しうるデータレースを修正しました。 #4844 (alexey-milovidov) arrayIntersect関数で発生していたセグメンテーションフォルトを修正しました。定数引数と通常の引数が混在した状態で関数が呼び出されると、セグメンテーションフォルトが発生する場合がありました。 #4847 (Lixiang Qian)Array(LowCardinality)列において、列に空配列が長く連続して含まれているというまれなケースでの読み取り処理を修正しました。 #4850 (Nikolai Kochetov)- NULL 許容と非 NULL 許容のカラムを結合条件に含む
FULL/RIGHT JOINがクラッシュする問題を修正。 #4855 (Artem Zuikov) - レプリカ間でパーツを取得する際に発生していた
No message received例外を修正。 #4856 (alesapin) - 単一の配列内に同じ値が複数回出現する場合に、
arrayIntersect関数が誤った結果を返す問題を修正しました。 #4871 (Nikolai Kochetov) - 同時に実行される
ALTER COLUMNクエリ間で発生しうるレースコンディションを修正し、サーバーがクラッシュする可能性があった問題を解消しました(issue #3421 を修正)。#4592 (Alex Zatelepin) - 定数カラムを含む
FULL/RIGHT JOINで誤った結果が返される問題を修正。 #4723 (Artem Zuikov) GLOBAL JOINにおけるアスタリスク指定時の重複を修正。 #4705 (Artem Zuikov)- カラム型が指定されていない場合の
ALTER MODIFYにおけるCODECカラムのパラメータ推論を修正。 #4883 (alesapin) URLにフラグメントが含まれ、クエリが存在しない場合にも、関数cutQueryStringAndFragment()とqueryStringAndFragment()が正しく動作するようになりました。 #4894 (Vitaly Baranov)min_bytes_to_use_direct_ioを 0 より大きい値に設定した際に、スレッドがカラムファイル内で後方にシークする必要が生じた場合に発生するまれなバグを修正。 #4897 (alesapin)LowCardinality引数を持つ集約関数での誤った引数型を修正しました(issue #4919 を修正)。#4922(Nikolai Kochetov)GLOBAL JOINにおける不正な名前修飾を修正。 #4969 (Artem Zuikov)- 1970 年に対する関数
toISOWeekの結果を修正。 #4988 (alexey-milovidov) ReplicatedMergeTree*テーブルファミリーに対してON CLUSTERで実行された場合に、DROP、TRUNCATE、OPTIMIZEクエリが重複して実行される不具合を修正。 #4991 (alesapin)
後方互換性のない変更
- 設定
insert_sample_with_metadataをinput_format_defaults_for_omitted_fieldsに名称変更しました。 #4771 (Artem Zuikov) - 設定
max_partitions_per_insert_blockを追加しました(デフォルト値は 100)。挿入されるブロックにこれより多くのパーティションが含まれている場合、例外がスローされます。上限を撤廃したい場合は 0 に設定してください(非推奨)。 #4845 (alexey-milovidov) - マルチサーチ関数の名称を変更しました(
multiPositionからmultiSearchAllPositions、multiSearchからmultiSearchAny、firstMatchからmultiSearchFirstIndex)。 #4780 (Danila Kutenin)
パフォーマンスの改善
- インライン化により Volnitsky サーチャーを最適化し、多数の needle または多数の類似 bigram を含むクエリに対して、検索性能を約 5〜10% 向上させました。 #4862 (Danila Kutenin)
- すべての読み取りデータがキャッシュ内に含まれている場合に発生していた、設定
use_uncompressed_cacheが 0 より大きいときのパフォーマンス問題を修正しました。 #4913 (alesapin)
ビルド/テスト/パッケージングの改善
- デバッグビルドのハードニング: より細かいメモリマップと ASLR を導入し、mark cache と index にメモリ保護を追加しました。これにより、ASan や MSan では検出できない場合でも、より多くのメモリ破壊バグを発見できるようになります。 #4632 (alexey-milovidov)
- CMake 変数
ENABLE_PROTOBUF、ENABLE_PARQUET、ENABLE_BROTLIのサポートを追加し、上記の機能を有効/無効にできるようにしました(librdkafka や mysql などで行えることと同様)。 #4669 (Silviu Caragea) - テスト実行後に一部のクエリがハングした場合に、プロセスリストとすべてのスレッドのスタックトレースを出力できる機能を追加しました。 #4675 (alesapin)
clickhouse-testでConnection lossエラー発生時にリトライを行うようにしました。 #4682 (alesapin)- packager スクリプトに、Vagrant を用いた FreeBSD ビルドおよび Thread Sanitizer を用いたビルドを追加しました。 #4712 #4748 (alesapin)
- インストール時に、
'default'ユーザーのパスワード入力を求めるようにしました。 #4725 (proller) rdkafkaライブラリでの警告を抑制しました。 #4740 (alexey-milovidov)- SSL なしでビルドできるようにしました。 #4750 (proller)
- 任意のユーザーとして clickhouse-server イメージを起動できるようにする手段を追加しました。 #4753 (Mikhail f. Shiryaev)
- contrib の Boost を 1.69 にアップグレードしました。 #4793 (proller)
- Thread Sanitizer を用いてコンパイルした場合に
mremapの使用を無効化しました。驚くべきことに、TSan はmmapやmunmapはフックしますがmremapはフックせず、その結果として誤検知が発生していました。stateful テストでの TSan レポートを修正しました。 #4859 (alexey-milovidov) - HTTP インターフェイス経由で format schema を使用するテストを追加しました。 #4864 (Vitaly Baranov)
ClickHouse リリース 19.4
ClickHouse リリース 19.4.4.33, 2019-04-17
バグ修正
- メモリ割り当てが失敗した場合に
std::terminateを呼び出さないようにしました。これにより、期待どおりにstd::bad_alloc例外が送出されるようになりました。 #4665 (alexey-milovidov) capnprotoによるバッファからの読み込み処理を修正。HTTP 経由でファイルが正常に読み込めないことがありました。 #4674 (Vladislav)OPTIMIZE TABLE FINALクエリの実行後に発生するエラーUnknown log entry type: 0を修正。 #4683 (Amos Bird)hasAnyまたはhasAll関数への誤った引数指定により、セグメンテーションフォルトが発生する可能性があります。 #4698 (alexey-milovidov)DROP DATABASE dictionaryクエリの実行中にデッドロックが発生することがあります。 #4701 (alexey-milovidov)median関数およびquantile関数における未定義動作を修正。 #4702 (hcz)network_compression_methodが小文字の場合の圧縮レベルの検出を修正。v19.1 で発生していた不具合。#4706 (proller)<timezone>UTC</timezone>設定が無視されていた問題を修正しました(issue #4658 を修正)。#4718(proller)Distributedテーブルにおけるhistogram関数の動作を修正。 #4741 (olegkv)- TSan レポート
destroy of a locked mutexを修正しました。 #4742 (alexey-milovidov) - システムログの利用時の競合状態によりシャットダウン時に発生していた TSan レポートを修正しました。
part_logが有効な場合にシャットダウン時に発生する可能性があった use-after-free の問題を修正しました。 #4758 (alexey-milovidov) - エラー時の
ReplicatedMergeTreeAlterThreadにおける再チェック処理を修正しました。 #4772 (Nikolai Kochetov) - 集約関数の中間状態に対する算術演算が、サブクエリ結果などの定数引数については正しく動作していませんでした。 #4776 (alexey-milovidov)
- メタデータ内の列名は常にバッククォートで囲んでください。そうしない場合、
indexという名前の列を持つテーブルを作成できず(メタデータ内のATTACHクエリが不正になりサーバーが起動できなくなるため)、問題が発生します。 #4782 (alexey-milovidov) Distributedテーブルに対するALTER ... MODIFY ORDER BYでクラッシュする問題を修正。 #4790 (TCeason)enable_optimize_predicate_expressionが有効な場合にJOIN ONで発生するセグメンテーションフォールトを修正。 #4794 (Winter Zhang)- Kafka から protobuf メッセージを取り込んだ後に余計な行が追加されてしまうバグを修正。#4808 (Vitaly Baranov)
clickhouse-copierのセグメンテーションフォルトを修正。#4835 (proller)system.tablesからのSELECTにおいて、テーブルが並行してリネームまたは ALTER 文で変更された場合に発生する競合状態を修正しました。 #4836 (alexey-milovidov)- すでに無効になっているデータパートをフェッチする際に発生していたデータレースを修正しました。 #4839 (alexey-milovidov)
- MergeTree ファミリーのテーブルに対する
RENAME実行時に稀に発生しうるデータレースを修正しました。 #4844 (alexey-milovidov) - 関数
arrayIntersectにおけるセグメンテーションフォルトを修正しました。定数引数と通常の引数が混在した状態で関数が呼び出されると、セグメンテーションフォルトが発生する可能性がありました。 #4847 (Lixiang Qian) - 列に空配列が長く連続して含まれているというまれなケースでの
Array(LowCardinality)型列からの読み取りを修正しました。 #4850 (Nikolai Kochetov) - レプリカ間でパーツをフェッチする際に発生していた
No message received例外を修正。 #4856 (alesapin) - 1 つの配列内に同じ値が複数回含まれている場合に、
arrayIntersect関数が誤った結果を返していた問題を修正。 #4871 (Nikolai Kochetov) - 同時に実行される
ALTER COLUMNクエリ間でサーバークラッシュを引き起こし得たレースコンディションを修正(issue #3421 を修正)。#4592(Alex Zatelepin) CODECカラムに対するALTER MODIFYにおいて、カラム型が指定されていない場合のパラメータ推論を修正しました。 #4883 (alesapin)URLにフラグメントを含み、クエリが存在しない場合でも、関数cutQueryStringAndFragment()とqueryStringAndFragment()が正しく動作するようになりました。 #4894 (Vitaly Baranov)min_bytes_to_use_direct_ioが 0 より大きい値に設定されている場合に、スレッドがカラムファイル内で後方にシークしなければならないときにまれに発生していたバグを修正。 #4897 (alesapin)LowCardinality引数を持つ集約関数に対する不正な引数型を修正(issue #4919 を修正)。 #4922(Nikolai Kochetov)- 関数
toISOWeekにおける 1970 年の結果を修正しました。 #4988 (alexey-milovidov) ReplicatedMergeTree*テーブルファミリーに対してON CLUSTERで実行した際に発生していた、DROP、TRUNCATE、OPTIMIZEクエリの重複実行を修正しました。 #4991 (alesapin)
改善
- 通常のカラムと
DEFAULT、MATERIALIZED、ALIASカラムを、1 つのリストとしてまとめて保持するようにしました(issue #2867 の修正)。#4707(Alex Zatelepin)
ClickHouse Release 19.4.3.11, 2019-04-02
不具合修正
FULL/RIGHT JOINにおいて、nullable カラムと non-nullable カラムを結合する場合にクラッシュする問題を修正しました。#4855(Artem Zuikov)clickhouse-copierにおけるセグメンテーションフォルトを修正しました。#4835(proller)
ビルド / テスト / パッケージングの改善
- 任意のユーザーから clickhouse-server イメージを起動できるようにしました。#4753(Mikhail f. Shiryaev)
ClickHouse Release 19.4.2.7, 2019-03-30
不具合修正
- カラムに空配列の長いシーケンスが含まれているというまれなケースにおいて、
Array(LowCardinality)カラムからの読み取りが失敗する問題を修正しました。#4850(Nikolai Kochetov)
ClickHouse Release 19.4.1.3, 2019-03-19
不具合修正
LIMIT BYとLIMITの両方を含むリモートクエリを修正しました。以前は、リモートクエリでLIMIT BYとLIMITを使用すると、LIMIT BYの前にLIMITが適用されることがあり、その結果として過剰に絞り込まれた結果が返されていました。#4708(Constantin S. Pan)
ClickHouse Release 19.4.0.49, 2019-03-09
新機能
Protobufフォーマット(入力および出力、ネストしたデータ構造)を完全にサポート。 #4174 #4493 (Vitaly Baranov)- Roaring Bitmap を用いたビットマップ関数を追加。 #4207 (Andy Yang) #4568 (Vitaly Baranov)
- Parquet フォーマットのサポートを追加。 #4448 (proller)
- あいまい文字列比較のために N グラム距離を追加。R 言語における q グラム指標に類似。 #4466 (Danila Kutenin)
- 専用の集約パターンおよび保持パターンを組み合わせて、Graphite ロールアップのルールを統合。 #4426 (Mikhail f. Shiryaev)
- リソース使用量を制限するために
max_execution_speedとmax_execution_speed_bytesを追加。min_execution_speedを補完する設定としてmin_execution_speed_bytesを追加。 #4430 (Winter Zhang) - 関数
flattenを実装。 #4555 #4409 (alexey-milovidov, kzon) - 関数
arrayEnumerateDenseRankedとarrayEnumerateUniqRankedを追加(arrayEnumerateUniqに似ているが、多次元配列の内部を参照するための配列の深さを細かく調整可能)。 #4475 (proller) #4601 (alexey-milovidov) - 制限付きで複数の JOIN をサポート:アスタリスクの使用禁止、ON/WHERE/GROUP BY/… での複雑なエイリアス禁止。 #4462 (Artem Zuikov)
バグ修正
- このリリースには、19.3 および 19.1 でのすべてのバグ修正も含まれています。
- data skipping index におけるバグを修正: INSERT 後の granule の順序が誤っていました。 #4407 (Nikita Vasilev)
NullableおよびLowCardinalityカラムに対するsetインデックスを修正しました。以前は、NullableまたはLowCardinalityカラムに対するsetインデックスを用いて SELECT クエリを実行すると、Data type must be deserialized with multiple streamsというエラーが発生していました。 #4594 (Nikolai Kochetov)executable辞書のフル更新時にupdate_timeが正しく設定されるように修正。 #4551 (Tema Novikov)- バージョン 19.3 で壊れていた進捗バーを修正。 #4627 (filimonov)
- 一部のケースでメモリ領域が縮小された際に、
MemoryTrackerの値が不整合になる問題を修正しました。 #4619 (alexey-milovidov) - ThreadPool での未定義動作を修正しました。 #4612 (alexey-milovidov)
SELECTの実行中にMergeTreeテーブルが同時にDROPされた場合に、非常にまれに発生するmutex lock failed: Invalid argumentというメッセージ付きのクラッシュを修正しました。 #4608 (Alex Zatelepin)- ODBC ドライバーの
LowCardinalityデータ型対応。 #4381 (proller) - FreeBSD:
AIOcontextPool: Found io_event with unknown id 0エラーの修正。 #4438 (urgordeadbeef) system.part_logテーブルが設定にかかわらず作成されていました。 #4483 (alexey-milovidov)- キャッシュ辞書での
dictIsIn関数の未定義動作を修正。 #4515 (alesapin) SELECTクエリが同一テーブルに対して複数回ロックを取得する場合(例: 別スレッドから実行される場合や、複数のサブクエリを実行する場合)に、同時にDDLクエリが実行されていると発生していたデッドロックを修正しました。 #4535 (Alex Zatelepin)- 独自の
llvmcontrib を用意し、clangとasanでテストできるようになるまで、デフォルトでは compile_expressions を無効にする。 #4579 (alesapin) clickhouse外部ディクショナリのソースに対するinvalidate_queryが不正な結果セット(空、複数行、または複数列)を返した場合にstd::terminateが発生しないようにしました。lifetimeに関係なくinvalidate_queryが 5 秒ごとに実行されていた問題を修正しました。 #4583 (alexey-milovidov)clickhouseソースを持つ辞書に対するinvalidate_queryがsystem.dictionariesテーブルまたはDictionariesデータベースを参照していた場合に発生する可能性があるデッドロックを回避しました(まれなケース)。 #4599 (alexey-milovidov)- 空の WHERE 句を伴う CROSS JOIN の不具合を修正。 #4598 (Artem Zuikov)
- 定数引数が渡された場合に関数 "replicate" で発生していたセグメンテーションフォルトを修正しました。 #4603 (alexey-milovidov)
- 述語オプティマイザ使用時の lambda 関数の不具合を修正。 #4408 (Winter Zhang)
- 複数の JOIN に関する不具合を修正。 #4595 (Artem Zuikov)
改良点
- 右側のテーブル列に対して、JOIN の ON 句でエイリアスをサポート。 #4412 (Artem Zuikov)
- 複数の JOIN の結果をサブセレクトで使用するには、正しい結果列名が必要となるため、結果内のフラットなエイリアスを元のソース名に置き換え。 #4474 (Artem Zuikov)
- 結合されたステートメントに対するプッシュダウンロジックを改善。 #4387 (Ivan)
パフォーマンスの改善
- "move to PREWHERE" 最適化のヒューリスティクスを改善。 #4405 (alexey-milovidov)
- 8-bit および 16-bit キー向けに、HashTable の API を使用する適切なルックアップテーブルを利用。 #4536 (Amos Bird)
- 文字列比較のパフォーマンスを改善。 #4564 (alexey-milovidov)
- distributed DDL キューを別スレッドでクリーンアップし、distributed DDL タスクを処理するメインループを遅くしないようにした。 #4502 (Alex Zatelepin)
min_bytes_to_use_direct_ioが 1 に設定されている場合、読み取るデータサイズが圧縮ブロック 1 つ分のサイズで過小評価されることがあり、そのため一部のファイルが O_DIRECT モードでオープンされていななかった問題を修正。 #4526 (alexey-milovidov)
ビルド/テスト/パッケージングの改善
- clang-9 のサポートを追加。#4604 (alexey-milovidov)
- 誤った
__asm__命令を再度修正。#4621 (Konstantin Podshumok) - コマンドラインから
clickhouse-performance-testの設定を指定できる機能を追加。#4437 (alesapin) - 統合テストに dictionaries のテストを追加。#4477 (alesapin)
- Web サイト上のベンチマークに含まれるクエリを自動パフォーマンステストに追加。#4496 (alexey-milovidov)
xxhash.hは外部 lz4 には存在しません。これは実装の詳細であり、そのシンボルはXXH_NAMESPACEマクロでネームスペース化されているためです。lz4 が外部である場合、xxHash も外部でなければならず、依存側はそれにリンクする必要があります。#4495 (Orivej Desh)quantileTiming集約関数が負の値または浮動小数点の引数で呼び出される場合がある問題を修正(これにより undefined behaviour sanitizer を用いた fuzz テストが修正されます)。#4506 (alexey-milovidov)- スペルミスを修正。#4531 (sdk2)
- macOS でのコンパイルを修正。#4371 (Vitaly Baranov)
- FreeBSD およびさまざまな変則的なビルド構成向けのビルド修正。#4444 (proller)
ClickHouse リリース 19.3
ClickHouse リリース 19.3.9.1, 2019-04-02
バグ修正
FULL/RIGHT JOINで、NULL 許容列と非 NULL 許容列を結合したときに発生するクラッシュを修正。#4855 (Artem Zuikov)clickhouse-copierでのセグメンテーションフォルトを修正。#4835 (proller)- 列に長い空配列のシーケンスが含まれているというまれなケースにおいて、
Array(LowCardinality)列の読み取り時に発生する不具合を修正。#4850 (Nikolai Kochetov)
ビルド / テスト / パッケージングの改善
- カスタムユーザーから
clickhouse-serverイメージを起動する方法を追加。#4753 (Mikhail f. Shiryaev)
ClickHouse リリース 19.3.7, 2019-03-12
バグ修正
- #3920 のエラーを修正。このエラーは、ランダムなキャッシュ破損(
Unknown codec family code、Cannot seek through fileといったメッセージ)およびセグメンテーションフォルトとして現れる。このバグはバージョン 19.1 で初めて発生し、19.1.10 および 19.3.6 までのバージョンに存在する。#4623 (alexey-milovidov)
ClickHouse リリース 19.3.6, 2019-03-02
バグ修正
- スレッドプールに 1000 を超えるスレッドがある場合、スレッド終了時に
std::terminateが発生する可能性がある。Azat Khuzhin #4485 #4505 (alexey-milovidov) - デフォルトのない列にコメントを付けた
ReplicatedMergeTree*テーブル、ならびにコメントやデフォルトのない列コーデックを持つテーブルを作成できるようになった。また、コーデックの比較の不具合を修正。#4523 (alesapin) - 配列またはタプルを伴う JOIN でのクラッシュを修正。#4552 (Artem Zuikov)
ThreadStatus not createdというメッセージとともに発生するclickhouse-copierのクラッシュを修正。#4540 (Artem Zuikov)- 分散 DDL が使用されている場合に、サーバーのシャットダウン時にハングアップする問題を修正。#4472 (Alex Zatelepin)
- 列番号が 10 を超える列に対してテキスト形式をパースする際のエラーメッセージで、誤った列番号が出力されていた問題を修正。#4484 (alexey-milovidov)
ビルド / テスト / パッケージングの改善
- AVX を有効にしたビルドを修正。#4527 (alexey-milovidov)
- コンパイル時のカーネルではなく、既知の安定バージョンに基づいて拡張アカウンティングおよび I/O アカウンティングを有効化。#4541 (nvartolomei)
core_dump.size_limitの設定をスキップできるようにし、制限の設定に失敗した場合は例外スローではなく警告を出すように変更。#4473 (proller)Field.cpp内のvoid readBinary(...)のinline指定を削除。また、冗長なnamespace DBブロックを統合。#4530 (hcz)
ClickHouse Release 19.3.5, 2019-02-21
バグ修正
- 大きな HTTP 経由の INSERT クエリの処理に関するバグを修正。#4454 (alesapin)
send_logs_level設定の誤った実装により発生していた古いバージョンとの後方互換性の問題を修正。#4445 (alexey-milovidov)- カラムコメント導入時に発生したテーブル関数
remoteの後方互換性の問題を修正。#4446 (alexey-milovidov)
ClickHouse Release 19.3.4, 2019-02-16
改善
ATTACH TABLEクエリの実行時、テーブルインデックスのサイズはメモリ制限に含めないよう変更。これにより、デタッチ後にテーブルをアタッチできなくなる可能性を回避。#4396 (alexey-milovidov)- ZooKeeper から受信する文字列および配列の最大サイズ制限をわずかに引き上げ。これにより、ZooKeeper 側で
CLIENT_JVMFLAGS=-Djute.maxbuffer=...によってサイズを増やした場合でも処理を継続可能。#4398 (alexey-milovidov) - キュー内に非常に多くのノードが存在する場合でも、放棄されたレプリカを修復できるように対応。#4399 (alexey-milovidov)
SETインデックスに 1 つの必須引数(保存される最大行数)を追加。#4386 (Nikita Vasilev)
バグ修正
- 単一の
LowCardinalityキーでのWITH ROLLUPの結果を修正。#4384 (Nikolai Kochetov) SETインデックスのバグを修正(max_rowsを超える行数を含むグラニュールを削除してしまう問題)。#4386 (Nikita Vasilev)- FreeBSD 向けビルドに関する多数の修正。#4397 (proller)
- 同じエイリアスを含むサブクエリを持つクエリでのエイリアス置換を修正(issue #4110)。#4351 (Artem Zuikov)
ビルド/テスト/パッケージングの改善
- Docker イメージ内でステートレステスト用に
clickhouse-serverを実行できるようになりました。 #4347 (Vasily Nemkov)
ClickHouse リリース 19.3.3, 2019-02-13
新機能
- 何らかの理由でスタックしてしまった mutation を削除できるようにする
KILL MUTATIONステートメントを追加しました。トラブルシューティングを容易にするため、system.mutationsテーブルにlatest_failed_part、latest_fail_time、latest_fail_reasonフィールドを追加しました。 #4287 (Alex Zatelepin) - Shannon エントロピーを計算する集約関数
entropyを追加しました。 #4238 (Quid37) - クエリ
INSERT INTO tbl VALUES (....をquery部分とdata部分に分割せずにサーバーへ送信できるようにしました。 #4301 (alesapin) arrayWithConstant関数の汎用実装を追加しました。 #4322 (alexey-milovidov)NOT BETWEEN比較演算子を実装しました。 #4228 (Dmitry Naumov)sumMapによって値が集計されるキーの数を制限できるようにするため、sumMapFilteredを実装しました。 #4129 (Léo Ercolanelli)mysqlテーブル関数でNullable型をサポートしました。 #4198 (Emmanuel Donin de Rosière)LIMIT句で任意の定数式をサポートしました。 #4246 (k3box)- 追加の引数として(符号なし整数の)重みを受け取る集約関数
topKWeightedを追加しました。 #4245 (Andrew Golman) StorageJoinに、同一キーの既存値を上書きできるjoin_any_take_last_row設定のサポートを追加しました。 #3973 (Amos Bird)- 関数
toStartOfIntervalを追加しました。 #4304 (Vitaly Baranov) RowBinaryWithNamesAndTypesフォーマットを追加しました。 #4200 (Oleg V. Kozlyuk)IPv4およびIPv6データ型を追加しました。IPv*関数のより効率的な実装を追加しました。 #3669 (Vasily Nemkov)- 関数
toStartOfTenMinutes()を追加しました。 #4298 (Vitaly Baranov) Protobuf出力フォーマットを追加しました。 #4005 #4158 (Vitaly Baranov)- データインポート(INSERT)用の HTTP インターフェースで brotli をサポートしました。 #4235 (Mikhail)
- コマンドラインクライアントで関数名や型にタイプミスがある場合にヒントを表示するようにしました。 #4239 (Danila Kutenin)
- サーバーの HTTP レスポンスヘッダーに
Query-Idを追加しました。 #4231 (Mikhail)
実験的機能
- MergeTree テーブルエンジンファミリー向けに、
minmaxおよびsetデータスキップインデックスを追加しました。 #4143 (Nikita Vasilev) - 可能な場合に、
CROSS JOINをINNER JOINに変換する機能を追加しました。 #4221 #4266 (Artem Zuikov)
不具合修正
- 重複した列がある場合に
JOIN ON句で発生していたNot found columnエラーを修正しました。 #4279 (Artem Zuikov) START REPLICATED SENDSコマンドでレプリケート送信を開始できるようにした。 #4229 (nvartolomei)Array(LowCardinality)引数を取る集約関数の実行に関する不具合を修正しました。 #4055 (KochetovNicolai)INSERT ... SELECT ... FROM file(...)クエリを実行した際に、ファイルのフォーマットがCSVWithNamesまたはTSVWIthNamesで、最初のデータ行が存在しない場合に発生していた誤動作を修正しました。 #4297 (alexey-milovidov)- 辞書が利用できない状態でリロードを行うとクラッシュする問題を修正しました。このバグは 19.1.6 で導入されました。 #4188 (proller)
- 右テーブルに重複行がある場合の
ALL JOINの不具合を修正。 #4184 (Artem Zuikov) use_uncompressed_cache=1の場合に発生していたセグメンテーションフォルトと、誤った非圧縮サイズによる例外を修正しました。このバグは 19.1.6 で導入されました。 #4186 (alesapin)compile_expressionsでの int16 を超える日付値の比較に関するバグを修正しました。 #4341 (alesapin)- テーブル関数
numbers(0)からの SELECT の実行時に発生していた無限ループを修正。 #4280 (alexey-milovidov) ORDER BYの述語の最適化を一時的に無効化。#3890 (Winter Zhang)- 古い CPU で base64 関数を使用すると発生する
Illegal instructionエラーを修正しました。このエラーは、ClickHouse を gcc-8 でコンパイルした場合にのみ確認されています。 #4275 (alexey-milovidov) - TLS 接続経由で PostgreSQL ODBC Driver とやり取りする際に発生していた
No message receivedエラーを修正しました。MySQL ODBC Driver 使用時に発生していたセグメンテーションフォルトも修正しました。 #4170 (alexey-milovidov) - 条件演算子(関数
if)の分岐でDateおよびDateTime引数が使用された場合に誤った結果が返される問題を修正しました。関数ifに汎用ケースを追加しました。 #4243 (alexey-milovidov) - ClickHouse の辞書は
clickhouseプロセス内で読み込まれるようになりました。 #4166 (alexey-milovidov) Fileエンジンを使用するテーブルに対するSELECTがNo such file or directoryエラー後に再試行された際に発生していたデッドロックを修正。 #4161 (alexey-milovidov)system.tablesから SELECT した際にtable does not existエラーが発生する可能性があったレースコンディションを修正しました。 #4313 (alexey-milovidov)clickhouse-clientは、インタラクティブモードで実行された場合、コマンドライン補完用のデータを読み込む際に終了時にセグメンテーションフォルトを起こすことがあります。 #4317 (alexey-milovidov)IN演算子を含むミューテーションの実行で誤った結果が返されていた不具合を修正しました。 #4099 (Alex Zatelepin)- エラーを修正:
Dictionaryエンジンを使用するデータベースが存在する場合、すべてのディクショナリがサーバー起動時に強制的にロードされ、localhost 上の ClickHouse をソースとするディクショナリがあると、そのディクショナリがロードできない問題を修正しました。 #4255 (alexey-milovidov) - サーバーのシャットダウン時にシステムログを再作成しようとすると発生していたエラーを修正。 #4254 (alexey-milovidov)
joinGet関数が正しい型を返し、ロックを適切に処理するよう修正。 #4153 (Amos Bird)sumMapWithOverflow関数を追加しました。 #4151 (Léo Ercolanelli)allow_experimental_multiple_joins_emulationで発生するセグメンテーションフォールトを修正。 52de2c (Artem Zuikov)- 誤った
DateとDateTimeの比較を引き起こすバグを修正しました。 #4237 (valexey) - 未定義動作サニタイザ有効時のファジングテストを修正し、
quantile*Weighted関数群にパラメータ型チェックを追加しました。 #4145 (alexey-milovidov) - 古いデータパーツの削除処理時に
File not foundエラーで失敗する可能性があった、まれなレースコンディションを修正。 #4378 (alexey-milovidov) /etc/clickhouse-server/config.xmlが欠落していたインストールパッケージの問題を修正。 #4343 (proller)
ビルド/テスト/パッケージングの改善
- Debian パッケージ: 設定に従って /etc/clickhouse-server/preprocessed のリンクを修正。 #4205 (proller)
- FreeBSD 向けの各種ビルド修正。 #4225 (proller)
- perftest 内でテーブルの作成、データ投入、削除ができる機能を追加。 #4220 (alesapin)
- 重複した include をチェックするスクリプトを追加。 #4326 (alexey-milovidov)
- パフォーマンステストでインデックスを指定してクエリを実行できる機能を追加。 #4264 (alesapin)
- デバッグシンボル付きパッケージのインストールを推奨。 #4274 (alexey-milovidov)
- performance-test のリファクタリング。ログ出力とシグナル処理を改善。 #4171 (alesapin)
- 匿名化された Yandex.Metrica データセット向けのドキュメントを追加。 #4164 (alesapin)
- 古い月単位パーティションのパートをカスタムパーティション形式に変換するツールを追加。 #4195 (Alex Zatelepin)
- S3 上の 2 つのデータセットに関するドキュメントを追加。 #4144 (alesapin)
- プルリクエストの説明から changelog を生成するスクリプトを追加。 #4169 #4173 (KochetovNicolai) (KochetovNicolai)
- ClickHouse 向け Puppet モジュールを追加。 #4182 (Maxim Fedotov)
- 未ドキュメントの関数群に関するドキュメントを追加。 #4168 (Winter Zhang)
- ARM ビルドの修正。 #4210#4306 #4291 (proller) (proller)
- Dictionary テストを
ctestから実行できるように変更。 #4189 (proller) - デフォルトの SSL 証明書ディレクトリとして
/etc/sslを使用するよう変更。 #4167 (alexey-milovidov) - 起動時に SSE および AVX 命令の有無をチェックする機能を追加。 #4234 (Igr)
- init スクリプトがサーバーの起動完了まで待機するよう変更。 #4281 (proller)
後方互換性のない変更
allow_experimental_low_cardinality_type設定を削除しました。LowCardinalityデータ型は本番運用に対応しました。#4323 (alexey-milovidov)- 利用可能なメモリ量に応じて、mark キャッシュサイズおよび非圧縮キャッシュサイズを削減するようにしました。#4240 (Lopatin Konstantin
CREATE TABLEクエリにキーワードINDEXを追加しました。名前がindexのカラムは、バッククォートまたは二重引用符で囲む必要があります:`index`。#4143 (Nikita Vasilev)sumMapは、これまでオーバーフローしていた場合に結果型を昇格させるようになりました。従来のsumMapの挙動は、sumMapWithOverflow関数を使用することで再現できます。#4151 (Léo Ercolanelli)
パフォーマンスの改善
LIMITを含まないクエリでstd::sortをpdqsortに置き換えました。#4236 (Evgenii Pravda)- サーバーがグローバルスレッドプールからスレッドを再利用するようになりました。これにより、一部の特殊なケースでパフォーマンスに影響があります。#4150 (alexey-milovidov)
改善点
- FreeBSD 向けの AIO サポートを実装しました。 #4305 (urgordeadbeef)
SELECT * FROM a JOIN b USING a, bは、左側のテーブルからのaおよびbカラムのみを返すようになりました。 #4141 (Artem Zuikov)- クライアントの
-Cオプションを-cオプションと同様に動作するようにしました。 #4232 (syominsergey) - 値なしで使用した
--passwordオプションは、stdin からのパスワード入力を要求するようになりました。 #4230 (BSD_Conqueror) LIKE式または正規表現を含む文字列リテラル内の、エスケープされていないメタ文字をハイライト表示する機能を追加しました。 #4327 (alexey-milovidov)- クライアントソケットが切断された場合に HTTP 読み取り専用クエリをキャンセルする機能を追加しました。 #4213 (nvartolomei)
- サーバーが進捗を報告して、クライアントとの接続を維持するようになりました。 #4215 (Ivan)
optimize_throw_if_noop設定が有効な場合の OPTIMIZE クエリに対する理由メッセージをわずかに改善しました。 #4294 (alexey-milovidov)- clickhouse server で
--versionオプションをサポートしました。 #4251 (Lopatin Konstantin) clickhouse-serverに--help/-hオプションを追加しました。 #4233 (Yuriy Baranov)- 集約関数の状態を結果とするスカラサブクエリのサポートを追加しました。 #4348 (Nikolai Kochetov)
- サーバーのシャットダウン時間と ALTER の待機時間を改善しました。 #4372 (alexey-milovidov)
replicated_can_become_leader設定に関する情報を system.replicas に追加し、レプリカがリーダーになろうとしない場合にログを出力するようにしました。 #4379 (Alex Zatelepin)
ClickHouse リリース 19.1
ClickHouse リリース 19.1.14, 2019-03-14
- 設定
asterisk_left_columns_onlyが 1 に設定されており、SELECT *を伴うGLOBAL JOINを使用している場合(まれなケース)に発生する可能性のあるColumn ... queried more than onceエラーを修正しました。この問題は 19.3 以降のバージョンには存在しません。 6bac7d8d (Artem Zuikov)
ClickHouse リリース 19.1.13, 2019-03-12
このリリースには、19.3.7 とまったく同じパッチセットが含まれます。
ClickHouse リリース 19.1.10, 2019-03-03
このリリースには、19.3.6 とまったく同じパッチセットが含まれます。
ClickHouse リリース 19.1
ClickHouse リリース 19.1.9, 2019-02-21
バグ修正
send_logs_level設定の誤った実装により発生していた、古いバージョンとの後方非互換性を修正しました。 #4445 (alexey-milovidov)- カラムコメントの導入に伴って発生した、テーブル関数
remoteの後方非互換性を修正しました。 #4446 (alexey-milovidov)
ClickHouse リリース 19.1.8, 2019-02-16
バグ修正
ClickHouse リリース 19.1
ClickHouse リリース 19.1.7, 2019-02-15
不具合修正
joinGet関数が正しい型を返し、ロックを適切に処理するように修正しました。 #4153 (Amos Bird)- サーバーのシャットダウン時にシステムログを再作成しようとした際に発生していたエラーを修正しました。 #4254 (alexey-milovidov)
- 不具合の修正:
Dictionaryエンジンを使用するデータベースが存在する場合、すべてのディクショナリがサーバー起動時に強制的にロードされており、さらに localhost 上の ClickHouse をソースとするディクショナリがあると、そのディクショナリをロードできない問題を修正しました。 #4255 (alexey-milovidov) IN演算子を含むミューテーションの実行で不正な結果が返されるバグを修正しました。 #4099 (Alex Zatelepin)- 対話モードで実行された場合、コマンドラインのサジェスト用データを読み込む際に、終了時に
clickhouse-clientがセグメンテーションフォルトを起こすことがあります。 #4317 (alexey-milovidov) system.tablesからの SELECT 中にtable does not existエラーが発生する可能性があったレースコンディションを修正しました。 #4313 (alexey-milovidov)Fileエンジンのテーブルに対するSELECTがNo such file or directoryエラー後にリトライされた際に発生していたデッドロックを修正。 #4161 (alexey-milovidov)- 問題を修正しました: ローカル ClickHouse 辞書が TCP 経由でロードされていましたが、本来は同一プロセス内でロードされるべきでした。 #4166 (alexey-milovidov)
- TLS 接続経由で PostgreSQL ODBC Driver とやり取りする際に発生していた
No message receivedエラーを修正しました。MySQL ODBC Driver 使用時に発生していたセグメンテーションフォルトも修正しました。#4170 (alexey-milovidov) ORDER BYに対する述語最適化を一時的に無効化しました。 #3890 (Winter Zhang)- テーブル関数
numbers(0)から SELECT した際に発生していた無限ループを修正。 #4280 (alexey-milovidov) int16を超える大きさの日付を比較する際に発生していたcompile_expressionsのバグを修正しました。 #4341 (alesapin)uncompressed_cache=1使用時のセグメンテーションフォルトと、非圧縮サイズが不正な場合に発生する例外を修正しました。 #4186 (alesapin)- 右テーブルに重複行がある場合の
ALL JOINの動作を修正。 #4184 (Artem Zuikov) INSERT ... SELECT ... FROM file(...)クエリで、ファイルの形式がCSVWithNamesまたはTSVWIthNamesで最初のデータ行が欠落している場合に誤動作していた問題を修正しました。 #4297 (alexey-milovidov)Array(LowCardinality)引数を取る集約関数の実行処理を修正。 #4055 (KochetovNicolai)- Debian パッケージ: 設定に応じて /etc/clickhouse-server/preprocessed へのリンクを正しく設定。 #4205 (proller)
- 未定義動作サニタイザ使用時のファジングテストを修正しました:
quantile*Weighted系関数に対してパラメータ型チェックを追加しました。 #4145 (alexey-milovidov) START REPLICATED SENDSコマンドでレプリケート送信が開始されるようにしました。 #4229 (nvartolomei)- JOIN の ON 句で列が重複している場合に
Not found columnエラーが発生する問題を修正しました。 #4279 (Artem Zuikov) /etc/sslが SSL 証明書のデフォルトディレクトリとして使用されるようになりました。 #4167 (alexey-milovidov)- 辞書が利用できない状態での辞書リロード時に発生していたクラッシュを修正。 #4188 (proller)
DateおよびDateTimeの比較が誤って行われる不具合を修正。 #4237 (valexey)- 条件演算子(関数
if)の分岐でDateおよびDateTime引数が使用された場合に誤った結果が返される問題を修正しました。関数ifに汎用的なケースを追加しました。 #4243 (alexey-milovidov)
ClickHouse リリース 19.1.6, 2019-01-24
新機能
- テーブルに対するカラムごとのカスタム圧縮コーデック。 #3899 #4111 (alesapin, Winter Zhang, Anatoly)
- 圧縮コーデック
Deltaを追加。 #4052 (alesapin) - 圧縮コーデックに対する
ALTERを許可。 #4054 (alesapin) - SQL 標準との互換性のため、関数
left,right,trim,ltrim,rtrim,timestampadd,timestampsubを追加。 #3826 (Ivan Blinkov) HDFSテーブルおよびhdfsテーブル関数への書き込みをサポート。 #4084 (alesapin)- 大きな文字列から複数の定数文字列を検索するための関数
multiPosition,multiSearch,firstMatchを追加。-UTF8,-CaseInsensitive,-CaseInsensitiveUTF8の各バリアントも追加。 #4053 (Danila Kutenin) SELECTクエリがシャーディングキーでフィルタする場合に未使用シャードをスキップする最適化(設定optimize_skip_unused_shards)。 #3851 (Gleb Kanterov, Ivan)Kafkaエンジンが、ブロックごとに一定数のパースエラーを無視できるように。 #4094 (Ivan)CatBoostのマルチクラスモデル評価をサポート。関数modelEvaluateは、マルチクラスモデルに対してクラスごとの生の予測値をタプルで返す。libcatboostmodel.soは #607 に従ってビルドする必要がある。 #3959 (KochetovNicolai)- 関数
filesystemAvailable,filesystemFree,filesystemCapacityを追加。 #4097 (Boris Granveaud) - ハッシュ関数
xxHash64およびxxHash32を追加。 #3905 (filimonov) - ハッシュ関数
gccMurmurHash(GCC 互換の Murmur ハッシュ)を追加。これは gcc と同じハッシュシードを使用する。 #4000 (sundyli) - ハッシュ関数
javaHash,hiveHashを追加。 #3811 (shangshujie365) - テーブル関数
remoteSecureを追加。この関数はremoteと同様に動作するが、安全な接続を使用する。 #4088 (proller)
実験的機能
- 複数の JOIN のエミュレーションを追加しました(
allow_experimental_multiple_joins_emulation設定)。#3946 (Artem Zuikov)
バグ修正
- メモリ消費を抑えるため、
compiled_expression_cache_size設定にデフォルトで上限を設けました。 #4041 (alesapin) - Replicated テーブルに対する ALTER を実行するスレッドと、ZooKeeper から構成を更新するスレッドでハングアップが発生する原因となっていたバグを修正。 #2947 #3891 #3934 (Alex Zatelepin)
- 分散
ALTERタスクの実行時に発生していたレースコンディションを修正しました。このレースコンディションにより、複数のレプリカが同じタスクを実行しようとし、1つを除くすべてのレプリカが ZooKeeper エラーで失敗していました。 #3904 (Alex Zatelepin) - ZooKeeper へのリクエストがタイムアウトした場合に
from_zk設定要素が更新されない不具合を修正。 #2947 #3947 (Alex Zatelepin) - IPv4 サブネットマスクのプレフィックスが誤っていたバグを修正。 #3945 (alesapin)
- リソース枯渇により新しいスレッドを作成できない、まれなケースで発生していたクラッシュ(
std::terminate)を修正しました。 #3956 (alexey-milovidov) remoteテーブル関数の実行時に、getStructureOfRemoteTableで誤った制限が適用されていた不具合を修正。 #4009 (alesapin)- netlink ソケットのリークを修正しました。これらはプールに保持されていましたが決して解放されず、既存のソケットがすべて使用中のときには、新しいスレッドの開始時に新たなソケットが作成されていました。 #4017 (Alex Zatelepin)
odbc-bridgeサブプロセスを fork した後、/procからすべての fd を読み込む前に/proc/self/fdディレクトリをクローズしてしまうバグを修正しました。 #4120 (alesapin)- 主キーに String 型を使用している場合の、String から UInt への単調変換を修正。 #3870 (Winter Zhang)
- 整数変換関数における単調性計算の誤りを修正しました。 #3921 (alexey-milovidov)
- 特定の不正な引数が指定された場合に
arrayEnumerateUniq、arrayEnumerateDense関数で発生していたセグメンテーションフォールトを修正しました。 #3909 (alexey-milovidov) - StorageMerge の未定義動作 (UB) を修正。 #3910 (Amos Bird)
- 関数
addDaysおよびsubtractDaysにおけるセグメンテーションフォルトを修正。 #3913 (alexey-milovidov) - 不具合を修正: 関数
round、floor、trunc、ceilが、整数引数に対して大きな負のスケールで実行された場合に誤った結果を返す可能性がある問題を修正しました。 #3914 (alexey-milovidov) - 'kill query sync' によりコアダンプが発生する不具合を修正しました。 #3916 (muVulDeePecker)
- レプリケーションキューが空になった後に長い遅延が発生するバグを修正。 #3928 #3932 (alesapin)
LowCardinality主キーを持つテーブルへの挿入時に過剰なメモリ使用量が発生していた問題を修正しました。 #3955 (KochetovNicolai)Nativeフォーマットで空配列を扱う際のLowCardinalityのシリアライゼーションを修正しました。 #3907 #4011 (KochetovNicolai)- 単一の LowCardinality 数値カラムに対して DISTINCT を使用した際に誤った結果が返される問題を修正しました。 #3895 #4012 (KochetovNicolai)
compile設定が有効な場合における LowCardinality キーを用いる専用の集約処理を修正しました。 #3886 (KochetovNicolai)- レプリケートテーブルのクエリにおけるユーザーおよびパスワードの転送を修正。 #3957 (alesapin) (小路)
- 辞書をリロードしている間に Dictionary データベース内のテーブルを一覧するときに、ごくまれに発生する競合状態を修正しました。 #3970 (alexey-milovidov)
- HAVING を ROLLUP または CUBE と一緒に使用した場合に誤った結果が返される問題を修正しました。 #3756 #3837 (Sam Chou)
JOIN ON構文と分散テーブルを使用するクエリにおけるカラムエイリアスを修正。 #3980 (Winter Zhang)quantileTDigestの内部実装の不具合を修正しました(Artem Vakhrushev によって発見されました)。この不具合は通常の ClickHouse の利用では発生せず、ClickHouse のコードベースをライブラリとして直接利用している場合にのみ影響がありました。 #3935 (alexey-milovidov)
改善点
ALTER TABLE ADD COLUMN文におけるIF NOT EXISTSのサポートと、DROP/MODIFY/CLEAR/COMMENT COLUMNにおけるIF EXISTSのサポートを追加。 #3900 (Boris Granveaud)- 関数
parseDateTimeBestEffort:DD.MM.YYYY、DD.MM.YY、DD-MM-YYYY、DD-Mon-YYYY、DD/Month/YYYYなどの形式をサポート。 #3922 (alexey-milovidov) CapnProtoInputStreamがジャギー(不揃いな)構造をサポートするように。 #4063 (Odin Hultgren Van Der Horst)- 利便性の向上: サーバープロセスがデータディレクトリの所有者として起動されているかを確認するチェックを追加。データが非 root ユーザーに属している場合、root からサーバーを起動することを禁止。 #3785 (sergey-v-galtsev)
- JOIN を含むクエリの解析時に、必須列をチェックするロジックを改善。 #3930 (Artem Zuikov)
- 1 つのサーバー内に多数の Distributed テーブルが存在する場合の接続数を削減。 #3726 (Winter Zhang)
- ODBC ドライバーにおいて、
WITH TOTALSクエリの合計行(totals row)をサポート。 #3836 (Maksim Koritckiy) if関数内でEnumを整数として使用できるようにした。 #3875 (Ivan)low_cardinality_allow_in_native_format設定を追加。無効化されている場合、NativeフォーマットではLowCadrinality型を使用しない。 #3879 (KochetovNicolai)- メモリ使用量を下げるため、コンパイル済み式キャッシュから一部の冗長なオブジェクトを削除。 #4042 (alesapin)
SET send_logs_level = 'value'クエリが適切な値のみを受け付けるようにするチェックを追加。 #3873 (Sabyanin Maxim)- 型変換関数におけるデータ型チェックを修正。 #3896 (Winter Zhang)
パフォーマンスの改善
- MergeTree の設定
use_minimalistic_part_header_in_zookeeperを追加。これを有効にすると、Replicated テーブルではコンパクトなパートメタデータを単一のパート znode に保存します。これにより ZooKeeper のスナップショットサイズが大幅に削減される可能性があります(特にテーブルのカラム数が多い場合)。この設定を有効化すると、それをサポートしないバージョンへのダウングレードはできなくなる点に注意してください。 #3960 (Alex Zatelepin) - パターンに時間が含まれない場合に、関数
sequenceMatchとsequenceCount用の DFA ベースの実装を追加。 #4004 (Léo Ercolanelli) - 整数値のシリアライゼーションのパフォーマンスを改善。 #3968 (Amos Bird)
- PODArray の左側をゼロでパディングして、インデックス -1 の要素が常に有効かつゼロ化されるように変更。これは分岐のないオフセット計算に使用されます。 #3920 (Amos Bird)
- パフォーマンス低下を引き起こしていた
jemallocのバージョンを元に戻した。 #4018 (alexey-milovidov)
後方互換性のない変更
- ドキュメント化されていなかった機能
ALTER MODIFY PRIMARY KEYを削除。この機能はALTER MODIFY ORDER BYコマンドに置き換えられました。 #3887 (Alex Zatelepin) - 関数
shardByHashを削除。 #3833 (alexey-milovidov) - 結果の型が
AggregateFunctionのスカラーサブクエリの使用を禁止。 #3865 (Ivan)
ビルド/テスト/パッケージングの改善
- PowerPC(
ppc64le)向けビルドのサポートを追加しました。 #4132 (Danila Kutenin) - ステートフルな機能テストが一般公開されているデータセット上で実行されるようになりました。 #3969 (alexey-milovidov)
- Docker または systemd-nspawn 内で
bash: /usr/bin/clickhouse-extract-from-config: Operation not permittedというメッセージが表示され、サーバーが起動できない問題を修正しました。 #4136 (alexey-milovidov) rdkafkaライブラリを v1.0.0-RC5 に更新し、生の C インターフェースの代わりに cppkafka を使用するようにしました。 #4025 (Ivan)mariadb-clientライブラリを更新しました。UBSan によって検出された問題のうち一つを修正しました。 #3924 (alexey-milovidov)- UBSan ビルドに対するいくつかの修正。 #3926 #3021 #3948 (alexey-milovidov)
- UBSan ビルドでコミットごとにテストが実行されるようになりました。
- コミットごとに PVS-Studio の静的解析を実行するようにしました。
- PVS-Studio により検出されたバグを修正しました。#4013 (alexey-milovidov)
- glibcの互換性問題を修正しました。 #4100 (alexey-milovidov)
- Docker イメージを 18.10 に更新し、glibc >= 2.28 向けの互換性ファイルを追加 #3965 (alesapin)
- サーバーの Docker イメージ内でディレクトリに
chownを実行したくないユーザー向けに、環境変数を追加。 #3967 (alesapin) - clang の
-Weverythingに含まれる警告の大半を有効にし、-Wpedanticも有効にしました。 #3986 (alexey-milovidov) - clang 8 でのみ有効な警告をさらにいくつか追加しました。 #3993 (alexey-milovidov)
- 共有ライブラリでリンクする場合は、個々の LLVM ライブラリではなく
libLLVMにリンクするようにしました。 #3989 (Orivej Desh) - テストイメージ向けのサニタイザー変数を追加。 #4072 (alesapin)
clickhouse-serverの Debian パッケージは、ケーパビリティを設定するためにsetcapツールを利用できるよう、libcap2-binパッケージを推奨します。これは必須ではありません。 #4093 (alexey-milovidov)- コンパイル時間を短縮し、インクルードを修正。 #3898 (proller)
- ハッシュ関数の性能テストを追加しました。 #3918 (filimonov)
- ライブラリ間の循環依存関係を修正しました。 #3958 (proller)
- 利用可能メモリが少ない環境でのコンパイル処理を改善。 #4030 (proller)
jemallocにおけるパフォーマンス低下を再現するためのテストスクリプトを追加しました。 #4036 (alexey-milovidov)dbms内のコメントおよび文字列リテラル中のスペルミスを修正しました。 #4122 (maiha)- コメント内の誤字を修正しました。 #4089 (Evgenii Pravda)