2018年の変更履歴
ClickHouse リリース 18.16
ClickHouse リリース 18.16.1, 2018-12-21
バグ修正:
- ODBC ソースを使用した辞書の更新で問題を引き起こしていたエラーを修正しました。 #3825, #3829
- 集約関数の JIT コンパイルが LowCardinality カラムでも動作するようになりました。 #3838
改善:
low_cardinality_allow_in_native_format設定項目(デフォルトで有効です)を追加しました。無効にした場合、LowCardinality カラムは SELECT クエリでは通常のカラムに変換され、INSERT クエリでは通常のカラムが想定されます。 #3879
ビルドの改善:
- macOS および ARM 環境でのビルドに関する修正を行いました。
ClickHouse リリース 18.16.0, 2018-12-14
新機能:
- セミ構造化入力フォーマット(
JSONEachRow、TSKV)でデータをロードする際、欠損フィールドに対してDEFAULT式が評価されます。この機能はinsert_sample_with_metadata設定で有効になります。 #3555 ALTER TABLEクエリに、テーブル列の追加や削除時にソートキーを変更するためのMODIFY ORDER BYアクションが追加されました。これは、このソートキーに基づいてマージ時に追加処理を行うMergeTreeファミリーのテーブル、例えばSummingMergeTreeやAggregatingMergeTreeなどで有用です。 #3581 #3755MergeTreeファミリーのテーブルに対して、ソートキー(ORDER BY)とインデックス(PRIMARY KEY)を別々に指定できるようになりました。ソートキーはインデックスより長くすることができます。 #3581- HDFS へのデータのインポートおよびエクスポートのために、
hdfsテーブル関数とHDFSテーブルエンジンが追加されました。 chenxing-xc - base64 を扱うための関数
base64Encode、base64Decode、tryBase64Decodeが追加されました。 Alexander Krasheninnikov uniqCombined集約関数の精度(使用する HyperLogLog セル数)をパラメータで設定できるようになりました。 #3406- ClickHouse でコミットを行ったすべての人の名前を含む
system.contributorsテーブルが追加されました。 #3452 - すべてのパーティションを一度にバックアップするために、
ALTER TABLE ... FREEZEクエリでパーティションを省略できるようになりました。 #3514 - 戻り値の型を指定する必要がない
dictGetおよびdictGetOrDefault関数が追加されました。型はディクショナリの定義から自動的に決定されます。 Amos Bird - テーブル定義でカラムにコメントを指定し、
ALTERを使って変更できるようになりました。 #3377 - 単純キーを持つ
Join型テーブルの読み取りがサポートされました。 Amos Bird Join型テーブルを作成する際に、join_use_nulls、max_rows_in_join、max_bytes_in_join、join_overflow_modeオプションを指定できるようになりました。 Amos BirdJoin型テーブルをディクショナリのように利用できるjoinGet関数が追加されました。 Amos Bird- テーブルキーに関する情報を提供するために、
system.tablesテーブルにpartition_key、sorting_key、primary_key、sampling_keyカラムが追加されました。 #3609 system.columnsテーブルにis_in_partition_key、is_in_sorting_key、is_in_primary_key、is_in_sampling_keyカラムが追加されました。 #3609system.partsテーブルにmin_timeおよびmax_timeカラムが追加されました。これらのカラムは、パーティションキーがDateTimeカラムから成る式である場合に設定されます。 Emmanuel Donin de Rosière
バグ修正:
LowCardinalityデータ型に対する不具合修正とパフォーマンスの改善。LowCardinality(Nullable(...))を使用したGROUP BY。extremesの値の取得。高階関数の処理。LEFT ARRAY JOIN。分散GROUP BY。Arrayを返す関数。ORDER BYの実行。Distributedテーブルへの書き込み (nicelulu)。Nativeプロトコルを実装する旧クライアントからのINSERTクエリに対する後方互換性。JOINに対するLowCardinalityのサポート。単一ストリームでの動作時のパフォーマンス改善。 #3823 #3803 #3799 #3769 #3744 #3681 #3651 #3649 #3641 #3632 #3568 #3523 #3518select_sequential_consistencyオプションの動作を修正しました。以前は、この設定を有効にしていると、新しいパーティションへの書き込みを開始した直後に、不完全な結果が返されることがありました。 #2863- DDL の
ON CLUSTERクエリおよびALTER UPDATE/DELETEクエリを実行する際に、データベースが正しく指定されるようになりました。 #3772 #3460 - VIEW 内のサブクエリに対してデータベースが正しく指定されるようになりました。 #3521
VersionedCollapsingMergeTreeにおけるFINAL付きのPREWHEREのバグを修正しました。 7167bfd7- テーブルのロックを待機していてまだ開始されていないクエリを、
KILL QUERYでキャンセルできるようになりました。 #3517 - 真夜中に時計が巻き戻された場合の日付と時刻の計算を修正しました(これはイランで発生しており、1981年から1983年まではモスクワでも発生していました)。以前は、この問題により本来より1日早く時刻がリセットされてしまい、さらにテキスト形式での日付と時刻の書式設定も誤っていました。 #3819
VIEWとサブクエリにおいてデータベース名を省略した一部のケースで発生していたバグを修正しました。 Winter Zhang- 内部の
MATERIALIZED VIEWをロックしていなかったために、MATERIALIZED VIEWの読み取りと削除を同時に行った際に発生していたレースコンディションを修正しました。 #3404 #3694 Lock handler cannot be nullptr.というエラーを修正しました。 #3689compile_expressionsオプションが有効な場合(デフォルトで有効になっています)のクエリ処理を修正しました。now関数のような非決定的な定数式は、もはや展開されません。 #3457toDecimal32/64/128関数で scale 引数に非定数を指定した場合に発生していたクラッシュを修正しました。ValuesフォーマットでNULL要素を含む配列を、NullableなしのArray型のカラムに挿入しようとした際のエラーを修正しました(input_format_values_interpret_expressions= 1 の場合)。 #3487 #3503- ZooKeeper が利用できない場合に発生していた
DDLWorkerの継続的なエラーログ出力を修正。 8f50c620 DateおよびDateTime型の引数に対するquantile*関数の戻り値の型を修正しました。 #3580- 式を伴わない単純なエイリアスのみを指定している場合の
WITH句を修正しました。 #3570 enable_optimize_predicate_expressionが有効な場合に、名前付きサブクエリおよび修飾列名を含むクエリの処理に関する不具合を修正しました。 Winter Zhang- マテリアライズドビュー使用時に発生していたエラー
Attempt to attach to nullptr thread groupを修正しました。 Marek Vavruša arrayReverse関数に一部の誤った引数を渡した際にクラッシュが発生する問題を修正しました。 73e3a7b6extractURLParameter関数におけるバッファオーバーフローを修正しました。パフォーマンスを改善しました。ゼロバイトを含む文字列を正しく処理できるようにしました。 141e9799lowerUTF8関数およびupperUTF8関数における固定長バッファオーバーフローを修正しました。これらの関数をFixedString型の引数に対しては実行できないようにしました。 #3662MergeTreeテーブル削除時にまれに発生していたレースコンディションを修正しました。 #3680Bufferテーブルからの読み取り中に、対象テーブルに対して同時にALTERまたはDROPを実行した場合に発生していたレースコンディションを修正しました。 #3719max_temporary_non_const_columnsの制限を超えた場合にセグメンテーションフォルトが発生する問題を修正しました。 #3788
改善点:
- サーバーは処理済みの設定ファイルを
/etc/clickhouse-server/ディレクトリには書き込みません。代わりに、path内のpreprocessed_configsディレクトリに保存します。これは、/etc/clickhouse-server/ディレクトリがclickhouseユーザーに対して書き込み権限を持たないようになっており、その結果セキュリティが向上することを意味します。 #2443 min_merge_bytes_to_use_direct_ioオプションはデフォルトで 10 GiB に設定されています。MergeTree ファミリーのテーブルから大きなデータパーツを生成するマージはO_DIRECTモードで実行され、これにより不要なページキャッシュの大量な破棄が防止されます。#3504- 非常に多くのテーブルが存在する場合のサーバー起動を高速化。 #3398
- レプリカ間の接続に、接続プールと HTTP
Keep-Aliveを追加しました。 #3594 - クエリ構文が無効な場合、
HTTPインターフェイスでは400 Bad Requestステータスコードが返されます(以前は 500 が返されていました)。 31bc680a - 互換性のために、
join_default_strictnessオプションはデフォルトでALLに設定されています。 120e2cbe re2ライブラリにおける、無効または複雑な正規表現に対するstderrへのログ出力を削除しました。 #3723Kafkaテーブルエンジンに、Kafka からの読み取りを開始する前にサブスクリプションをチェックする機能と、テーブルに対する kafka_max_block_size 設定を追加。 Marek VavrušacityHash64、farmHash64、metroHash64、sipHash64、halfMD5、murmurHash2_32、murmurHash2_64、murmurHash3_32、murmurHash3_64関数は、任意個の引数およびタプル型の引数にも対応するようになりました。 #3451 #3519arrayReverse関数があらゆる型の配列に対して動作するようになりました。 73e3a7b6timeSlots関数に、スロットサイズを指定するオプションの引数を追加しました。 Kirill ShvakovFULLおよびRIGHT JOINにおいては、右側のテーブルからの結合されなかったデータのストリームに対してmax_block_size設定が使用されます。 Amos Bird- TLS を有効にするために、
clickhouse-benchmarkとclickhouse-performance-testに--secureコマンドライン引数を追加しました。 #3688 #3690 Buffer型テーブルの構造が宛先テーブルの構造と一致しない場合における型変換。 Vitaly Baranov- 指定した時間非アクティブ状態が続いた後にキープアライブパケットを送信できるようにするため、
tcp_keep_alive_timeoutオプションを追加しました。 #3441 system.partsテーブルのパーティションキーが単一カラムで構成されている場合に、その値を不要にクオートしていた処理を削除しました。 #3652DateおよびDateTimeデータ型でも剰余演算(modulo)関数が利用できるようになりました。 #3385POWER、LN、LCASE、UCASE、REPLACE、LOCATE、SUBSTRおよびMID関数に対してシノニムを追加しました。 #3774 #3763 SQL 標準との互換性のため、一部の関数名は大文字・小文字を区別しません。SQL との互換性のために、SUBSTRING(expr FROM start FOR length)というシンタックスシュガーを追加しました。 #3804clickhouse-serverの実行ファイルコードに対応するメモリページをmlockし、メモリからページアウトされるのを防ぐ機能を追加しました。この機能はデフォルトでは無効になっています。 #3553O_DIRECTからの読み込み時のパフォーマンスが向上しました(min_bytes_to_use_direct_ioオプション有効時)。 #3405- 定数キー引数および非定数デフォルト引数を取る
dictGet...OrDefault関数のパフォーマンスを改善。 Amos Bird firstSignificantSubdomain関数はgov、mil、eduドメインも処理するようになりました。Igor Hatarist によりパフォーマンスが改善されました。 #3628/etc/default/clickhouse内でCLICKHOUSE_PROGRAM_ENVを定義することで、SYS-V init.dスクリプトを使用してclickhouse-serverを起動する際に利用するカスタム環境変数を指定できるようになりました。 Pavlo Bashynskyi- clickhouse-server の init スクリプトの戻りコードを修正。 #3516
system.metricsテーブルにVersionIntegerメトリクスが追加され、system.build_optionsにはVERSION_INTEGER行が追加されました。この行には、18016000のような ClickHouse バージョンの数値表現が含まれます。 #3644Date型を数値と比較できないようにしました。これは、date = 2018-12-17のように、日付をクォートし忘れる潜在的なエラーを防ぐためです。 #3687rowNumberInAllBlocksのようなステートフルな関数の動作を修正しました。以前は、クエリ解析の段階からカウントを開始していたため、結果が本来よりも 1 だけ大きい値を出力していました。Amos Birdforce_restore_dataファイルを削除できない場合、エラーメッセージが表示されます。 Amos Bird
ビルドの改善:
- 潜在的なメモリリークを修正するために
jemallocライブラリを更新しました。 Amos Bird - ビルドをデバッグできるよう、
jemallocによるプロファイリングをデフォルトで有効化しました。 2cc82f5c - システムに
Dockerだけがインストールされている状態でも統合テストを実行できるようにしました。 #3650 - SELECT クエリに fuzz expression テストを追加しました。 #3442
- さらに多くのレースコンディションを検出するため、機能テストを並列かつランダムな順序で実行するコミット用のストレステストを追加しました。 #3438
- Docker イメージ内での clickhouse-server の起動方法を改善しました。 Elghazal Ahmed
- Docker イメージ向けに、
/docker-entrypoint-initdb.dディレクトリ内のファイルを使用してデータベースを初期化する機能を追加しました。 Konstantin Lebedev - ARM 向けビルドに関する修正を行いました。 #3709
後方互換性のない変更:
Date型と数値を比較する機能を削除しました。toDate('2018-12-18') = 17883の代わりに、明示的な型変換である= toDate(17883)を使用する必要があります。 #3687
ClickHouse リリース 18.14
ClickHouse リリース 18.14.19, 2018-12-19
バグ修正:
- ODBC ソースを使用したディクショナリの更新で問題を引き起こしていたエラーを修正。 #3825, #3829
- DDL の
ON CLUSTERクエリを実行する際に、データベースが正しく指定されるように修正。 #3460 max_temporary_non_const_columns制限を超えた場合にセグフォルトが発生していた問題を修正。 #3788
ビルドの改善:
- ARM 上でのビルドに関する修正。
ClickHouse リリース 18.14.18, 2018-12-04
バグ修正:
range型ディクショナリに対するdictGet...関数で、引数の一方が定数でもう一方が非定数の場合に発生していたエラーを修正。 #3751- 比較的新しいバージョンの Linux カーネルでのみ発生していた、Linux カーネルログに
netlink: '...': attribute type 1 has an invalid lengthというメッセージが出力される問題を修正。 #3749 FixedString型の引数に対するempty関数でセグフォルトが発生していた問題を修正。 Daniel, Dao Quang Minhmax_query_size設定値が大きい場合に、過剰なメモリ割り当てが行われていた問題を修正(max_query_sizeバイトのメモリチャンクが一度に事前割り当てされていた)。 #3720
ビルドの変更:
- OS パッケージ提供のバージョン 7 の LLVM/Clang ライブラリ(これらのライブラリはクエリのランタイムコンパイルに使用される)を用いたビルドの問題を修正。 #3582
ClickHouse リリース 18.14.17, 2018-11-30
バグ修正:
- ODBC ブリッジプロセスがメインサーバープロセスと一緒に終了しない場合があった問題を修正。 #3642
- リモートテーブルのカラムリストと異なるカラムリストで
Distributedテーブルに同期挿入する際の問題を修正。 #3673 - MergeTree テーブルを削除(DROP)する際にクラッシュを引き起こす可能性があった、まれなレースコンディションを修正。 #3643
- クエリスレッドの作成が
Resource temporarily unavailableエラーで失敗した場合にクエリがデッドロックする問題を修正。 #3643 CREATE AS table構文を使用し、かつENGINE句をAS tableより前に指定した場合に、ENGINE句のパースが正しく行われず、指定したエンジンが無視されてしまう問題を修正。 #3692
ClickHouse リリース 18.14.15, 2018-11-21
バグ修正:
Array(String)型のカラムをデシリアライズする際に、メモリチャンクのサイズが過大に見積もられ、「Memory limit exceeded」エラーが発生していた問題を修正。この問題はバージョン 18.12.13 で導入された。 #3589
ClickHouse リリース 18.14.14, 2018-11-20
バグ修正:
- クラスターがセキュア接続で構成されている場合(
<secure>フラグ)におけるON CLUSTERクエリを修正。#3599
ビルドの変更:
- (system の llvm-7、macOS に関する)問題を修正。#3582
ClickHouse リリース 18.14.13, 2018-11-08
バグ修正:
Block structure mismatch in MergingSorted streamエラーを修正。#3162- クラスター設定でセキュア接続(
<secure>フラグ)が有効化されている場合のON CLUSTERクエリを修正。#3465 SAMPLE、PREWHEREおよびエイリアス列を使用するクエリでのエラーを修正。#3543min_bytes_to_use_direct_io設定が有効な場合にまれに発生するunknown compression methodエラーを修正。3544
パフォーマンスの改善:
- AMD EPYC プロセッサ上で実行する際に、UInt16 または Date 型の列に対する
GROUP BYを含むクエリのパフォーマンス劣化を修正。Igor Lapko - 長い文字列を処理するクエリのパフォーマンス劣化を修正。#3530
ビルドの改善:
ClickHouse リリース 18.14.12, 2018-11-02
バグ修正:
- 2 つの名前なしサブクエリを結合した際のクラッシュを修正。#3505
- 外部データベースをクエリする際に、空の
WHERE句を持つ誤ったクエリが生成される問題を修正。hotid - ODBC 辞書で誤ったタイムアウト値が使用される問題を修正。Marek Vavruša
ClickHouse リリース 18.14.11, 2018-10-29
バグ修正:
- LIMIT クエリでの
Block structure mismatch in UNION stream: different number of columnsエラーを修正。#2156 - Nested 構造内に配列を含むテーブルでデータをマージする際のエラーを修正。#3397
merge_tree_uniform_read_distribution設定が無効になっている場合(デフォルトでは有効)に誤ったクエリ結果が返される問題を修正。#3429- Native 形式で Distributed テーブルに挿入する際のエラーを修正。#3411
ClickHouse リリース 18.14.10, 2018-10-23
compile_expressions設定(式の JIT コンパイル)はデフォルトで無効化。#3410enable_optimize_predicate_expression設定はデフォルトで無効化。
ClickHouse リリース 18.14.9, 2018-10-16
新機能:
GROUP BY用のWITH CUBE修飾子(代替構文としてGROUP BY CUBE(...)も利用可能)。 #3172formatDateTime関数を追加。 Alexandr KrasheninnikovJDBCテーブルエンジンとjdbcテーブル関数を追加(clickhouse-jdbc-bridge のインストールが必要)。 Alexandr Krasheninnikov- ISO 週番号を扱うための関数
toISOWeek、toISOYear、toStartOfISOYear、toDayOfYearを追加。 #3146 MySQLおよびODBCテーブルでNullableカラムを使用できるようになりました。 #3362- ネストされたデータ構造を、
JSONEachRowフォーマットでネストされたオブジェクトとして読み取れるようになりました。input_format_import_nested_json設定を追加。 Veloman Yunkan - データ挿入時に、多くのマテリアライズドビュー(
MATERIALIZED VIEW)で並列処理が利用可能になりました。parallel_view_processing設定を参照してください。 Marek Vavruša SYSTEM FLUSH LOGSクエリを追加(query_logなどのシステムテーブルへのログを強制的にフラッシュ)。 #3321Replicatedテーブルを宣言する際に、事前定義されたdatabaseおよびtableマクロを使用できるようになりました。 #3251- 10 のべき乗を表す工学表記で
Decimal型の値を読み取れるようになりました。 #3153
実験的機能:
改善点:
ORDER BYとLIMITを含むクエリのメモリ使用量を大幅に削減しました。max_bytes_before_remerge_sort設定を参照してください。 #3205JOIN(LEFT、INNERなど)が指定されていない場合は、自動的にINNER JOINが使用されます。 #3147- 修飾付きアスタリスクは
JOINを含むクエリでも正しく動作します。 Winter Zhang ODBCテーブルエンジンは、リモートデータベースの SQL 方言における識別子の引用方法を正しく選択します。Alexandr Krasheninnikovcompile_expressions設定(式のJITコンパイル)はデフォルトで有効になっています。DROP DATABASE/TABLE IF EXISTSとCREATE DATABASE/TABLE IF NOT EXISTSを同時に実行した場合の動作を修正しました。以前は、CREATE DATABASE ... IF NOT EXISTSクエリがエラーメッセージ"File ... already exists"を返したり、CREATE TABLE ... IF NOT EXISTSおよびDROP TABLE IF EXISTSクエリが"Table ... is creating or attaching right now"を返すことがありました。 #3101- 右辺が定数の
LIKEおよびIN式は、MySQL または ODBC テーブルに対するクエリ時にリモートサーバーへ渡されるようになりました。 #3182 - MySQL および ODBC テーブルからクエリを実行する際、
WHERE句内の定数式との比較がリモートサーバーに渡されるようになりました。以前は、定数値との比較のみが渡されていました。 #3182 - ターミナルにおける
Prettyフォーマットの行幅を正しく計算し、表意文字(漢字など)を含む文字列にも対応しました。Amos Bird。 ON CLUSTERはALTER UPDATEクエリで指定できます。JSONEachRowフォーマットでのデータ読み取り性能を改善しました。 #3332- 互換性維持のために
LENGTHおよびCHARACTER_LENGTH関数のシノニムを追加しました。CONCAT関数は大文字と小文字を区別しなくなりました。 #3306 DateTime型のシノニムとしてTIMESTAMPを追加しました。 #3390- サーバーログでは、ログ行がクエリに関連していない場合でも、常に query_id 用のスペースが確保されています。これにより、テキスト形式のサーバーログをサードパーティ製ツールで解析しやすくなります。
- クエリのメモリ消費量が整数値ギガバイトの次の段階を超えたタイミングで、その情報がログに記録されるようになりました。 #3205
- Native プロトコルを使用するクライアントライブラリが、
INSERTクエリに対してサーバーが想定している列数よりも誤って少ない列しか送信しない場合に備え、互換性モードを追加しました。この状況は、clickhouse-cpp ライブラリを使用している場合に発生する可能性がありました。以前は、この状況によってサーバーがクラッシュしていました。 #3171 clickhouse-copierのユーザー定義 WHERE 式で、partition_keyエイリアス(ソーステーブルのパーティションによる追加フィルタリング用)を使用できるようになりました。これは、コピー中にパーティション方式がわずかに変更される場合に有用です。 #3166- 高負荷時にデータ読み取り速度を自動的に抑制するため、
Kafkaエンジンの処理フローはバックグラウンドのスレッドプールに移行されました。Marek Vavruša。 Cap'n'Proto formatにおけるstructのような構造体のTupleおよびNested値の読み取りに対応。 Marek VavrušafirstSignificantSubdomain関数で使用されるトップレベルドメインのリストに、bizドメインが追加されました。 decaseal- 外部辞書の設定では、
null_valueはそのデータ型のデフォルト値として解釈されます。 #3330 Decimalに対するintDivおよびintDivOrZero関数のサポートを追加。 b48402e8sumMap集約関数のキーとしてDate、DateTime、UUID、Decimal型をサポートするようになりました。 #3281- 外部ディクショナリで
Decimalデータ型をサポート。#3324 SummingMergeTreeテーブルにおけるDecimalデータ型のサポート。 #3348if関数にUUID型向けの特殊化を追加しました。 #3366MergeTree tableからの読み込み時に発生するopenおよびcloseシステムコールの回数を減らしました。 #3283TRUNCATE TABLEクエリは任意のレプリカ上で実行できるようになり、クエリはリーダーレプリカに転送されます。Kirill Shvakov
バグ修正:
range_hashed辞書用のDictionaryテーブルに存在した問題を修正しました。この不具合はバージョン 18.12.17 で発生していました。 #1702range_hashedディクショナリの読み込み時に発生していたエラー(メッセージUnsupported type Nullable (...))を修正しました。このエラーはバージョン 18.12.17 で発生していました。 #3362pointInPolygon関数において、多くの頂点が互いに近接して配置されたポリゴンで計算誤差が蓄積することにより発生していた不具合を修正しました。 #3331 #3341- データパーツをマージした後、生成されたパーツのチェックサムが別のレプリカで同じマージを行った結果と異なる場合、マージ結果は削除され、そのデータパーツは別のレプリカからダウンロードされます(これは正しい動作です)。しかしデータパーツをダウンロードした後、すでにそのパーツが存在するというエラーのためにワーキングセットに追加できないことがありました(マージ後にデータパーツが一定の遅延を伴って削除されるためです)。この結果、同じデータを繰り返しダウンロードしようとするサイクル的な再試行が発生していました。 #3194
- クエリによるメモリ消費量の合計の計算が誤っていた問題を修正しました(この誤った計算により、
max_memory_usage_for_all_queries設定が正しく動作せず、MemoryTrackingメトリクスの値も誤っていました)。この不具合はバージョン 18.12.13 で発生していました。Marek Vavruša CREATE TABLE ... ON CLUSTER ... AS SELECT ...の動作に関する不具合を修正しました。これはバージョン 18.12.13 で発生していたエラーです。 #3247JOINがリモートサーバー上でのみ実行される場合に、クエリを開始するサーバーでJOIN用データ構造を不要に準備していた問題を修正しました。 #3340Kafkaエンジンにおける不具合を修正しました:データ読み取り開始時に例外が発生した後にデッドロックが起きる問題、および処理完了時にロックが残る問題 Marek Vavruša。Kafkaテーブルに対して、オプションのschemaパラメータ(Cap'n'Protoフォーマットのスキーマ)が渡されていませんでした。 Vojtech Splichal- ZooKeeper サーバーのアンサンブル内に、接続は受け付けるもののハンドシェイクに応答せず直ちに接続を閉じてしまうサーバーが含まれている場合、ClickHouse は別のサーバーへの接続を試みます。以前は、この状況で
Cannot read all data. Bytes read: 0. Bytes expected: 4.というエラーが発生し、サーバーを起動できませんでした。 8218cf3a - ZooKeeper サーバーの集合に、DNS クエリでエラーとなるサーバーが含まれている場合、これらのサーバーは無視されます。 17b8e209
VALUESフォーマットでデータを挿入する際(input_format_values_interpret_expressions = 1の場合)のDateとDateTime間の型変換を修正しました。以前は、Unixエポックからの経過日数を表す数値と Unix タイムスタンプとの間で変換が行われており、そのため予期しない結果が生じることがありました。 #3229Decimalと整数の間の型変換を修正しました。 #3211enable_optimize_predicate_expression設定の不具合を修正しました。 Winter Zhang;のようなデフォルト以外の CSV セパレータを使用した場合に、浮動小数点数を含む CSV 形式で発生していたパースエラーを修正 #3155arrayCumSumNonNegative関数を修正しました(累積値が 0 未満の場合は、負の値を累積しません)。 Aleksey StudnevPREWHERE使用時に、Distributedテーブルを基盤とするMergeテーブルの動作を修正しました。 #3165ALTER UPDATEクエリのバグ修正。- バージョン 18.12 で発生した
odbcテーブル関数のバグを修正しました。#3197 StateArrayコンビネーターを用いる集約関数の動作を修正しました。#3188Decimal値をゼロで除算した際にクラッシュする不具合を修正しました。 69dd6609Decimalと整数の引数を使用する演算で出力される型を修正しました。 #3224Decimal128に対するGROUP BY実行時に発生していたセグメンテーションフォルトを修正しました。 3359ba06log_query_threads設定(クエリ実行の各スレッドに関する情報をログに記録する)は、log_queriesオプション(クエリに関する情報をログに記録する)が 1 に設定されている場合にのみ有効になります。log_query_threadsオプションはデフォルトで有効なため、以前はクエリのログ記録が無効でも、スレッドに関する情報はログに記録されていました。 #3241- quantiles 集約関数の分散実行時に発生していたエラー(エラーメッセージ
Not found column quantile...)を修正しました。 292a8855 - バージョン 18.12.17 のサーバーとそれ以前のサーバーからなるクラスタを同時に使用した際の互換性の問題を修正しました。固定長キーと可変長キーの両方を含む GROUP BY を用いた分散クエリで、集計対象データ量が多い場合、返されるデータが常に完全に集約されるとは限らず(同じ集約キーを持つ 2 つの異なる行が含まれる)、不正な結果となることがありました。 #3254
- テストで宣言された置換の一部しかクエリに含まれていない場合の、
clickhouse-performance-testにおける置換処理を修正しました。 #3263 FINALとPREWHEREを併用した際に発生していたエラーを修正しました。 #3298ALTER操作で追加された列に対してPREWHEREを使用した場合に発生していたエラーを修正しました。 #3298DEFAULTおよびMATERIALIZED式でarrayJoinが使用されていないことを検証するチェックを追加しました。以前は、データ挿入時にarrayJoinによってエラーが発生していました。 #3337PREWHERE句にarrayJoinが使用されていない場合を検出するチェックを追加しました。以前は、クエリ実行時にSize ... does not matchやUnknown compression methodといったメッセージが表示されることがありました。 #3357- 等価比較の AND 連鎖を対応する IN 式に置き換える最適化の後、まれなケースで発生する可能性があったセグメンテーションフォルトを修正しました。 liuyimin-bytedance
clickhouse-benchmarkに対する軽微な修正: 以前はクライアント情報がサーバーに送信されていませんでしたが、これにより、終了時および反復回数を制限する際の実行クエリ数が、より正確に算出されるようになりました。 #3351 #3352
後方互換性のない変更:
allow_experimental_decimal_typeオプションを削除しました。Decimalデータ型はデフォルトで利用可能になりました。 #3329
ClickHouse リリース 18.12
ClickHouse リリース 18.12.17, 2018-09-16
新機能:
- 外部辞書を更新する必要があるかどうかを確認するクエリを指定できる
invalidate_queryが、clickhouseソース向けに実装されました。#3126 Date型に加えて、UInt*、Int*、およびDateTimeデータ型を、範囲の境界を定義するrange_hashed外部辞書キーとして使用できるようになりました。これにより、開いた範囲を示すためにNULLを使用できるようになりました。Vasily NemkovDecimal型がvar*およびstddev*集約関数をサポートするようになりました。#3129Decimal型が数学関数(exp、sinなど)をサポートするようになりました。#3129system.part_logテーブルにpartition_idカラムが追加されました。#3089
バグ修正:
MergeがDistributedテーブルで正しく動作するようになりました。Winter Zhang- ClickHouse を
Ubuntu Preciseおよびそれ以前のバージョンで実行できなくしていた非互換性(glibcバージョンへの不要な依存)を修正しました。この非互換性はバージョン 18.12.13 で発生しました。#3130 enable_optimize_predicate_expression設定での不具合を修正しました。Winter Zhang- レプリカのクラスターを 18.12.13 より前のバージョンで運用している際に、新しいバージョンのサーバー上でテーブルの新しいレプリカを同時に作成すると発生した、後方互換性に関する小さな問題を修正しました(メッセージ
Can not clone replica, because the ... updated to new ClickHouse versionが表示されますが、内容としては筋が通っていても本来発生すべきではありません)。#3122
後方互換性のない変更:
enable_optimize_predicate_expressionオプションがデフォルトで有効になりました(かなり楽観的な設定です)。カラム名の検索に関連するクエリ解析エラーが発生する場合は、enable_optimize_predicate_expressionを 0 に設定してください。Winter Zhang
ClickHouse リリース 18.12.14, 2018-09-13
新機能:
ALTER UPDATEクエリのサポートを追加しました。#3035- ユーザーの DDL クエリへのアクセスを制限する
allow_ddlオプションを追加しました。#3104 - マージの合計サイズに対するしきい値を設定できる、
MergeTreeエンジン用のmin_merge_bytes_to_use_direct_ioオプションを追加しました(しきい値を超えると、データパートファイルは O_DIRECT を使用して処理されます)。#3117 system.mergesシステムテーブルにpartition_idカラムが追加されました。#3099
改良
- ミューテーションの間にデータパートが変更されなかった場合、レプリカはそのパートをダウンロードしません。#3103
clickhouse-clientを使用する際に、設定名のオートコンプリート(補完)が利用可能になりました。#3106
バグ修正:
- 挿入時に、
Nested型フィールドの要素である配列のサイズを検査する処理を追加しました。 #3118 ODBCソースおよびhashedストレージを使用した外部辞書の更新時に発生していたエラーを修正しました。このエラーはバージョン 18.12.13 で発生していました。IN条件を含むクエリから一時テーブルを作成する際にクラッシュする問題を修正しました。 Winter ZhangNULL要素を含む可能性がある配列に対する集約関数のエラーを修正しました。 Winter Zhang
ClickHouse リリース 18.12.13, 2018-09-10
新機能:
DECIMAL(digits, scale)データ型(Decimal32(scale)、Decimal64(scale)、Decimal128(scale))を追加しました。このデータ型を有効にするには、設定allow_experimental_decimal_typeを使用します。 #2846 #2970 #3008 #3047GROUP BY用の新しいWITH ROLLUP修飾子(代替構文:GROUP BY ROLLUP(...))。#2948JOINを含むクエリでは、SQL 標準に従い、アスタリスク文字はすべてのテーブルに含まれるカラムの一覧に展開されます。ユーザー設定レベルでasterisk_left_columns_onlyを 1 に設定することで、従来の動作に戻せます。 Winter Zhang- テーブル関数を用いた JOIN をサポートしました。 Winter Zhang
- clickhouse-client で Tab キーによる自動補完に対応。 Sergey Shcherbin
- clickhouse-client で Ctrl+C を押すと、入力中のクエリがクリアされます。 #2877
join_default_strictness設定(値:",'any','all')を追加しました。これにより、JOIN句でANYまたはALLを明示的に指定する必要がなくなります。 #2982- クエリ処理に関連するサーバーログの各行に、クエリ ID が表示されるようになりました。#2482
send_logs_level設定を使用することで、clickhouse-client でクエリ実行ログを取得できるようになりました。分散クエリ処理時には、すべてのサーバーからのログがカスケードされます。 #2482system.query_logおよびsystem.processes(SHOW PROCESSLIST)テーブルに、クエリ実行時に変更されたすべての設定情報(Settingsデータのネストされた構造)が記録されるようになりました。log_query_settings設定を追加しました。 #2482system.query_logとsystem.processesテーブルに、クエリ実行に参加しているスレッド数に関する情報が表示されるようになりました(thread_numbers列を参照)。 #2482- ネットワーク経由での読み書きおよびディスクでの読み書きに要した時間、ネットワークエラーの回数、帯域幅が制限されている場合の待機時間を計測する
ProfileEventsカウンタを追加しました。 #2482 rusage由来のシステムメトリクスを含むProfileEventsカウンタを追加しました(ユーザー空間およびカーネルでの CPU 使用時間、ページフォルト、コンテキストスイッチに関する情報を取得できます)。さらに、taskstats メトリクスも追加しました(I/O 待ち時間、CPU 待ち時間、ページキャッシュの有無それぞれの場合の読み取りおよび書き込みデータ量に関する情報を取得できます)。#2482ProfileEventsカウンタはグローバルレベルおよび各クエリ単位に加えて、各クエリ実行スレッド単位でも適用されるため、クエリごとのリソース消費を詳細にプロファイルできます。 #2482- 各クエリの実行スレッドに関する情報を含む
system.query_thread_logテーブルを追加しました。log_query_threads設定を追加しました。 #2482 system.metricsとsystem.eventsテーブルに、組み込みのドキュメントが用意されるようになりました。 #3016arrayEnumerateDense関数を追加。 Amos BirdarrayCumSumNonNegative関数およびarrayDifference関数を追加しました。 Aleksey Studnevretentionという集約関数を追加しました。 Sundy Li- 集約関数の状態を、加算演算子(+)で加算(マージ)できるようになり、さらに、その状態を非負の定数で乗算できるようになりました。 #3062 #3034
- MergeTree ファミリーのテーブルで、仮想カラム
_partition_idが利用できるようになりました。 #3089
実験的機能:
LowCardinality(T)データ型を追加しました。このデータ型は値のローカル辞書を自動的に作成し、辞書を展開することなくデータ処理を行えるようにします。 #2830- JIT コンパイルされた関数のキャッシュと、コンパイルを実行するまでの使用回数を数えるカウンタを追加しました。式を JIT コンパイルするには、
compile_expressions設定を有効にします。 #2990 #3077
改良点:
- 放棄されたレプリカが存在する際に、レプリケーションログが無制限に蓄積し続ける問題を修正しました。大きな遅延があるレプリカ向けに、有効なリカバリーモードを追加しました。
GROUP BYにおいて、複数の集約フィールドを指定している場合に、そのうち 1 つが文字列で残りが固定長型であるときのパフォーマンスを改善しました。PREWHEREの使用時および式が暗黙的にPREWHEREに転送される場合のパフォーマンスが向上しました。`- テキスト形式(
CSV、TSV)のパース性能を改善。 Amos Bird #2980 - バイナリ形式での文字列および配列の読み取り性能を改善しました。 Amos Bird
- 単一のサーバー上に非常に多数のテーブルが存在する場合に、
system.tablesおよびsystem.columnsへのクエリのパフォーマンスが向上し、メモリ消費量が削減されました。 #2953 - 大量のクエリストリームがエラーになる場合に発生していたパフォーマンス問題を修正しました(
perf topに_dl_addr関数は表示されるものの、サーバーの CPU 使用率自体はそれほど高くない状況)。 #2938 - 条件は(
enable_optimize_predicate_expressionが有効な場合)View 側に適用されるようになりました。 Winter Zhang UUIDデータ型の機能を改善しました。 #3074 #2985UUIDデータ型が The-Alchemist 辞書でサポートされるようになりました。 #2822visitParamExtractRaw関数はネストされた構造でも正しく動作します。 Winter Zhanginput_format_skip_unknown_fields設定が有効な場合、JSONEachRow形式のオブジェクトフィールドが正しくスキップされます。 BlahGeek- 条件を含む
CASE式では、ELSEを省略できるようになりました。これはELSE NULLと同等です。 #2920 - ZooKeeper を使用する際の操作タイムアウトを設定可能になりました。 urykhy
LIMIT n, mのオフセットをLIMIT n OFFSET mとして指定できます。 #2840LIMITの代替としてSELECT TOP n構文も使用できます。 #2840- システムテーブルへの書き込みキューのサイズを拡大し、
SystemLog parameter queue is fullエラーの発生頻度を低減しました。 windowFunnel集約関数が、複数の条件を同時に満たすイベントに対応するようになりました。 Amos Bird- 重複したカラムを
JOINのUSING句で使用できるようになりました。 #3006 Prettyフォーマットでは、列の幅をそろえる際の最大幅に制限が設けられました。output_format_pretty_max_column_pad_width設定を使用してください。値がその幅より大きい場合でも、値自体は完全に表示されますが、テーブル内の他のセルの幅が不必要に広がらないようになります。 #3003odbcテーブル関数でデータベース名やスキーマ名を指定できるようになりました。 Amos Birdclickhouse-clientの設定ファイルに指定されたユーザー名を使用できるようにしました。 Vladimir KozbinZooKeeperExceptionsカウンターは、ZooKeeperUserExceptions、ZooKeeperHardwareExceptions、ZooKeeperOtherExceptionsの 3 つのカウンターに分割されました。ALTER DELETEクエリはマテリアライズドビューにも使用できます。- 多数の
ReplicatedMergeTreeテーブルが存在する場合に、クリーンアップスレッドの定期実行によって発生する周期的な負荷スパイクを回避するため、ReplicatedMergeTreeテーブルのクリーンアップスレッド実行タイミングにランダム性を持たせました。 ATTACH TABLE ... ON CLUSTERクエリをサポート。 #3025
バグ修正:
Dictionaryテーブルで発生していた問題(Size of offsets does not match size of columnまたはUnknown compression methodという例外がスローされる)を修正しました。このバグはバージョン 18.10.3 で発生していました。#2913verticalアルゴリズムを用いてマージを行う際に、CollapsingMergeTreeテーブルのマージ処理で、データパーツの一部が空の場合(これらのパーツは、すべてのデータが削除された場合のマージ処理中またはALTER DELETE実行時に生成される)に発生していたバグを修正しました。 #3049SELECTを同時に実行しているMemoryテーブルに対してDROPまたはTRUNCATEを行う際に発生するレースコンディションを修正しました。この問題によりサーバがクラッシュする可能性がありました。このバグはバージョン 1.1.54388 で導入されました。 #3038Replicatedテーブルへの挿入時にSession is expiredエラーが返される場合にデータ損失が発生する可能性のあった問題を修正しました(データ損失はReplicatedDataLossメトリクスによって検出できます)。このエラーはバージョン 1.1.54378 で発生していました。 #2939 #2949 #2964JOIN ... ON中に発生していたセグメンテーションフォールトを修正しました。 #3000WHERE句の式がWHERE table.columnのように修飾カラム名のみで構成されている場合に、カラム名検索時に発生していたエラーを修正しました。 #2994- サブクエリを含む
IN式のみから成る単一列をリモートサーバーから参照する分散クエリを実行した際に発生していた「Not found column」エラーを修正しました。 #3087 - 分散クエリで、一方のシャードがローカルで他方がリモートである場合に、
PREWHEREへの移動最適化が有効になると発生していたBlock structure mismatch in UNION stream: different number of columnsエラーを修正しました。 #2226 #3037 #3055 #3065 #3073 #3090 #3093 - 非凸多角形の一部のケースにおいて
pointInPolygon関数を修正しました。 #2910 nanを整数と比較した際に誤った結果となっていた問題を修正しました。 #3024- まれにセグメンテーションフォルトを引き起こす可能性があった
zlib-ngライブラリのエラーを修正しました。 #2854 AggregateFunction列を持つテーブルへの挿入時に、集約関数の状態が単純でなく(メモリを個別に確保するもの)、かつ 1 回の挿入リクエストが複数の小さなブロックを生成する場合に発生していたメモリリークを修正しました。 #3084- 同じ
BufferまたはMergeTreeテーブルを同時に作成および削除しようとした際に発生していたレースコンディションを修正しました。 - 特定の複雑な型(例えばタプル)から構成されるタプル同士を比較する際に、セグメンテーションフォルトが発生する可能性があった問題を修正しました。 #2989
- 特定の
ON CLUSTERクエリを実行した際にセグメンテーションフォルトが発生し得る不具合を修正しました。 Winter Zhang Nullableな配列要素を扱うarrayDistinct関数の不具合を修正しました。 #2845 #2937enable_optimize_predicate_expressionオプションが、SELECT *を含む場合も正しくサポートするようになりました。 Winter Zhang- ZooKeeper セッションを再初期化する際に発生していたセグメンテーションフォルトを修正しました。 #2917
- ZooKeeper 使用時に発生する可能性のあったブロッキングを解消しました。
SummingMergeTreeでネストされたデータ構造を追加するコードの誤りを修正しました。- 集約関数の状態用メモリの割り当て時にアラインメントが正しく考慮されるようになり、集約関数の状態を実装する際にアラインメントを必要とする操作を使用できるようになりました。 chenxing-xc
セキュリティ修正:
- ODBC データソースの安全な利用。ODBC ドライバーとのやり取りは、別プロセスである
clickhouse-odbc-bridgeを介して行われます。サードパーティ製 ODBC ドライバー内の不具合が原因でサーバーの安定性に影響したり、脆弱性につながったりすることがなくなりました。 #2828 #2879 #2886 #2893 #2921 catBoostPoolテーブル関数におけるファイルパス検証の誤りを修正しました。 #2894- システムテーブル(
tables、databases、parts、columns、parts_columns、merges、mutations、replicas、replication_queue)の内容は、ユーザーに設定されているデータベースへのアクセス権(allow_databases)に応じてフィルタリングされます。 Winter Zhang
後方互換性のない変更:
- JOIN を含むクエリでは、SQL 標準に準拠して、アスタリスク文字はすべてのテーブルのカラム一覧に展開されます。ユーザー設定レベルで
asterisk_left_columns_onlyを 1 に設定することで、従来の動作を復元できます。
ビルドの変更:
- ほとんどのインテグレーションテストを、コミット単位で実行できるようになりました。
- コードスタイルチェックも、コミット単位で実行できるようになりました。
- CentOS7/Fedora 上でビルドする際に、
memcpy実装が正しく選択されるようになりました。 Etienne Champetier - clang を使用してビルドする場合、従来の
-Wall -Wextra -Werrorに加えて、-Weverythingから一部の警告フラグが追加されました。 #2957 - ビルドのデバッグ時に、
jemallocのデバッグオプションを使用するようになりました。 - ZooKeeper と連携するためのライブラリのインターフェースが抽象インターフェースとして宣言されました。 #2950
ClickHouse リリース 18.10
ClickHouse リリース 18.10.3, 2018-08-13
新機能:
- レプリケーションに HTTPS を使用できるようになりました。 #2760
- 既存の
murmurHash2_32に加えて、murmurHash2_64、murmurHash3_32、murmurHash3_64、murmurHash3_128関数が追加されました。 #2791 - ClickHouse ODBC ドライバ(
ODBCDriver2出力フォーマット)で Nullable 型がサポートされました。 #2834 - キー列で
UUIDがサポートされました。
改良:
- 設定ファイルから削除されたクラスタを、サーバーの再起動なしで削除できるようになりました。 #2777
- 設定ファイルから削除された外部ディクショナリを、サーバーの再起動なしで削除できるようになりました。 #2779
KafkaテーブルエンジンにSETTINGSのサポートが追加されました。 Alexander MarshalovUUIDデータ型の改良(まだ完了していません)。 #2618SummingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTreeエンジンで、マージ後の空のパーツがサポートされました。 #2815- 完了したミューテーションの古いレコードが削除されるようになりました(
ALTER DELETE)。 #2784 system.merge_tree_settingsテーブルが追加されました。 Kirill Shvakovsystem.tablesテーブルに依存関係を表す列dependencies_databaseとdependencies_tableが追加されました。 Winter Zhangmax_partition_size_to_drop設定オプションが追加されました。 #2782output_format_json_escape_forward_slashesオプションが追加されました。 Alexander Bocharovmax_fetch_partition_retries_count設定が追加されました。 #2831- ローカルレプリカを優先する動作を無効化し、プロセス間のやり取りなしでローカルレプリカにアクセスするための
prefer_localhost_replica設定が追加されました。 #2832 - 集約対象が空の
Float32またはFloat64セットである場合、quantileExact集約関数はnanを返すようになりました。 Sundy Li
バグ修正:
- ODBC の接続文字列パラメータに対する不要なエスケープを削除しました。これにより接続を確立できない問題が発生していました。この不具合はバージョン 18.6.0 で導入されました。
- レプリケーションキューにおける
REPLACE PARTITIONコマンドの処理ロジックを修正しました。同じパーティションに対するREPLACEコマンドが 2 つ存在する場合、不正なロジックにより、そのうちの 1 つがレプリケーションキューに残ったまま実行されないことがありました。#2814 - すべてのデータパーツが空である場合(マージから生成されたパーツ、または
ALTER DELETEによりすべてのデータが削除された結果として生成されたパーツ)に発生するマージのバグを修正しました。このバグはバージョン 18.1.0 で導入されました。#2930 - 並行して実行される
SetまたはJoinに関するエラーを修正しました。Amos Bird - サブクエリ内の
UNION ALLクエリで、SELECTクエリの 1 つに重複したカラム名が含まれている場合に発生していたBlock structure mismatch in UNION stream: different number of columnsエラーを修正しました。Winter Zhang - MySQL サーバーへの接続時に例外が発生した場合のメモリリークを修正しました。
- クエリエラー発生時の clickhouse-client の誤ったレスポンスコードを修正しました。
- DISTINCT を含むマテリアライズドビューの誤った動作を修正しました。#2795
後方互換性のない変更
- Distributed テーブルに対する CHECK TABLE クエリのサポートを削除しました。
ビルドの変更:
- アロケータを置き換えました:
tcmallocの代わりにjemallocを使用するようにしました。シナリオによっては、速度が最大 20% 向上します。ただし、最大 20% 低速化したクエリもあります。いくつかのシナリオではメモリ消費量がおよそ 10% 削減され、安定性が向上しました。競合の激しい負荷では、ユーザー空間およびシステム空間における CPU 使用率はわずかに増加するだけです。#2773 - サブモジュール由来の libressl を使用するようにしました。#1983 #2807
- サブモジュール由来の unixodbc を使用するようにしました。#2789
- サブモジュール由来の mariadb-connector-c を使用するようにしました。#2785
- テストデータの有無に依存する機能テスト用のファイルをリポジトリに追加しました(当面の間、テストデータ自体は含まれていません)。
ClickHouse Release 18.6
ClickHouse Release 18.6.0, 2018-08-02
新機能:
- JOIN ON 構文に対して ON 句内の式のサポートを追加しました:
JOIN ON Expr([table.]column ...) = Expr([table.]column, ...) [AND Expr([table.]column, ...) = Expr([table.]column, ...) ...]式は AND 演算子で連結された等価条件のチェーンでなければなりません。等号の各側は、テーブルのいずれか一方のカラムを使った任意の式とすることができます。右側のテーブルについては、完全修飾カラム名(table.name、database.table.name、table_alias.name、subquery_alias.name)の使用がサポートされています。 #2742 - レプリケーションで HTTPS を有効化できるようになりました。 #2760
改良:
- サーバーが自身のバージョンのパッチコンポーネント(patch component)をクライアントへ渡すようになりました。パッチコンポーネントに関するデータは
system.processesおよびquery_logに含まれます。 #2646
ClickHouse リリース 18.5
ClickHouse リリース 18.5.1, 2018-07-31
新機能:
- ハッシュ関数
murmurHash2_32を追加しました #2756。
改善点:
- 環境変数から設定ファイル内の値を設定できる
from_env属性を使用できるようになりました #2741。 coalesce、ifNull、およびnullIf関数の大文字小文字を区別しないバージョンを追加しました #2752。
バグ修正:
- レプリカの起動時に発生する可能性があったバグを修正しました #2759。
ClickHouse リリース 18.4
ClickHouse リリース 18.4.0, 2018-07-28
新機能:
- 次のシステムテーブルを追加:
formats,data_type_families,aggregate_function_combinators,table_functions,table_engines,collations#2721。 remoteまたはclusterテーブル関数の引数として、テーブルの代わりにテーブル関数を使用できるようにした #2708。- レプリケーションプロトコルでの
HTTP Basic認証をサポート #2727。 has関数で、Enum値の配列内を数値で検索できるようにした Maxim Khrisanfov。Kafkaから読み取る際に任意のメッセージセパレータを指定できるようにした Amos Bird。
改良:
ALTER TABLE t DELETE WHEREクエリは、WHERE 条件の影響を受けなかったデータパーツを書き換えないようにした #2694。ReplicatedMergeTreeテーブル用のuse_minimalistic_checksums_in_zookeeperオプションをデフォルトで有効化。この設定はバージョン 1.1.54378 (2018-04-16) で追加された。1.1.54378 より古いバージョンはインストールできなくなった。ON CLUSTERを指定したKILLおよびOPTIMIZEクエリの実行をサポート Winter Zhang。
バグ修正:
- IN 式を含む集約で発生していた
Column ... is not under an aggregate function and not in GROUP BYエラーを修正。このバグはバージョン 18.1.0 で導入された。(bbdd780b) windowFunnel集約関数のバグを修正 Winter Zhang。anyHeavy集約関数のバグを修正 (a2101df2)。countArray()集約関数を使用した際にサーバがクラッシュする問題を修正。
後方互換性のない変更:
Kafkaエンジンのパラメータが、Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_schema, kafka_num_consumers])からKafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_row_delimiter, kafka_schema, kafka_num_consumers])に変更された。テーブルでkafka_schemaまたはkafka_num_consumersパラメータを使用している場合は、メタデータファイルpath/metadata/database/table.sqlを手動で編集し、値が''のkafka_row_delimiterパラメータを追加する必要がある。
ClickHouse リリース 18.1
ClickHouse リリース 18.1.0, 2018-07-23
新機能:
- 非レプリケートな MergeTree テーブルに対する
ALTER TABLE t DELETE WHEREクエリへの対応(#2634)。 uniq*系集約関数で任意の型を扱えるように対応(#2010)。- 比較演算子で任意の型を扱えるように対応(#2026)。
users.xmlファイルで、10.0.0.1/255.255.255.0形式のサブネットマスクを設定できるようになりました。これは、中間にゼロが含まれる IPv6 ネットワークに対してマスクを使用するために必要です(#2637)。arrayDistinct関数を追加(#2670)。- SummingMergeTree エンジンが AggregateFunction 型カラムを扱えるようになりました(Constantin S. Pan)。
改良:
- リリースバージョンの番号付け方式を変更しました。先頭の部分にはリリース年(西暦。モスクワタイムゾーンの年から 2000 を引いた値)、2 番目の部分にはメジャーな変更を表す番号(ほとんどのリリースで増加)、3 番目の部分にはパッチバージョンが含まれます。特にチェンジログで明記されていない限り、リリース間の後方互換性は維持されます。
- 浮動小数点数から文字列への変換を高速化しました(Amos Bird)。
- パースエラーにより挿入時に一部の行がスキップされた場合(
input_allow_errors_numおよびinput_allow_errors_ratio設定を有効にしている場合に発生し得ます)、スキップされた行数がサーバーログに書き込まれるようになりました(Leonardo Cecchi)。
バグ修正:
- 一時テーブルに対する TRUNCATE コマンドを修正(Amos Bird)。
- 応答読み取り中のネットワークエラー発生時に ZooKeeper クライアントライブラリでまれに発生していたデッドロックを修正(c315200)。
- Nullable 型への CAST 中に発生していたエラーを修正(#1322)。
- 区間の境界が一致している場合に
maxIntersection()関数が誤った結果を返す問題を修正(Michael Furmur)。 - 関数引数内の OR 式チェーンの誤った変換を修正(chenxing-xc)。
- 別のサブクエリの内部に
IN (subquery)式を含むクエリでのパフォーマンス低下を修正(#2571)。 CAST関数が大文字で記述されていない場合に、異なるバージョンのサーバー間で分散クエリ実行時の非互換性が発生していた問題を修正(fe8c4d6)。- 外部 DBMS へのクエリで、識別子に対するクォートが不足していた問題を修正(#2635)。
後方互換性のない変更:
- 数値のゼロのみを含む文字列から DateTime への変換は行えません。例:
SELECT toDateTime('0')。これはテーブルでDateTime DEFAULT '0'が動作しない理由でもあり、辞書における<null_value>0</null_value>が動作しない理由でもあります。解決策:0を0000-00-00 00:00:00に置き換えてください。
ClickHouse リリース 1.1
ClickHouse リリース 1.1.54394, 2018-07-12
新機能:
- 集約関数
histogramを追加しました(Mikhail Surin)。 OPTIMIZE TABLE ... FINALが、ReplicatedMergeTreeに対してパーティションを指定せずに使用できるようになりました(Amos Bird)。
バグ修正:
- レプリケートデータの送信およびダウンロード時の読み書きにおいて、ソケットのタイムアウト(1 秒)が非常に短すぎたために、ネットワークまたはディスクに負荷がある場合に大きなパーツをダウンロードできず(パーツのダウンロードを繰り返し試行する状態になる)、問題が発生していたのを修正しました。この不具合はバージョン 1.1.54388 で発生していました。
- テーブルに重複するデータブロックを挿入した場合に、ZooKeeper で chroot を使用すると問題が発生する不具合を修正しました。
has関数が Nullable 要素を持つ配列に対して正しく動作するようになりました(#2115)。system.tablesテーブルが分散クエリで正しく動作するようになりました。metadata_modification_timeおよびengine_fullカラムは非仮想カラムになりました。また、テーブルからこれらのカラムだけをクエリした場合に発生していたエラーを修正しました。- 空のデータブロックを挿入した後の、空の
TinyLogテーブルの動作を修正しました(#2563)。 - ZooKeeper 内のノード値が NULL の場合でも、
system.zookeeperテーブルが動作するようになりました。
ClickHouse リリース 1.1.54390, 2018-07-06
新機能:
- クエリを
multipart/form-data形式(queryフィールド)で送信できるようになりました。これは、クエリ処理用に外部データも同時に送信する場合に便利です(Olga Hvostikova)。 - CSV 形式のデータ読み込み時に、シングルクオートおよびダブルクオートの処理を有効/無効にできるようになりました。これは
format_csv_allow_single_quotesおよびformat_csv_allow_double_quotes設定で構成できます(Amos Bird)。 OPTIMIZE TABLE ... FINALが、非レプリケート版のMergeTreeに対してパーティションを指定せずに使用できるようになりました(Amos Bird)。
改善:
- テーブルインデックスを利用できる場合の IN 演算子の使用時に、パフォーマンスを改善し、メモリ消費量を削減し、メモリ消費量のトラッキングを正しく行うようにしました(#2584)。
- データパーツ追加時の冗長なチェックサム検証を削除しました。これはレプリカ数が非常に多いケースで重要であり、そのような場合、合計のチェック回数が N^2(N の二乗)になっていました。
arrayEnumerateUniq関数に対し、Array(Tuple(...))引数のサポートを追加しました(#2573)。runningDifference関数にNullableのサポートを追加しました(#2594)。- 非常に多くの式が存在する場合のクエリ解析のパフォーマンスを改善しました(#2572)。
ReplicatedMergeTreeテーブルでマージ対象のデータパーツの選択を高速化しました。ZooKeeper セッションの復旧も高速化しました(#2597)。MergeTreeテーブル用のformat_version.txtファイルが存在しない場合に再作成されるようになりました。これは、ファイルを含まないディレクトリ構造をコピーした後に ClickHouse を起動する場合に有用です(Ciprian Hacman)。
バグ修正:
- ZooKeeper を使用する際、サーバー再起動前のテーブルのセッションおよび読み取り専用状態を復元できなくなる可能性があったバグを修正しました。
- ZooKeeper を使用する際、セッションが中断された場合に古いノードが削除されないことがあるバグを修正しました。
- Float 引数に対する
quantileTDigest関数のエラーを修正しました(このバグはバージョン 1.1.54388 で導入されました)(Mikhail Surin)。 - 同じサイズの符号付き/符号なし整数型を相互変換する関数内に主キー列がある場合に、MergeTree テーブルのインデックスで発生していたバグを修正しました(#2603)。
macrosが使用されているにもかかわらず、設定ファイルに定義されていない場合に発生していたセグメンテーションフォルトを修正しました(#2570)。- クライアント再接続時にデフォルトデータベースへ切り替わってしまう問題を修正しました(#2583)。
use_index_for_in_with_subqueries設定が無効化されているときに発生していたバグを修正しました。
セキュリティ修正:
- MySQL 接続時にファイル送信(
LOAD DATA LOCAL INFILE)はできなくなりました。
ClickHouse Release 1.1.54388, 2018-06-28
新機能:
- レプリケートされたテーブルに対する
ALTER TABLE t DELETE WHEREクエリをサポートしました。この種のクエリの進行状況を追跡するためにsystem.mutationsテーブルを追加しました。 - *MergeTree テーブルに対する
ALTER TABLE t [REPLACE|ATTACH] PARTITIONクエリをサポートしました。 TRUNCATE TABLEクエリをサポートしました(Winter Zhang)。- レプリケートされたテーブル向けに複数の新しい
SYSTEMクエリを追加しました(RESTART REPLICAS、SYNC REPLICA、[STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES])。 - MySQL エンジンを持つテーブルおよび対応するテーブル関数への書き込みが可能になりました(sundy-li)。
url()テーブル関数およびURLテーブルエンジンを追加しました(Alexander Sapin)。windowFunnel集約関数を追加しました(sundy-li)。- 文字列用の新しい
startsWithおよびendsWith関数を追加しました(Vadim Plakhtinsky)。 numbers()テーブル関数でオフセットを指定できるようになりました(Winter Zhang)。clickhouse-clientのパスワードを対話的に入力できるようになりました。- サーバーログを syslog に送信できるようになりました(Alexander Krasheninnikov)。
- 共有ライブラリをソースとする辞書でのログ出力をサポートしました(Alexander Sapin)。
- カスタム CSV 区切り文字をサポートしました(Ivan Zhukov)。
date_time_input_format設定を追加しました。この設定を'best_effort'に切り替えると、DateTime 値を幅広い形式で読み取れるようになります。- データ難読化用ユーティリティ
clickhouse-obfuscatorを追加しました。使用例: パフォーマンステストで使用したデータの公開。
実験的機能:
andの引数を必要な箇所でのみ計算できるようにしました(Anastasia Tsarkova)。- 一部の式に対して、ネイティブコードへの JIT コンパイルが利用可能になりました(pyos)。
バグ修正:
DISTINCTとORDER BYを含むクエリで重複が表示されなくなりました。ARRAY JOINとarrayFilterを含むクエリで誤った結果が返されなくなりました。- Nested 構造から配列カラムを読み取る際のエラーを修正しました(#2066)。
HAVING tuple IN (...)のような HAVING 句を含むクエリを解析する際のエラーを修正しました。- 再帰的なエイリアスを含むクエリを解析する際のエラーを修正しました。
- すべての行をフィルタする PREWHERE 条件付きで ReplacingMergeTree から読み取る際のエラーを修正しました(#2525)。
- HTTP インターフェイスでセッションを使用した場合に、ユーザープロファイル設定が適用されない問題を修正しました。
- clickhouse-local におけるコマンドラインパラメータからの設定の適用方法を修正しました。
- ZooKeeper クライアントライブラリが、サーバーから受信したセッションタイムアウト値を使用するようになりました。
- ZooKeeper クライアントライブラリで、クライアントがサーバーからのレスポンスをタイムアウト値を超えて待機してしまうバグを修正しました。
- パーティションキーのカラムに条件を持つクエリに対するパーツのプルーニングを修正しました(#2342)。
CLEAR COLUMN IN PARTITION実行後でもマージが可能になりました(#2315)。- ODBC テーブル関数での型マッピングを修正しました(sundy-li)。
- タイムゾーンあり/なしの
DateTime型の比較を修正しました(Alexander Bocharov)。 CAST演算子の構文解析とフォーマットを修正しました。- Distributed テーブルエンジン向けマテリアライズドビューへの挿入を修正しました(Babacar Diassé)。
Kafkaエンジンからマテリアライズドビューへデータを書き込む際のレースコンディションを修正しました(Yangkuan Liu)。- remote() テーブル関数における SSRF を修正しました。
- 複数行モードにおける
clickhouse-clientの終了時の挙動を修正しました(#2510)。
Improvements:
- レプリケートテーブルにおけるバックグラウンドタスクが、個別スレッドではなくスレッドプールで実行されるようになりました(Silviu Caragea)。
- LZ4 圧縮のパフォーマンスを改善しました。
- 多数の JOIN とサブクエリを含むクエリの解析が高速化されました。
- ネットワークエラーが多すぎる場合、DNS キャッシュが自動的に更新されるようになりました。
- いずれか 1 つのマテリアライズドビューへの挿入が、パーツ数が多すぎるために不可能な場合、テーブルへの挿入そのものが行われないようになりました。
Query、SelectQuery、InsertQueryのイベントカウンタの不整合を修正しました。- タプル型が一致していれば、
tuple IN (SELECT tuple)のような式が許可されるようになりました。 - ZooKeeper を設定していなくても、レプリケートテーブルを持つサーバーを起動できるようになりました。
- 利用可能な CPU コア数の計算時に、cgroups の制限が考慮されるようになりました(Atri Sharma)。
- systemd 設定ファイルにおいて、設定ディレクトリに対する chown を追加しました(Mikhail Shiryaev)。
Build Changes:
- ビルドに gcc8 コンパイラを使用できるようになりました。
- サブモジュールから LLVM をビルドできるようになりました。
- librdkafka ライブラリのバージョンを v0.11.4 に更新しました。
- システムの libcpuid ライブラリを使用できるようになりました。ライブラリのバージョンは 0.4.0 に更新されました。
- vectorclass ライブラリを使用したビルドを修正しました(Babacar Diassé)。
- CMake がデフォルトで(
-G Ninjaを使用した場合と同様に)ninja 用のファイルを生成するようになりました。 - libtermcap の代わりに libtinfo ライブラリを使用できるようになりました(Georgy Kondratiev)。
- Fedora Rawhide におけるヘッダーファイルの競合を修正しました(#2520)。
Backward Incompatible Changes:
VerticalとPretty*フォーマットでのエスケープを削除し、VerticalRawフォーマットを削除しました。- 分散クエリで、バージョン 1.1.54388(またはそれ以降)のサーバーとそれ以前のバージョンのサーバーを同時に使用しており、かつクエリに
ASキーワードなしのcast(x, 'Type')式が含まれ、さらにcastという単語が大文字になっていない場合、Not found column cast(0, 'UInt8') in blockのようなメッセージとともに例外がスローされます。解決策: クラスター全体のサーバーをアップデートしてください。
ClickHouse Release 1.1.54385, 2018-06-01
バグ修正:
- 一部のケースで ZooKeeper の操作がブロックされてしまう不具合を修正しました。
ClickHouse Release 1.1.54383, 2018-05-22
バグ修正:
- テーブルに多数のレプリカが存在する場合に、レプリケーションキューの処理が低速化する問題を修正しました。
ClickHouse Release 1.1.54381, 2018-05-14
バグ修正:
- ClickHouse が ZooKeeper サーバーへの接続を失った際に、ZooKeeper 内でノードがリークする問題を修正しました。
ClickHouse Release 1.1.54380, 2018-04-21
新機能:
- テーブル関数
file(path, format, structure)を追加しました。/dev/urandomからバイトを読み込む例:ln -s /dev/urandom /var/lib/clickhouse/user_files/randomclickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10" ```。
改善:
- サブクエリを
()で囲むことで、クエリの可読性を向上できるようにしました。例:(SELECT 1) UNION ALL (SELECT 1)。 system.processesテーブルに対する単純なSELECTクエリは、max_concurrent_queries制限の対象外としました。
バグ修正:
MATERIALIZED VIEWからのIN演算子によるSELECTの誤った挙動を修正しました。partition_key_column IN (...)のような式でのパーティションインデックスによるフィルタリングの誤動作を修正しました。- テーブルに対して
REANAMEが実行された場合、非リーダーレプリカ上でOPTIMIZEクエリを実行できない問題を修正しました。 - 非リーダーレプリカ上で
OPTIMIZEまたはALTERクエリを実行する際の認可エラーを修正しました。 KILL QUERYがフリーズする問題を修正しました。- ZooKeeper クライアントライブラリの不具合を修正しました。この不具合により、ウォッチの喪失、分散 DDL キューのフリーズ、ZooKeeper 設定で空でない
chrootプレフィックスを使用している場合のレプリケーションキューの遅延が発生していました。
後方互換性のない変更:
(a, b) IN (SELECT (a, b))のような式のサポートを削除しました(同等の式(a, b) IN (SELECT a, b)を使用できます)。以前のリリースでは、これらの式はWHEREでのフィルタリング結果が不定になるか、エラーの原因となっていました。
ClickHouse Release 1.1.54378, 2018-04-16
新機能:
- サーバーを再起動せずにログレベルを変更できるようになりました。
SHOW CREATE DATABASEクエリを追加しました。query_idをclickhouse-clientに渡せるようになりました (elBroom)。- 新しい設定:
max_network_bandwidth_for_all_users。 MATERIALIZED VIEWに対してALTER TABLE ... PARTITION ...をサポートしました。- システムテーブルに、非圧縮形式でのデータパーツのサイズ情報を追加しました。
- 分散テーブルに対するサーバー間暗号化をサポートしました(
<remote_servers>内のレプリカ設定で<secure>1</secure>を指定)。 - Zookeeper に保存されるデータ量を最小化するため、
ReplicatedMergeTreeファミリーのテーブルレベル設定を追加しました:use_minimalistic_checksums_in_zookeeper = 1 clickhouse-clientのプロンプトを設定できるようになりました。デフォルトでは、サーバー名がプロンプトに表示されるようになりました。サーバーの表示名は変更可能であり、X-ClickHouse-Display-NameHTTP ヘッダーでも送信されます (Kirill Shvakov)。Kafkaエンジンに対して、複数のカンマ区切りのtopicsを指定できるようになりました (Tobias Adamson)。- クエリが
KILL QUERYまたはreplace_running_queryによって停止された場合、不完全な結果ではなくQuery was canceled例外がクライアントに返されるようになりました。
Improvements:
ALTER TABLE ... DROP/DETACH PARTITIONクエリがレプリケーションキューの先頭で実行されるようになりました。- テーブルに 1 つのデータパーツしかない場合でも、
SELECT ... FINALおよびOPTIMIZE ... FINALを使用できるようになりました。 query_logテーブルが手動で削除された場合、その場で再作成されるようになりました (Kirill Shvakov)。lengthUTF8関数の実行速度を向上しました (zhang2014)。- シャード数が非常に多い場合の、
Distributedテーブル (insert_distributed_sync = 1) への同期挿入のパフォーマンスを改善しました。 - サーバーがクライアントから
send_timeoutとreceive_timeout設定を受け取り、クライアントへの接続時にそれらを適用するようになりました(適用順序は逆で、サーバーソケットのsend_timeoutはクライアントから受け取ったreceive_timeoutの値に、receive_timeoutはsend_timeoutの値にそれぞれ設定されます)。 Distributedテーブルへの非同期挿入におけるクラッシュ復旧をより堅牢にしました。countEqual関数の戻り値の型をUInt32からUInt64に変更しました (谢磊)。
Bug Fixes:
- 左辺が
NullableのときのINに関するエラーを修正しました。 - タプルの構成要素の一部がテーブルインデックスに含まれている場合でも、
INでタプルを使用した際に正しい結果が返されるようになりました。 - 分散クエリで
max_execution_time制限が正しく動作するようになりました。 system.columnsテーブルで複合カラムのサイズを計算する際のエラーを修正しました。- 一時テーブル
CREATE TEMPORARY TABLE IF NOT EXISTS.を作成する際のエラーを修正しました。 StorageKafkaにおけるエラーを修正しました (##2075)。- 一部の集約関数に無効な引数が渡された場合にサーバーがクラッシュする問題を修正しました。
DETACH DATABASEクエリがReplicatedMergeTreeテーブルのバックグラウンドタスクを停止できなかった不具合を修正しました。- 集約済みマテリアライズドビューへの挿入時に
Too many parts状態が発生しにくくなるようにしました (##2084)。 - 同一レベルで、ある置換の後に別の置換を続けて行う必要がある場合の、設定ファイルにおける置換の再帰的処理を修正しました。
UNION ALLを含むクエリを使用するVIEWを作成する際のメタデータファイル内の構文を修正しました。- 複合キーを持つネストされたデータ構造の合計処理において、
SummingMergeTreeが正しく動作するようになりました。 ReplicatedMergeTreeテーブルにおけるリーダー選出時に競合状態が発生する可能性を修正しました。
Build Changes:
- ビルドが
makeの代わりにninjaをサポートし、リリースビルドではデフォルトでninjaを使用するようになりました。 - パッケージ名を変更しました:
clickhouse-server-baseをclickhouse-common-staticに、clickhouse-server-commonをclickhouse-serverに、clickhouse-common-dbgをclickhouse-common-static-dbgにそれぞれ変更しました。インストールにはclickhouse-server clickhouse-clientを使用してください。後方互換性のため、旧パッケージ名もリポジトリで引き続き利用可能です。
Backward Incompatible Changes:
- 左側に配列が指定された場合の
IN式に対する特別な解釈を削除しました。これまでは、式arr IN (set)は「少なくとも 1 つのarrの要素がsetに属している」と解釈されていました。この新しいバージョンで同じ動作を得るには、arrayExists(x -> x IN (set), arr)と書いてください。 - Poco ライブラリでデフォルトで誤って有効化されていたソケットオプション
SO_REUSEPORTの不正な使用を無効にしました。Linux では、listen 用にアドレス::と0.0.0.0を同時に指定する理由はもはやないことに注意してください。IPv4 および IPv6 の両方で接続待ち受けを行うには(デフォルトのカーネル設定の場合)、::だけを使用してください。設定ファイルで<listen_reuse_port>1</listen_reuse_port>を指定することで、以前のバージョンの動作に戻すこともできます。
ClickHouse Release 1.1.54370, 2018-03-16
New Features:
system.macrosテーブルを追加し、設定ファイルが変更されたときにマクロが自動更新されるようにしました。SYSTEM RELOAD CONFIGクエリを追加しました。- 同時に交差している区間
[left; right]の最大数を返す集約関数maxIntersections(left_col, right_col)を追加しました。maxIntersectionsPosition(left, right)関数は「最大」の区間の開始点を返します。(Michael Furmur)。
Improvements:
Replicatedテーブルへのデータ挿入時に、ZooKeeperへのリクエスト数が減少しました(ユーザーレベルのエラーの大半がZooKeeperログから消えました)。- データセットにエイリアスを作成できるようにしました。例:
WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10.
Bug Fixes:
Distributedテーブルに対する Merge テーブルからの読み取り時に発生していたIllegal PREWHEREエラーを修正しました。- IPv4 のみの Docker コンテナで clickhouse-server を起動できるようにする修正を追加しました。
- システムテーブル
system.parts_columns tables.からの読み取り時に発生していたレースコンディションを修正しました。 Distributedテーブルへの同期挿入時の二重バッファリングを削除しました。これにより接続のタイムアウトが発生する可能性がありました。- 利用できないレプリカに対して
SELECTクエリを開始する前に、過度に長く待機してしまうバグを修正しました。 system.partsテーブル内の日付が誤っていた問題を修正しました。ZooKeeperクラスターの設定でchrootが空でない場合に、Replicatedテーブルにデータを挿入できなくなっていたバグを修正しました。- 空の
ORDER BYを持つテーブルに対する垂直マージアルゴリズムを修正しました。 - リモートテーブルへのクエリで、リクエスト送信元サーバーに辞書が存在しない場合でも辞書を使用できる機能を復元しました。この機能はリリース 1.1.54362 で失われていました。
SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)のようなクエリにおいて、INの右側がローカルではなくリモートのdefault.tableを使用すべき場合の動作を復元しました。この動作はバージョン 1.1.54358 で不正になっていました。Not found column ... in blockの不要なエラーレベルのログ出力を削除しました。
ClickHouse Release 1.1.54362, 2018-03-11
New Features:
- 空の集合に対する
GROUP BYなしの集約(例:SELECT count(*) FROM table WHERE 0)は、SQL 標準に準拠して、集約関数に対して NULL 値を持つ 1 行の結果を返すようになりました。以前の動作(空の結果を返す)に戻すには、empty_result_for_aggregation_by_empty_setを 1 に設定してください。 UNION ALLに対して型変換を追加しました。SQL 標準に準拠し、UNION ALLの各SELECT句では異なるエイリアス名を使用できます。LIMIT BY句で任意の式を使用できるようになりました。これまでは、SELECT句で得られる列のみを使用することができました。MergeTreeテーブルのインデックスは、主キーを構成するカラムのタプルに対してINが適用される場合に使用されます。例:WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...)(Anastasiya Tsarkova)。- クラスター間でのデータコピーおよび再シャーディングを行うための
clickhouse-copierツールを追加しました(ベータ版)。 - 一貫性ハッシュ関数
yandexConsistentHash、jumpConsistentHash、sumburConsistentHashを追加しました。これらは、後続のリシャーディング時のネットワークトラフィック量を削減するためのシャーディングキーとして使用できます。 - 追加された関数:
arrayAny,arrayAll,hasAny,hasAll,arrayIntersect,arrayResize。 arrayCumSum関数を追加しました(Javi Santana)。parseDateTimeBestEffort、parseDateTimeBestEffortOrZero、parseDateTimeBestEffortOrNull関数を追加し、非常に多様な形式で記述された文字列から DateTime を読み取れるようにしました。- 更新時に外部ディクショナリからデータの一部のみを再読み込みできるようになりました(前回の読み込み時よりも指定されたフィールドの値が大きいレコードだけを読み込みます)(Arsen Hakobyan)。
clusterテーブル関数を追加しました。例:cluster(cluster_name, db, table)。remoteテーブル関数は、クラスタ名が識別子として指定されている場合、最初の引数としてクラスタ名を受け取ることができます。remoteおよびclusterのテーブル関数は、INSERTクエリで使用できます。system.tablesテーブルにcreate_table_queryとengine_fullの仮想カラムを追加しました。metadata_modification_timeカラムも仮想カラムです。system.tablesおよびsystem.databasesテーブルにdata_pathとmetadata_path列を追加し、system.partsおよびsystem.parts_columnsテーブルにpath列を追加しました。system.part_logテーブルにおけるマージに関する情報を追加しました。system.query_logテーブルに対して任意のパーティショニングキーを使用できるようになりました (Kirill Shvakov)。SHOW TABLESクエリで一時テーブルも表示されるようになりました。system.tablesに一時テーブルとis_temporary列を追加しました (zhang2014)。DROP TEMPORARY TABLEおよびEXISTS TEMPORARY TABLEクエリを追加 (zhang2014)。- 一時テーブルでの
SHOW CREATE TABLEサポート (zhang2014)。 - 内部プロセスが使用する設定のための
system_profile構成パラメータを追加しました。 MongoDB辞書でobject_idを属性として読み込むことのサポート (Pavel Litvinenko)。MongoDBソースを使用する外部ディクショナリでデータを読み込む際に、デフォルト値としてnullを読み取れるようにしました(Pavel Litvinenko)。- シングルクォートで囲まずに、Unix タイムスタンプから
Values形式のDateTime値を読み取る。 remoteテーブル関数では、一部のレプリカに要求されたテーブルが存在しない場合でもフェイルオーバーがサポートされています。- 設定は、
clickhouse-serverを実行する際にコマンドラインから上書きできます。例:clickhouse-server -- --logger.level=information。 FixedString引数に対するempty関数を実装しました。この関数は、文字列が全てヌルバイトから成る場合に 1 を返します (zhang2014)。- 一部のアドレスで待ち受けできない場合でもプロセスを終了せず、少なくともいずれかの待ち受けアドレスで待ち受けを継続するための設定パラメータ
listen_tryを追加しました(IPv4 または IPv6 のサポートが無効化されているシステムで有用です)。 VersionedCollapsingMergeTreeテーブルエンジンを追加しました。library辞書ソースで、行および任意の数値型をサポート。MergeTreeテーブルは主キーを指定せずに使用できます(ORDER BY tuple()を指定する必要があります)。Nullable型は、引数がNULLでない場合、非Nullable型にキャストできます。RENAME TABLEはVIEWに対しても実行できます。throwIf関数を追加しました。odbc_default_field_sizeオプションを追加しました。これにより、ODBC ソースから読み込まれる値の最大サイズを増やすことができます(デフォルトは 1024)。system.processesテーブルとSHOW PROCESSLISTに、is_cancelledおよびpeak_memory_usage列が追加されました。
改善点:
- 結果に対する制限およびクォータは、
INSERT SELECTクエリやSELECTサブクエリの中間データには適用されなくなりました。 - サーバー起動時に
Replicatedテーブルの状態をチェックする際に、force_restore_dataが誤ってトリガーされる事例が減少しました。 allow_distributed_ddlオプションを追加しました。MergeTreeテーブルキーの式で、非決定的関数は使用できなくなりました。config.dディレクトリからの置換を含むファイルは、アルファベット順で読み込まれるようになりました。- 要素の一つが空配列である定数の多次元配列に対して、
arrayElement関数のパフォーマンスを改善しました。例:[[1], []][x]。 - 非常に大きな置換(例えば、非常に大きな IP ネットワークのリスト)を含む設定ファイルを使用する場合に、サーバーの起動が以前より高速になりました。
- クエリ実行時には、テーブル値関数は 1 回だけ実行されるようになりました。以前は、
remoteおよびmysqlテーブル値関数は、リモートサーバーからテーブル構造を取得するために同じクエリを 2 回実行していました。 MkDocsドキュメントジェネレーターを使用するようになりました。- 他のカラムの
DEFAULT/MATERIALIZED式が依存しているテーブルカラムを削除しようとした場合、例外がスローされるようになりました (zhang2014)。 - テキスト形式で空行を、
Floatデータ型に対して数値 0 としてパースできる機能を追加しました。この機能は以前は利用可能でしたが、リリース 1.1.54342 で失われていました。 Enum値をmin、max、sumなどのいくつかの関数で使用できるようになりました。この場合、対応する数値が使用されます。この機能は以前は利用可能でしたが、リリース 1.1.54337 で失われていました。- エイリアスを再帰的に展開した後の AST のサイズを制限するために、
max_expanded_ast_elementsを追加しました。
バグ修正:
- 不要なカラムがサブクエリから誤って削除される、または
UNION ALLを含むサブクエリから削除されないケースを修正しました。 ReplacingMergeTreeテーブルにおけるマージのバグを修正しました。Distributedテーブルでの同期挿入 (insert_distributed_sync = 1) を修正しました。- サブクエリ内に重複カラムが存在する場合の
FULLおよびRIGHT JOINの特定の使用で発生していたセグメンテーションフォルトを修正しました。 replace_running_queryおよびKILL QUERYの特定の使用で発生していたセグメンテーションフォルトを修正しました。system.dictionariesテーブル内のsourceおよびlast_exceptionカラムの順序を修正しました。DROP DATABASEクエリがメタデータファイルを削除しないバグを修正しました。Dictionaryデータベースに対するDROP DATABASEクエリを修正しました。- 1 億件を超えるカーディナリティに対して
uniqHLL12およびuniqCombined関数の精度が低かった問題を修正しました (Alex Bocharov)。 INSERTクエリにおいて、明示的なデフォルト式を同時に計算する必要がある場合の暗黙のデフォルト値の計算を修正しました (zhang2014)。MergeTreeテーブルへのクエリが完了しない可能性があった、まれなケースを修正しました (chenxing-xc)。- すべてのシャードがローカルである場合に
Distributedテーブルに対してCHECKクエリを実行するとクラッシュする問題を修正しました (chenxing.xc)。 - 正規表現を使用する関数で発生していたわずかなパフォーマンス低下を修正しました。
- 複雑な式から多次元配列を作成する際のパフォーマンス低下を修正しました。
- メタデータを含む
.sqlファイルに余分なFORMATセクションが現れる可能性があったバグを修正しました。 - 明示的に指定されたテーブルを参照する
MATERIALIZED VIEWを削除しようとした際に、max_table_size_to_drop制限が適用されてしまうバグを修正しました。 - 古いクライアントとの非互換性を修正しました(古いクライアントには
DateTime('timezone')型のデータが送信されることがあり、これを解釈できませんでした)。 ALTERを使用して追加されたが、古いパーティションでは空である構造のNestedカラム要素を読み取る際、これらのカラムに対する条件がPREWHEREに移動された場合のバグを修正しました。Mergeテーブルへのクエリで仮想_tableカラムによるテーブルフィルタリングを行う際のバグを修正しました。DistributedテーブルでALIASカラムを使用する際のバグを修正しました。quantile系の集約関数を含むクエリに対して動的コンパイルが行えなかったバグを修正しました。- 非常にまれなケースで、テーブル数が多い
MergeテーブルやGLOBALサブクエリを使用している場合に、クエリ実行パイプラインで発生していたレースコンディションを修正しました。 - 複数の引数からの集約関数を使用する際に、サイズが異なる配列を
arrayReduce関数に渡すとクラッシュする問題を修正しました。 MATERIALIZED VIEW内でUNION ALLを含むクエリの使用を禁止しました。- サーバー起動時に
part_logシステムテーブルの初期化中に発生していたエラーを修正しました(デフォルトではpart_logは無効になっています)。
後方互換性のない変更:
distributed_ddl_allow_replicated_alterオプションを削除しました。この動作はデフォルトで有効になっています。strict_insert_defaults設定を削除しました。この機能を使用していた場合は、[email protected]までご連絡ください。UnsortedMergeTreeエンジンを削除しました。
ClickHouse Release 1.1.54343, 2018-02-05
- 分散 DDL クエリおよび Distributed テーブルのコンストラクタで、クラスタ名を定義するためのマクロのサポートを追加しました:
CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table')。 SELECT ... FROM table WHERE expr IN (subquery)のようなクエリが、tableのインデックスを使用して処理されるようになりました。- Replicated テーブルへの挿入時の重複処理を改善し、レプリケーションキューの実行を遅くしないようにしました。
ClickHouse Release 1.1.54342, 2018-01-22
このリリースには、前のリリース 1.1.54337 のバグ修正が含まれます:
- 1.1.54337 のリグレッションを修正しました: デフォルトユーザが読み取り専用アクセスのみを持つ場合、サーバが
Cannot create database in readonly modeというメッセージとともに起動を拒否していました。 - 1.1.54337 のリグレッションを修正しました: systemd を使用しているシステムで、ログが設定に関係なく常に syslog に書き込まれ、watchdog スクリプトはいまだに init.d を使用していました。
- 1.1.54337 のリグレッションを修正しました: Docker イメージのデフォルト設定が誤っていました。
- GraphiteMergeTree の非決定的な挙動を修正しました(ログメッセージ
Data after merge is not byte-identical to the data on another replicasとして現れることがあります)。 - Replicated テーブルに対する OPTIMIZE クエリの後に、不整合なマージが発生する可能性のあるバグを修正しました(ログメッセージ
Part ... intersects the previous partとして現れることがあります)。 - Buffer テーブルが、宛先テーブルに MATERIALIZED カラムが存在する場合でも正しく動作するようになりました(by zhang2014)。
- NULL の実装におけるバグを修正しました。
ClickHouse Release 1.1.54337, 2018-01-18
新機能:
- テーブル内での多次元配列およびタプル(
Tupleデータ型)の保存サポートを追加しました。 DESCRIBEおよびINSERTクエリ向けのテーブル関数をサポートしました。DESCRIBEでサブクエリを使用できるようにしました。例:DESC TABLE remote('host', default.hits)、DESC TABLE (SELECT 1)、INSERT INTO TABLE FUNCTION remote('host', default.hits)。INSERT INTOに加えてINSERT INTO TABLEもサポートしました。- タイムゾーンのサポートを改善しました。
DateTimeデータ型に対して、テキストフォーマットでのパースおよびフォーマットに使用されるタイムゾーンを注釈として指定できるようになりました。例:DateTime('Asia/Istanbul')。DateTime引数に対して関数内でタイムゾーンが指定された場合、戻り値の型はそのタイムゾーンを保持し、値は期待どおりに表示されます。 - 関数
toTimeZone、timeDiff、toQuarter、toRelativeQuarterNumを追加しました。toRelativeHour/Minute/Second関数は、引数としてDate型の値を受け取ることができます。now関数名は大文字小文字を区別します。 toStartOfFifteenMinutes関数を追加しました(Kirill Shvakov)。- クエリをフォーマットするための
clickhouse formatツールを追加しました。 format_schema_path設定パラメータを追加しました(Marek Vavruša)。これはCap'n Protoフォーマットでスキーマを指定するために使用します。スキーマファイルは指定されたディレクトリ内にのみ配置できます。- 外部ディクショナリおよびモデルの設定に対する設定ファイル置換(
inclおよびconf.d)のサポートを追加しました(Pavel Yakunin)。 system.settingsテーブルにドキュメント用の列を追加しました(Kirill Shvakov)。- 各
MergeTreeテーブルのデータパーツごとのカラムサイズに関する情報を持つsystem.parts_columnsテーブルを追加しました。 - ロード済みの
CatBoost機械学習モデルに関する情報を持つsystem.modelsテーブルを追加しました。 - リモートデータベースへアクセスするための
mysqlおよびodbcテーブル関数と、それに対応するMySQLおよびODBCテーブルエンジンを追加しました。この機能はベータ段階です。 groupArray集約関数に対して、AggregateFunction型の引数を渡せるようにしました(これにより、ある集約関数の状態の配列を作成できます)。- 集約関数コンビネータのさまざまな組み合わせに対する制限を削除しました。たとえば、
avgForEachIfだけでなく、異なる動作を持つavgIfForEach集約関数も使用できます。 -ForEach集約関数コンビネータを、複数引数の集約関数の場合にも拡張しました。- 関数が非
Nullableな結果を返す場合であっても、Nullable引数を持つ集約関数のサポートを追加しました(Silviu Caragea によるコントリビューション)。例:groupArray、groupUniqArray、topK。 clickhouse-client用にmax_client_network_bandwidthを追加しました(Kirill Shvakov)。readonly = 2設定を持つユーザーが、一時テーブル(CREATE、DROP、INSERT...)を扱えるようにしました(Kirill Shvakov)。Kafkaエンジンで複数のコンシューマを使用するためのサポートを追加しました。Kafka向けの設定オプションを拡張しました(Marek Vavruša)。intExp3およびintExp4関数を追加しました。sumKahan集約関数を追加しました。to*Number*OrNull関数を追加しました。ここで Number は数値型です。INSERT SELECTクエリに対するWITH句のサポートを追加しました(author: zhang2014)。http_connection_timeout、http_send_timeout、http_receive_timeout設定を追加しました。特に、これらの設定はレプリケーション用のデータパーツのダウンロードに使用されます。これらの設定を変更することで、ネットワーク過負荷時のフェイルオーバーをより高速に行うことができます。Null型テーブルに対するALTERのサポートを追加しました(Anastasiya Tsarkova)。reinterpretAsString関数を、メモリ上で連続して格納されるすべてのデータ型に対して拡張しました。clickhouse-localツールに--silentオプションを追加しました。これは、クエリ実行情報を stderr に出力しないようにします。- テキストから
Date型の値を読み取る際に、月および/または日が 2 桁ではなく 1 桁で指定されるフォーマットのサポートを追加しました(Amos Bird)。
パフォーマンス最適化:
- 文字列引数を取る集約関数
min、max、any、anyLast、anyHeavy、argMin、argMaxのパフォーマンスを改善しました。 - 関数
isInfinite、isFinite、isNaN、roundToExp2のパフォーマンスを改善しました。 - テキスト形式での
DateおよびDateTime型値のパースとフォーマットのパフォーマンスを改善しました。 - 浮動小数点数のパースのパフォーマンスと精度を改善しました。
- 左右のテーブルの両方に、
USINGに含まれない同名の列がある場合のJOINのメモリ使用量を削減しました。 - 数値計算の安定性を犠牲にすることで、集約関数
varSamp、varPop、stddevSamp、stddevPop、covarSamp、covarPop、corrのパフォーマンスを改善しました。従来の関数はvarSampStable、varPopStable、stddevSampStable、stddevPopStable、covarSampStable、covarPopStable、corrStableという名前で利用できます。
バグ修正:
DROPまたはDETACH PARTITIONクエリ実行後のデータ重複排除の問題を修正しました。以前のバージョンでは、パーティションを削除して同じデータを再挿入すると、挿入されたブロックが重複と見なされるため、正しく動作しませんでした。POPULATEを伴うCREATE MATERIALIZED VIEWクエリにおいて、WHERE句が誤って解釈される可能性があったバグを修正しました。zookeeper_servers設定でのroot_pathパラメータの使用に関するバグを修正しました。Date引数をtoStartOfDayに渡した場合に想定外の結果となる問題を修正しました。- 結果が前年になる場合における
addMonthsおよびsubtractMonths関数とINTERVAL n MONTHの算術処理を修正しました。 UUIDデータ型に対するDISTINCT、JOIN、uniq集約関数および外部ディクショナリの不足していたサポートを追加しました(Evgeniy Ivanov)。UUIDのサポートはまだ不完全です。- 行の合計がゼロになる場合の
SummingMergeTreeの挙動を修正しました。 Kafkaエンジンに対するさまざまな修正を行いました(Marek Vavruša)。Joinテーブルエンジンの不正な挙動を修正しました(Amos Bird)。- FreeBSD および OS X におけるアロケータの不正な挙動を修正しました。
extractAll関数が空のマッチをサポートするようになりました。opensslの代わりにlibresslを使用することを妨げていたエラーを修正しました。- 一時テーブルからの
CREATE TABLE AS SELECTクエリを修正しました。 - レプリケーションキュー更新の非アトミック性を修正しました。これにより、サーバー再起動までレプリカが同期しない状態になる可能性がありました。
gcd、lcm、およびmodulo(%演算子)におけるオーバーフローの可能性を修正しました(Maks Skorokhod)。umaskを変更した後に-preprocessedファイルが作成されるようになりました(umaskは設定で変更可能です)。- カスタムパーティションキーを使用している場合の、パーツのバックグラウンドチェック(
MergeTreePartChecker)におけるバグを修正しました。 - テキストフォーマットにおけるタプル(
Tupleデータ型の値)のパースを修正しました。 multiIf、arrayおよびその他の一部の関数に渡された互換性のない型に関するエラーメッセージを改善しました。Nullable型のサポートを再設計しました。サーバークラッシュにつながる可能性のあるバグを修正しました。INSERT SELECTでの不正な型変換、HAVING および PREWHERE における Nullable の不十分なサポート、join_use_nullsモード、OR演算子の引数としての Nullable 型など、NULLサポートに関連するほぼすべてのその他のバグを修正しました。- データ型の内部セマンティクスに関連するさまざまなバグを修正しました。例:
SummingMergeTreeにおけるEnum型フィールドの不要な加算、PrettyフォーマットでのEnum型のアラインメントなど。 - 複合カラムに対して許可される組み合わせに関するチェックをより厳格にしました。
FixedStringデータ型で非常に大きなパラメータを指定した際のオーバーフローを修正しました。- 汎用ケースにおける
topK集約関数のバグを修正しました。 -Arrayコンビネータを持つ n 項集約関数の引数に対して、配列サイズが等しいことを確認する不足していたチェックを追加しました。clickhouse-clientの--pagerにおけるバグを修正しました(著者: ks1322)。exp10関数の精度を修正しました。- ドキュメントとの整合性を高めるため、
visitParamExtract関数の挙動を修正しました。 - 不正なデータ型が指定された場合にクラッシュする問題を修正しました。
- すべてのカラムが定数である場合の
DISTINCTの挙動を修正しました。 - タプル要素インデックスとして複雑な定数式を使用した
tupleElement関数を利用する場合のクエリフォーマットを修正しました。 range_hashedディクショナリ向けのDictionaryテーブルにおけるバグを修正しました。FULLおよびRIGHT JOINの結果に過剰な行が含まれる原因となるバグを修正しました(Amos Bird)。- 設定のリロード中に
config.dディレクトリ内で一時ファイルを作成・削除した際にサーバーがクラッシュする問題を修正しました。 SYSTEM DROP DNS CACHEクエリを修正しました。キャッシュはフラッシュされていましたが、クラスターノードのアドレスが更新されていませんでした。- ビュー対象のテーブルに対して
DETACH TABLEを実行した後のMATERIALIZED VIEWの挙動を修正しました(Marek Vavruša)。
ビルドの改善:
- ビルドには
pbuilderツールが使用されます。ビルドプロセスはビルドホスト環境にほぼ完全に依存しません。 - 異なる OS バージョンに対して単一のビルド成果物を使用します。パッケージとバイナリは、幅広い Linux システムと互換性を持つように作成されています。
clickhouse-testパッケージを追加しました。機能テストを実行するために使用できます。- ソースの tarball をリポジトリに公開できるようになりました。GitHub を使用せずにビルドを再現するために使用できます。
- Travis CI との限定的な統合を追加しました。Travis のビルド時間制限により、デバッグビルドのみがテストされ、テストの一部のみが実行されます。
- デフォルトビルドで
Cap'n'Protoのサポートを追加しました。 - ドキュメントソースのフォーマットを
Restricted TextからMarkdownに変更しました。 systemdのサポートを追加しました (Vladimir Smirnov)。一部の OS イメージとの非互換性のため、デフォルトでは無効化されており、手動で有効化できます。- 動的コード生成のために、
clangとlldをclickhouseバイナリに同梱しました。clickhouse clangおよびclickhouse lldとして呼び出すこともできます。 - コードから GNU 拡張の使用を削除しました。
-Wextraオプションを有効にしました。clangでビルドする場合、デフォルトはlibstdc++ではなくlibc++になります。 - 各種ツールのビルドを高速化するために、
clickhouse_parsersおよびclickhouse_common_ioライブラリを分離しました。
後方互換性のない変更:
Nullable列を含むLog型テーブルにおけるマークのフォーマットが後方互換性のない形で変更されました。これらのテーブルがある場合は、新しいサーバーバージョンを起動する前に、それらをTinyLog型に変換する必要があります。これを行うには、metadataディレクトリ内の該当する.sqlファイルでENGINE = LogをENGINE = TinyLogに置き換えます。テーブルにNullable列が存在しない場合、またはテーブルの型がLogでない場合は、何もする必要はありません。experimental_allow_extended_storage_definition_syntax設定を削除しました。現在この機能はデフォルトで有効になっています。- 混同を避けるため、
runningIncome関数はrunningDifferenceStartingWithFirstvalueに名前が変更されました。 - ARRAY JOIN がテーブルなしで FROM の直後に直接指定されている場合の
FROM ARRAY JOIN arr構文を削除しました (Amos Bird)。 - デモ目的のみに使用されていた
BlockTabSeparatedフォーマットを削除しました。 - 集約関数
varSamp、varPop、stddevSamp、stddevPop、covarSamp、covarPop、corrの状態フォーマットを変更しました。これらの集約関数の状態を (対応する状態を持つAggregateFunctionデータ型やマテリアライズドビューを使用して) テーブルに保存している場合は、[email protected] までご連絡ください。 - 以前のサーバーバージョンには、ドキュメント化されていない機能がありました。集約関数がパラメータに依存していても、
AggregateFunctionデータ型でパラメータを指定せずに記述できました。例:AggregateFunction(quantiles, UInt64)をAggregateFunction(quantiles(0.5, 0.9), UInt64)の代わりに使用可能でした。この機能は現在は利用できなくなっています。ドキュメント化されてはいませんでしたが、将来のリリースで再度サポートする予定です。 - Enum データ型は min/max 集約関数で使用できなくなりました。この機能は次のリリースで再び利用可能になる予定です。
アップグレード時の注意事項:
- クラスターでローリングアップデートを実行する際、一部のレプリカが古いバージョンの ClickHouse を実行しており、他が新しいバージョンを実行しているタイミングでは、レプリケーションはいったん停止し、ログに
unknown parameter 'shard'というメッセージが表示されます。クラスター内のすべてのレプリカが更新されると、レプリケーションは再開されます。 - クラスターサーバーで異なるバージョンの ClickHouse が動作している場合、次の関数を使用する分散クエリで誤った結果が返される可能性があります:
varSamp、varPop、stddevSamp、stddevPop、covarSamp、covarPop、corr。すべてのクラスターノードを更新する必要があります。