ClickHouse Release 1.1.54327, 2017-12-21
- データ損失につながる可能性のある、レプリケーションにおける レースコンディション の不具合を修正しました。この問題はバージョン 1.1.54310 および 1.1.54318 に影響します。これらのいずれかのバージョンで Replicated テーブルを使用している場合は、更新を強く推奨します。この問題は、ログに
Part ... from own log does not exist.のような Warning メッセージとして現れます。ログにこれらのメッセージが表示されていなくても、この問題の影響を受ける可能性があります。
ClickHouse リリース 1.1.54318, 2017-11-30
- SummingMergeTree エンジンでの merge 中に発生していた誤った行削除を修正
- レプリケーションされていない MergeTree エンジンにおけるメモリリークを修正
- MergeTree エンジンで頻繁な insert により発生していたパフォーマンス低下を修正
- レプリケーションキューの実行が停止する問題を修正
- サーバーログのローテーションとアーカイブ処理を修正
ClickHouse リリース 1.1.54310、2017-11-01
新機能:
- MergeTree family のテーブルエンジン向けに、カスタムのパーティションキーを追加しました。
- Kafka テーブルエンジンを追加しました。
- CatBoost モデルの読み込みと、ClickHouse に格納されたデータへの適用をサポートしました。
- UTC からのオフセットが整数でないタイムゾーンをサポートしました。
- time interval を使った算術演算をサポートしました。
- Date 型および DateTime 型の値の範囲を 2105 年まで拡張しました。
CREATE MATERIALIZED VIEW x TO yクエリを追加しました (materialized view のデータを格納する既存のテーブルを指定します) 。- 引数なしの
ATTACH TABLEクエリを追加しました。 - SummingMergeTree テーブルにおいて、名前が -Map で終わる Nested カラムの処理ロジックを sumMap 集約関数に切り出しました。これにより、そのようなカラムを明示的に指定できるようになりました。
- IP trie Dictionary の最大サイズを 128M エントリに拡大しました。
- getSizeOfEnumType 関数を追加しました。
- sumWithOverflow 集約関数を追加しました。
- Cap’n Proto 入力フォーマットをサポートしました。
- zstd アルゴリズムの使用時に圧縮レベルをカスタマイズできるようになりました。
後方互換性を持たない変更:
- Memory 以外のエンジンを指定した一時テーブルの作成は許可されません。
- View または MaterializedView エンジンを指定したテーブルの明示的な作成は許可されません。
- テーブル作成時に、サンプリングキー式が主キーに含まれていることを検証する新しいチェックが追加されました。
バグ修正:
- 分散テーブルへの同期 insert 時に発生していたハングを修正しました。
- レプリケートテーブルでのパーツの追加および削除がアトミックでなかった問題を修正しました。
- materialized view に挿入されたデータに対して、不要な重複排除が行われないようにしました。
- ローカルのレプリカが遅延しており、かつリモートのレプリカが利用できない分散テーブルに対してクエリを実行しても、エラーが発生しなくなりました。
- 一時テーブルの作成に
defaultデータベースへのアクセス権限が不要になりました。 - 引数なしで Array 型を指定した際にクラッシュしていた問題を修正しました。
- サーバーログが保存されているディスクボリュームがいっぱいのときに発生していたハングを修正しました。
- Unix epoch の最初の週における 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の場合でも、ユーザーが正しく更新されるようになりました。 - 実行可能 Dictionary が 0 以外のレスポンスコードを返した場合の処理を修正しました。
ClickHouse リリース 1.1.54292, 2017-09-20
新機能:
- 座標平面上の座標を扱うための
pointInPolygon関数を追加しました。 SummingMergeTreeと同様に配列の合計を計算するsumMap集約関数を追加しました。trunc関数を追加しました。丸め関数 (round,floor,ceil,roundToExp2) のパフォーマンスを改善し、動作ロジックを修正しました。分数および負の数に対するroundToExp2関数のロジックも変更しました。- ClickHouse の実行ファイルは、libc のバージョンへの依存性が以前より低くなりました。同一の ClickHouse 実行ファイルを、さまざまな Linux システムで実行できます。なお、コンパイル済みクエリ (設定
compile = 1を使用する場合。これはデフォルトでは無効です) を使う際には、引き続き依存関係があります。 - クエリの動的コンパイルにかかる時間を短縮しました。
バグ修正:
part ... intersects previous partというメッセージが断続的に出力され、レプリカの整合性を損なっていたエラーを修正しました。- シャットダウン中に ZooKeeper が利用できない場合、サーバーがハングアップするエラーを修正しました。
- レプリカの復元時に発生していた過剰なログ出力を削除しました。
- UNION ALL の実装におけるエラーを修正しました。
- block 内の最初のカラムが Array 型の場合に発生していた concat 関数のエラーを修正しました。
- system.merges テーブルで Progress が正しく表示されるようになりました。
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 から external dictionaries を読み込めるようになりました。
- SSL 経由で MySQL から external dictionaries を読み込めるようになりました (
ssl_cert、ssl_key、ssl_caパラメーター) 。 - ユーザーごとのクエリ全体の帯域幅使用量を制限するための設定
max_network_bandwidth_for_userを追加。 - 一時テーブルに対する
DROP TABLEをサポート。 CSVおよびJSONEachRowフォーマットから、Unix timestamp 形式のDateTime値を読み取れるようになりました。- 分散クエリでは、遅延しているレプリカはデフォルトで除外されるようになりました (デフォルトのしきい値は 5 分です) 。
- ALTER 中は FIFO ロックを使用するようになり、継続的に実行されているクエリによって ALTER クエリが無期限にブロックされることはなくなりました。
- 設定ファイルで
umaskを設定するオプションを追加。 DISTINCTを含むクエリのパフォーマンスを改善。
バグ修正:
- ZooKeeper 内の古いノードを削除する処理を改善しました。以前は、INSERT が非常に高頻度で行われると古いノードが削除されないことがあり、その結果、とくにサーバーのシャットダウンが遅くなる原因になっていました。
- ZooKeeper への接続時にホストを選択する際のランダム化を修正しました。
- レプリカが localhost の場合に、分散クエリで遅延しているレプリカの除外が正しく行われない問題を修正しました。
Nested構造内の要素に対してALTER MODIFYを実行した後、ReplicatedMergeTreeテーブルのデータパートが破損することがある不具合を修正しました。- SELECT クエリが「ハング」することがある不具合を修正しました。
- 分散 DDL クエリを改善しました。
CREATE TABLE ... AS <materialized view>クエリの問題を修正しました。Bufferテーブルに対するALTER ... CLEAR COLUMN IN PARTITIONクエリで発生していたデッドロックを解消しました。JSONEachRowおよびTSKVフォーマットの使用時に、Enumのデフォルト値が無効になっていた問題 (最小値ではなく 0 になっていた) を修正しました。executableソースを持つ Dictionary の使用時に、ゾンビプロセスが発生する問題を解消しました。- HEAD クエリで発生する segfault を修正しました。
ClickHouse の開発とビルドのワークフローを改善:
pbuilderを使って ClickHouse をビルドできます。- 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テーブルまたは Graphite でDiskSpaceReservedForMergeメトリクスを確認することもできます。大規模なマージが完了すればこの問題は自然に解消されるため、対応は不要です。これを許容できない場合は、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
- 分散テーブルへの insert 時に発生していた
DB::Exception: Assertion violation: !_path.empty()を修正しました。 - 入力データが ’;’ で始まる場合の、RowBinary フォーマットでの insert 時のパースを修正しました。
- 一部の集約関数 (例:
groupArray()) の実行時コンパイル中に発生していたエラーを修正しました。
ClickHouse リリース 1.1.54276、2017-08-16
新機能:
- SELECT クエリで、オプションの WITH セクションが使えるようになりました。クエリ例:
WITH 1+1 AS a SELECT a, a*a - 分散テーブルでは、INSERT を同期的に実行できるようになりました。すべてのデータがすべての分片に保存された後にのみ OK が返されます。これは設定 insert_distributed_sync=1 で有効になります。
- 16 バイトの識別子を扱うための UUID データ型を追加しました。
- Tableau との互換性のため、CHAR、FLOAT などの型の別名を追加しました。
- 時刻を数値に変換する関数 toYYYYMM、toYYYYMMDD、toYYYYMMDDhhmmss を追加しました。
- クラスター化 DDL クエリでサーバーを識別するために、ホスト名とあわせて IP アドレスも使用できるようになりました。
- 関数
substring(str, pos, len).で、定数以外の argument と負の OFFSET をサポートしました。 groupArray(max_size)(column)集約関数 に max_size parameter を追加し、パフォーマンスも最適化しました。
主な変更点:
- セキュリティの改善: すべてのサーバーファイルが 0640 権限で作成されるようになりました (
<umask>設定パラメーターで変更できます) 。 - 構文が無効なクエリに対するエラーメッセージを改善しました。
- MergeTree データの大きな部分をマージする際のメモリ消費を大幅に削減し、パフォーマンスを向上させました。
- ReplacingMergeTree エンジンのデータマージ性能を大幅に向上させました。
- 複数のソース側の挿入をまとめることで、分散テーブルからの非同期挿入のパフォーマンスを向上させました。この機能を有効にするには、設定 distributed_directory_monitor_batch_inserts=1 を使用してください。
後方互換性を持たない変更:
- 配列に対する
groupArray(array_column)関数の集約状態のバイナリフォーマットを変更しました。
変更点の完全な一覧:
output_format_json_quote_denormals設定を追加しました。これにより、JSONフォーマットで nan および inf の値を出力できるようになりました。- 分散テーブルから読み取る際のストリーム割り当てを最適化しました。
- 値が変わらない場合は、読み取り専用モードでも設定を変更できるようになりました。
preferred_block_size_bytes設定で指定されたブロックサイズの制限を満たすため、MergeTree エンジンで非整数グラニュールを取得できるようになりました。これにより、大きなカラムを持つテーブルに対するクエリの処理時に RAM 消費を削減し、cache の局所性を向上させます。toStartOfHour(x) op сonstexpr.のような条件に対して、toStartOfHour(x)のような式を含む索引を効率的に利用できるようになりました。- MergeTree エンジン向けの新しい設定を追加しました (config.xml の merge_tree セクション) :
replicated_deduplication_window_secondsは、レプリケートテーブルで insert の重複排除を行う際に許容される秒数を設定します。cleanup_delay_periodは、古いデータを削除するクリーンアップを開始する頻度を設定します。replicated_can_become_leaderは、レプリカが leader になること (および merge を割り当てること) を防ぐことができます。
- ZooKeeper から古いデータを削除するクリーンアップを高速化しました。
- クラスター DDL クエリに対して複数の改善と修正を行いました。特に注目すべきなのは、新しい設定
distributed_ddl_task_timeoutです。これは、クラスター内のサーバーからの応答を待つ時間を制限します。すべてのホストで DDL リクエストが実行されていない場合、応答にはタイムアウトエラーが含まれ、リクエストは非同期モードで実行されます。 - サーバーログにおけるスタックトレースの表示を改善しました。
- 圧縮方式に
"none"の値を追加しました。 - config.xml で複数の
dictionaries_configセクションを使用できるようになりました。 - ファイルシステム内のソケットを介して MySQL に接続できるようになりました。
- system.parts テーブルに、マークのサイズ (バイト単位) に関する情報を持つ新しいカラムが追加されました。
バグ修正:
- Merge テーブルを使用する分散テーブルで、
_tableフィールドに条件を指定した SELECT クエリが正しく動作するようになりました。 - データパーツのチェック時に ReplicatedMergeTree でまれに発生していたレースコンディションを修正しました。
- サーバー起動時の「leader election」で発生する可能性があったフリーズを修正しました。
- データソースのローカルレプリカを使用している場合、max_replica_delay_for_distributed_queries 設定が無視されていました。この問題を修正しました。
- 存在しないカラムをクリーンアップしようとした際の
ALTER TABLE CLEAR COLUMN IN PARTITIONの誤動作を修正しました。 - 空の Array または文字列を使用した際に multiIf 関数で発生していた例外を修正しました。
- Native フォーマットのデシリアライズ時に発生していた過剰なメモリ割り当てを修正しました。
- Trie 辞書の自動更新が正しく行われない問題を修正しました。
- SAMPLE 使用時に、Merge テーブルから GROUP BY 句を含むクエリを実行すると発生していた例外を修正しました。
- 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 クエリの誤った解釈を修正しました。
- 要素数が 20 億を超える Array を IN 句および JOIN 句で使用した際の “Cannot mremap” エラーを修正しました。
- ソースに MySQL を使用する辞書のフェイルオーバーを修正しました。
ClickHouse の開発・ビルドのワークフローを改善:
- Arcadia でビルドできるようになりました。
- ClickHouse のコンパイルに gcc 7 を使用できます。
- ccache+distcc を使った並列ビルドがさらに高速になりました。
ClickHouse リリース 1.1.54245, 2017-07-04
新機能:
- 分散DDL (たとえば
CREATE TABLE ON CLUSTER) - レプリケートクエリ
ALTER TABLE CLEAR COLUMN IN PARTITION. - Dictionaryテーブル用のエンジン (テーブル形式でDictionaryデータにアクセスできます) 。
- Dictionaryデータベースエンジン (この種のデータベースでは、接続されているすべての外部Dictionaryに対してDictionaryテーブルが自動的に利用可能になります) 。
- 取得元にリクエストを送信して、Dictionaryの更新を確認できます。
- 修飾付きカラム名
- 二重引用符を使った識別子のクォート
- HTTPインターフェイスでのセッション
- レプリケートテーブルに対するOPTIMIZEクエリは、リーダー上でなくても実行できます。
後方互換性を持たない変更:
- SET GLOBAL を廃止しました。
軽微な変更:
- アラートがトリガーされると、ログに完全なスタックトレースが出力されるようになりました。
- 起動時の破損したデータパーツ数および余分なデータパーツ数の検証を緩和しました (誤検知が多すぎたため) 。
バグ修正:
- 分散テーブルへの insert 時に、不正な接続が「張り付いたまま」になる問題を修正しました。
- 分散テーブルを参照する Merge テーブルからのクエリで、GLOBAL IN が動作するようになりました。
- Google Compute Engine の仮想マシンで誤ったコア数が検出される問題を修正しました。
- cached external dictionaries の実行可能なソースの動作を変更しました。
- ヌル文字を含む文字列の比較を修正しました。
- 定数との Float32 主キー フィールドの比較を修正しました。
- 以前は、フィールドのサイズの見積もりが不正確だと、過大なメモリ割り当てにつながることがありました。
- ALTER を使用してテーブルに追加した Nullable カラムをクエリした際のクラッシュを修正しました。
- Nullable カラムでソートする際、行数が LIMIT より少ない場合に発生するクラッシュを修正しました。
- 定数値だけで構成される ORDER BY サブクエリを修正しました。
- 以前は、DROP TABLE の失敗後に Replicated テーブルが無効な状態のままになることがありました。
- 結果が空のスカラー サブクエリの別名が失われないようになりました。
- コンパイルを使用するクエリで、.so ファイルが破損していてもエラーで失敗しなくなりました。