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

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.xmltcp_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 関数を追加しました。丸め関数(roundfloorceilroundToExp2)のパフォーマンスを改善し、その動作ロジックを修正しました。小数および負の数に対する 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++ を使用できるようになりました。
  • 静的コード解析ツール Coverageclang-tidycppcheck の使用手順を追加しました。

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

  • 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 ファイルが破損しても、コンパイルを使用するクエリがエラーで失敗しないようになりました。