2017年変更履歴
ClickHouse リリース 1.1.54327, 2017-12-21
このリリースには、前バージョン 1.1.54318 に対するバグ修正が含まれます。
- レプリケーションにおけるレースコンディションによりデータ損失が発生する可能性があるバグを修正しました。この問題は、バージョン 1.1.54310 および 1.1.54318 に影響します。これらのバージョンのいずれかで Replicated テーブルを使用している場合、アップデートを強く推奨します。この問題は、
Part ... from own log does not exist.のような Warning レベルのメッセージとしてログに出力されます。ログにこれらのメッセージが表示されていない場合でも、この問題が発生している可能性があります。
ClickHouse リリース 1.1.54318, 2017-11-30
このリリースには、前バージョン 1.1.54310 に対するバグ修正が含まれます。
- SummingMergeTree エンジンでのマージ中に行が誤って削除される問題を修正しました。
- 非レプリケートな MergeTree エンジンにおけるメモリリークを修正しました。
- MergeTree エンジンで頻繁に挿入を行った際のパフォーマンス低下を修正しました。
- レプリケーションキューが停止してしまう問題を修正しました。
- サーバーログのローテーションおよびアーカイブ処理を修正しました。
ClickHouse リリース 1.1.54310, 2017-11-01
新機能:
- MergeTree ファミリーのテーブルエンジンに対するカスタムパーティショニングキー。
- Kafka テーブルエンジン。
- CatBoost モデルの読み込みと、ClickHouse に保存されたデータへの適用をサポートしました。
- UTC からのオフセットが整数でないタイムゾーンをサポートしました。
- 時間間隔を用いた算術演算をサポートしました。
- Date 型および DateTime 型の値の範囲を西暦 2105 年まで拡張しました。
CREATE MATERIALIZED VIEW x TO yクエリを追加しました(マテリアライズドビューのデータを格納する既存テーブルを指定します)。- 引数なしの
ATTACH TABLEクエリを追加しました。 - SummingMergeTree テーブルにおいて、名前が -Map で終わる Nested カラムの処理ロジックを sumMap 集約関数に切り出しました。これにより、そのようなカラムを明示的に指定できるようになりました。
- IP trie 辞書の最大サイズを 1 億 2800 万エントリに増やしました。
- getSizeOfEnumType 関数を追加しました。
- sumWithOverflow 集約関数を追加しました。
- Cap'n Proto 入力フォーマットをサポートしました。
- zstd アルゴリズム使用時の圧縮レベルをカスタマイズできるようになりました。
後方互換性のない変更:
- Memory 以外のエンジンを使用した一時テーブルの作成は許可されません。
- View または MaterializedView エンジンを用いたテーブルの明示的な作成は許可されません。
- テーブル作成時に、サンプリングキー式がプライマリキーに含まれていることを検証する新しいチェックが追加されました。
バグ修正:
- Distributed テーブルへの同期挿入時にハングアップする問題を修正しました。
- Replicated テーブルにおけるパーツの非アトミックな追加および削除を修正しました。
- マテリアライズドビューに挿入されたデータが不要な重複排除の対象にならないようにしました。
- ローカルレプリカが遅延し、かつリモートレプリカが利用できない Distributed テーブルに対してクエリを実行しても、エラーにならないようにしました。
- 一時テーブルの作成に際し、ユーザーが
defaultデータベースへのアクセス権限を持っている必要がなくなりました。 - 引数なしで Array 型を指定した場合にクラッシュする問題を修正しました。
- サーバーログを格納しているディスクボリュームが満杯になった際にハングアップする問題を修正しました。
- Unix エポックの最初の週に対して、toRelativeWeekNum 関数でオーバーフローが発生する問題を修正しました。
ビルドの改善:
- いくつかのサードパーティライブラリ(特に Poco)を更新し、git サブモジュールとして取り込みました。
ClickHouse リリース 1.1.54304, 2017-10-19
新機能:
- ネイティブプロトコルにおける TLS サポート(有効にするには、
config.xmlのtcp_ssl_portを設定します)。
バグ修正:
- レプリケーテッドテーブルに対する
ALTERは、可能な限り早く実行を開始するようになりました。 - 設定
preferred_block_size_bytes=0でデータを読み込む際にクラッシュする問題を修正しました。 Page Downキーを押したときにclickhouse-clientがクラッシュする問題を修正しました。GLOBAL INおよびUNION ALLを含む一部の複雑なクエリの解釈を正しくしました。FREEZE PARTITIONは常にアトミックに動作するようになりました。- 空の POST リクエストは、コード 411 のレスポンスを返すようになりました。
CAST(1 AS Nullable(UInt8)).のような式に対する解釈エラーを修正しました。MergeTreeテーブルからArray(Nullable(String))列を読み込む際のエラーを修正しました。SELECT dummy AS dummy, dummy AS bのようなクエリをパースする際にクラッシュする問題を修正しました。- 無効な
users.xmlが存在する場合でも、ユーザーが正しく更新されるようになりました。 - 実行可能ディクショナリが非ゼロのレスポンスコードを返す場合の処理を正しくしました。
ClickHouse リリース 1.1.54292, 2017-09-20
新機能:
- 座標平面上の座標を扱うための
pointInPolygon関数を追加しました。 - 配列の合計を計算するための集約関数
sumMapを追加しました。SummingMergeTreeと同様の動作です。 trunc関数を追加しました。丸め関数(round、floor、ceil、roundToExp2)のパフォーマンスを改善し、その動作ロジックを修正しました。小数および負の数に対するroundToExp2関数のロジックを変更しました。- ClickHouse 実行ファイルが使用する libc のバージョンへの依存性を低減しました。同一の ClickHouse 実行ファイルを非常に幅広い Linux システム上で実行できるようになりました。コンパイル済みクエリ(デフォルトでは使用されない設定
compile = 1を有効にした場合)を使用する場合には、依然として依存が残ります。 - クエリの動的コンパイルに必要な時間を短縮しました。
バグ修正:
part ... intersects previous partというメッセージが出力され、レプリカの一貫性が弱まることがあった問題を修正しました。- シャットダウン中に ZooKeeper が利用できない場合に、サーバーがハングする問題を修正しました。
- レプリカを復元する際の過剰なログ出力を削除しました。
UNION ALLの実装における不具合を修正しました。- ブロック内の最初の列が Array 型である場合に発生していた
concat関数のエラーを修正しました。 system.mergesテーブルで進捗が正しく表示されるようになりました。
ClickHouse リリース 1.1.54289, 2017-09-13
新機能:
- サーバー管理用の
SYSTEMクエリを追加しました:SYSTEM RELOAD DICTIONARY,SYSTEM RELOAD DICTIONARIES,SYSTEM DROP DNS CACHE,SYSTEM SHUTDOWN,SYSTEM KILL。 - 配列を扱うための関数を追加しました:
concat,arraySlice,arrayPushBack,arrayPushFront,arrayPopBack,arrayPopFront。 - ZooKeeper 設定に
rootおよびidentityパラメータを追加しました。これにより、同一の ZooKeeper クラスター上で個々のユーザーを分離できます。 - 集約関数
groupBitAnd,groupBitOr,groupBitXorを追加しました(互換性のため、BIT_AND,BIT_OR,BIT_XORという名前でも利用可能です)。 - 外部ディクショナリを、ファイルシステム上のソケットを指定して MySQL からロードできるようになりました。
- 外部ディクショナリを、SSL(パラメータ
ssl_cert,ssl_key,ssl_ca)経由で MySQL からロードできるようになりました。 - ユーザーごとのクエリで使用される全体の帯域幅を制限するために、設定
max_network_bandwidth_for_userを追加しました。 - 一時テーブルに対する
DROP TABLEをサポートしました。 CSVおよびJSONEachRowフォーマットから Unix タイムスタンプ形式のDateTime値を読み込むことをサポートしました。- 分散クエリにおいて遅延しているレプリカは、デフォルトで除外されるようになりました(デフォルトのしきい値は 5 分です)。
ALTER実行時に FIFO ロックを使用するようになりました。連続的に実行されているクエリがある場合でも、ALTERクエリが無期限にブロックされることはありません。- 設定ファイルで
umaskを設定できるオプションを追加しました。 DISTINCTを含むクエリのパフォーマンスを改善しました。
バグ修正:
- ZooKeeper で古いノードを削除する処理を改善しました。以前は、非常に頻繁に挿入が行われている場合に古いノードが削除されない場合があり、その結果、サーバーのシャットダウンが遅くなるなどの問題が発生していました。
- ZooKeeper への接続先ホストを選択する際のランダム化処理を修正しました。
- レプリカが
localhostの場合に、分散クエリで遅延しているレプリカを除外できない問題を修正しました。 Nested構造の要素に対してALTER MODIFYを実行した後、ReplicatedMergeTreeテーブル内のデータパーツが壊れる可能性があったエラーを修正しました。- SELECT クエリが「ハング」する可能性があったエラーを修正しました。
- 分散 DDL クエリを改善しました。
- クエリ
CREATE TABLE ... AS <materialized view>を修正しました。 Bufferテーブルに対するALTER ... CLEAR COLUMN IN PARTITIONクエリで発生していたデッドロックを解消しました。JSONEachRowおよびTSKVフォーマットを使用した場合に、Enumの不正なデフォルト値(最小値ではなく 0)が設定される問題を修正しました。executableソースを持つディクショナリを使用した際にゾンビプロセスが発生する問題を解消しました。- HEAD クエリで発生していたセグメンテーションフォルトを修正しました。
ClickHouse の開発およびビルド用ワークフローの改善:
- ClickHouse のビルドに
pbuilderを使用できるようになりました。 - Linux 上でのビルドにおいて、
libstdc++の代わりにlibc++を使用できるようになりました。 - 静的コード解析ツール
Coverage、clang-tidy、cppcheckの使用手順を追加しました。
アップグレード時の注意事項:
- MergeTree 設定
max_bytes_to_merge_at_max_space_in_pool(マージするデータパーツの合計最大サイズ[バイト単位])のデフォルト値が高くなりました。100 GiB から 150 GiB に増加しています。これにより、サーバーをアップグレードした後に大きなマージが実行され、ディスクサブシステムへの負荷が増加する可能性があります。サーバー上の空き容量が、実行中のマージの合計サイズの 2 倍未満しかない場合、他のすべてのマージ(小さいデータパーツのマージを含む)は停止します。その結果、INSERT クエリは「Merges are processing significantly slower than inserts.」というメッセージとともに失敗します。状況の監視にはSELECT * FROM system.mergesクエリを使用してください。また、system.metricsテーブルのDiskSpaceReservedForMergeメトリクス、もしくは Graphite でも確認できます。この問題は大きなマージが完了すれば自動的に解消されるため、対処のために特別な操作を行う必要はありません。これが受け入れられない場合は、max_bytes_to_merge_at_max_space_in_pool設定の以前の値を復元できます。そのためには、config.xml の<merge_tree>セクションに移動し、<merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool>を設定してサーバーを再起動してください。
ClickHouse リリース 1.1.54284, 2017-08-29
- これは前バージョン 1.1.54282 のバグ修正リリースです。ZooKeeper のパーツディレクトリで発生していたリークを修正します。
ClickHouse リリース 1.1.54282, 2017-08-23
このリリースには、前のリリース 1.1.54276 に対するバグ修正が含まれています。
- Distributed テーブルに挿入する際に発生していた
DB::Exception: Assertion violation: !_path.empty()を修正しました。 - RowBinary フォーマットで挿入する際、入力データが ';' で始まる場合のパース処理を修正しました。
- 一部の集約関数(例:
groupArray())の実行時コンパイル中に発生していたエラーを修正しました。
ClickHouse リリース 1.1.54276, 2017-08-16
新機能:
- SELECT クエリ用にオプションの WITH 句を追加しました。クエリ例:
WITH 1+1 AS a SELECT a, a*a - Distributed テーブルで同期的に INSERT を実行できるようになりました: すべてのデータがすべてのシャードに保存された後にのみ OK が返されます。これは設定 insert_distributed_sync=1 によって有効化されます。
- 16 バイト識別子を扱うための UUID データ型を追加しました。
- Tableau との互換性のために CHAR、FLOAT などの型エイリアスを追加しました。
- 時刻を数値に変換するための関数 toYYYYMM、toYYYYMMDD、および toYYYYMMDDhhmmss を追加しました。
- クラスタ DDL クエリのサーバー識別に、ホスト名とあわせて IP アドレスを使用できるようになりました。
- 関数
substring(str, pos, len)において、非定数引数および負のオフセットをサポートしました。 - 集約関数
groupArray(max_size)(column)に max_size パラメータを追加し、そのパフォーマンスを最適化しました。
主な変更点:
- セキュリティの改善: すべてのサーバーファイルは 0640 パーミッションで作成されます(
<umask>設定パラメータで変更可能)。 - 構文が無効なクエリに対するエラーメッセージを改善しました。
- 大きな MergeTree データセクションのマージ時のメモリ消費を大幅に削減し、パフォーマンスを向上しました。
- ReplacingMergeTree エンジンでのデータマージのパフォーマンスを大幅に向上しました。
- Distributed テーブルからの非同期 INSERT を、複数のソースからの INSERT をまとめることで高速化しました。この機能を有効にするには、設定 distributed_directory_monitor_batch_inserts=1 を使用します。
後方互換性のない変更:
- 配列に対する
groupArray(array_column)関数の集約状態のバイナリ形式を変更しました。
変更点の完全な一覧:
- JSON 形式で nan および inf 値を出力できるようにする設定
output_format_json_quote_denormalsを追加しました。 - Distributed テーブルから読み取る際のストリームの割り当てを最適化しました。
- 値が変更されない場合、設定を readonly モードで構成できるようになりました。
- preferred_block_size_bytes 設定で指定されたブロックサイズ制限を満たすために、MergeTree エンジンの非整数 granule を取得できるようにしました。目的は、大きなカラムを持つテーブルからのクエリ処理時に RAM 消費を削減し、キャッシュ局所性を高めることです。
toStartOfHour(x) op сonstexprのような条件に対して、toStartOfHour(x)のような式を含むインデックスを効率的に利用できるようにしました。- MergeTree エンジン向けに新しい設定を追加しました(config.xml の merge_tree セクション内):
- replicated_deduplication_window_seconds は、Replicated テーブルでの INSERT の重複排除に許可される秒数を設定します。
- cleanup_delay_period は、古いデータを削除するためのクリーンアップをどのくらいの頻度で開始するかを設定します。
- replicated_can_become_leader は、レプリカがリーダー(およびマージ割り当て)になることを防ぐことができます。
- ZooKeeper から古いデータを削除するクリーンアップを高速化しました。
- クラスタ DDL クエリに対して複数の改善と修正を行いました。特に重要なのは、新しい設定 distributed_ddl_task_timeout で、これはクラスタ内のサーバーからの応答を待機する時間を制限します。DDL リクエストがすべてのホストで実行されなかった場合、応答にはタイムアウトエラーが含まれ、リクエストは非同期モードで実行されます。
- サーバーログにおけるスタックトレースの表示を改善しました。
- 圧縮方式として
none値を追加しました。 - config.xml で複数の dictionaries_config セクションを使用できるようになりました。
- ファイルシステム内のソケットを介して MySQL に接続できるようになりました。
- system.parts テーブルに、マークサイズ(バイト単位)に関する情報を持つ新しいカラムを追加しました。
バグ修正:
- Merge テーブルを使用した分散テーブルで、
_tableフィールドに条件を指定した SELECT クエリが正しく動作するようになりました。 - ReplicatedMergeTree でデータパーツをチェックする際に発生するまれなレースコンディションを修正しました。
- サーバー起動時の「リーダー選出」中にフリーズする可能性があった問題を修正しました。
- データソースのローカルレプリカを使用している場合に、
max_replica_delay_for_distributed_queries設定が無視されていた問題を修正しました。 - 存在しないカラムを消去しようとしたときの
ALTER TABLE CLEAR COLUMN IN PARTITIONの不正な動作を修正しました。 - 空の配列や文字列を使用した場合に
multiIf関数で例外が発生する問題を修正しました。 - Native 形式のデシリアライズ時に過剰なメモリアロケーションが行われていた問題を修正しました。
- Trie 辞書の自動更新が正しく行われない不具合を修正しました。
- Merge テーブルから GROUP BY 句を含むクエリを SAMPLE とともに実行した際に例外が発生する問題を修正しました。
distributed_aggregation_memory_efficient=1使用時に GROUP BY がクラッシュする問題を修正しました。- IN および JOIN の右辺で
database.tableを指定できるようになりました。 - 並列集約で使用されるスレッド数が多すぎる問題を修正しました。
- FixedString 引数に対する "if" 関数の動作を修正しました。
- 重み 0 のシャードに対して Distributed テーブルからの SELECT が正しく動作しなかった問題を修正しました。
CREATE VIEW IF EXISTSを実行してもクラッシュしなくなりました。input_format_skip_unknown_fields=1が設定されていて負の数が存在する場合の不正な動作を修正しました。- 辞書内に不正なデータがある場合に、
dictGetHierarchy()関数が無限ループに陥る問題を修正しました。 - IN または JOIN 句内のサブクエリおよび Merge テーブルを用いた分散クエリ実行時に発生する
Syntax error: unexpected (...)エラーを修正しました。 - Dictionary テーブルからの SELECT クエリの誤った解釈を修正しました。
- IN および JOIN 句において 20 億要素を超える配列を使用した際に発生する "Cannot mremap" エラーを修正しました。
- ソースとして MySQL を使用する辞書のフェイルオーバー処理を修正しました。
ClickHouse の開発およびビルドワークフローの改善:
- Arcadia でビルドを行えるようになりました。
- ClickHouse のコンパイルに gcc 7 を使用できます。
- ccache+distcc を用いた並列ビルドがこれまでより高速になりました。
ClickHouse Release 1.1.54245, 2017-07-04
新機能:
- 分散 DDL(例:
CREATE TABLE ON CLUSTER) - Replicated テーブルに対するクエリ
ALTER TABLE CLEAR COLUMN IN PARTITION. - Dictionary テーブル用エンジン(辞書データへテーブル形式でアクセスするためのエンジン)。
- Dictionary データベースエンジン(このタイプのデータベースでは、接続されているすべての外部辞書に対応する Dictionary テーブルが自動的に利用可能になります)。
- ソースにリクエストを送信することで、辞書のアップデートを確認できるようになりました。
- 完全修飾カラム名。
- ダブルクォーテーションを使用した識別子のクォート。
- HTTP インターフェイスでのセッション対応。
- Replicated テーブルに対する OPTIMIZE クエリは、リーダーだけでなく他のレプリカでも実行できるようになりました。
後方互換性のない変更:
- SET GLOBAL を削除しました。
軽微な変更:
- アラートがトリガーされた後、ログにフルスタックトレースを出力するようになりました。
- 起動時の破損/余分なデータパーツ数の検証を緩和しました(誤検知が多すぎたため)。
バグ修正:
- Distributed テーブルへの挿入時に、不正な接続が「張り付き」状態になる問題を修正しました。
- Distributed テーブルを参照する Merge テーブルからのクエリで GLOBAL IN が動作するようになりました。
- Google Compute Engine 仮想マシン上で誤ったコア数が検出されていた問題を修正しました。
- キャッシュされた外部辞書における実行可能ソースの動作を変更しました。
- ヌル文字を含む文字列の比較を修正しました。
- 定数との比較時における Float32 型プライマリキーのフィールド比較を修正しました。
- フィールドサイズの誤った推定により、過度に大きなアロケーションが行われる可能性があった問題を修正しました。
- ALTER を使用してテーブルに追加した Nullable カラムをクエリしたときにクラッシュする問題を修正しました。
- 行数が LIMIT 未満の場合に Nullable カラムでソートするとクラッシュする問題を修正しました。
- 定数値のみからなる ORDER BY サブクエリを修正しました。
- 以前は、DROP TABLE の失敗後に Replicated テーブルが不正な状態のまま残ることがありました。
- 結果が空のスカラーサブクエリのエイリアスが失われないようになりました。
.soファイルが破損しても、コンパイルを使用するクエリがエラーで失敗しないようになりました。