ClickHouse リリース 18.16
ClickHouse リリース 18.16.1、2018-12-21
バグ修正:
- ODBC ソースを使用した Dictionaries の更新時に問題が発生するエラーを修正しました。#3825, #3829
- 集約関数の JIT コンパイルが LowCardinality カラムで動作するようになりました。#3838
改善点:
low_cardinality_allow_in_native_format設定を追加しました (デフォルトで有効) 。これを無効にすると、SELECT クエリでは LowCardinality カラムが通常のカラムに変換され、INSERT クエリでは通常のカラムが必要になります。 #3879
ビルドの改善:
- macOS および ARM でのビルドに関する修正。
ClickHouse リリース 18.16.0、2018-12-14
新機能:
- 半構造化入力フォーマット (
JSONEachRow、TSKV) でデータを読み込む際、欠落しているフィールドに対してDEFAULT式が評価されるようになりました。この機能はinsert_sample_with_metadata設定で有効になります。#3555 ALTER TABLEクエリに、テーブルのカラムを追加または削除する際にソートキーを変更するためのMODIFY ORDER BYアクションが追加されました。これは、SummingMergeTreeやAggregatingMergeTreeなど、このソートキーに基づいてマージ時に追加処理を行うMergeTree familyのテーブルで有用です。#3581 #3755MergeTree familyのテーブルでは、異なるソートキー (ORDER BY) と索引 (PRIMARY KEY) を指定できるようになりました。ソートキーは索引より長くできます。#3581- HDFS へのデータのインポートおよびエクスポート用に、
hdfstable function とHDFStable engine が追加されました。chenxing-xc - base64 を扱うための関数
base64Encode、base64Decode、tryBase64Decodeが追加されました。Alexander Krasheninnikov uniqCombinedaggregate function の精度を設定するためのパラメータ (HyperLogLog の cell 数を選択) が使えるようになりました。#3406- ClickHouse でコミットを行ったすべての人の名前を含む
system.contributorsテーブルが追加されました。#3452 ALTER TABLE ... FREEZEクエリでパーティションの指定を省略し、すべてのパーティションを一度にバックアップできるようになりました。#3514- 戻り値の型を指定する必要がない
dictGetおよびdictGetOrDefault関数が追加されました。型は Dictionary の定義から自動的に判定されます。Amos Bird - テーブル定義でカラムにコメントを指定し、
ALTERを使って変更できるようになりました。#3377 - 単純なキーを持つ
Join型のテーブルに対する読み取りがサポートされました。Amos Bird Join型のテーブルを作成する際に、join_use_nulls、max_rows_in_join、max_bytes_in_join、join_overflow_modeの各オプションを指定できるようになりました。Amos BirdJoin型のテーブルを Dictionary のように使える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。DistributedGROUP 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 - 深夜0時に時計が巻き戻された場合の日時計算を修正しました (これはイランで発生しており、モスクワでも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 引数を指定した際に発生していたクラッシュを修正しました。NullableではないArray型のカラムに、ValuesフォーマットでNULL要素を含む配列を挿入しようとした際に発生していたエラーを修正しました (input_format_values_interpret_expressions= 1 の場合) 。 #3487 #3503- ZooKeeper が利用できない場合に、
DDLWorkerでエラーログが継続的に出力される問題を修正しました。8f50c620 quantile*関数で、引数がDate型およびDateTime型の場合の戻り値の型を修正しました。#3580- 式を含まない単純なエイリアスのみを指定した場合の
WITH句の不具合を修正しました。#3570 enable_optimize_predicate_expressionが有効な場合に、名前付きサブクエリや修飾付きカラム名を含むクエリの処理を修正しました。Winter Zhang- materialized view の操作時に発生するエラー
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 family のテーブルで大きなパーツを形成するマージはO_DIRECTモードで実行されるため、page cache の過度なエビクションを防ぎます。#3504- テーブル数が非常に多い場合のサーバー起動を高速化しました。#3398
- レプリカ間の接続向けに、接続プールと HTTP
Keep-Aliveを追加しました。#3594 - クエリの構文が無効な場合、
HTTPインターフェイスでは400 Bad Requestコードが返されます (以前は500が返されていました) 。 31bc680a - 互換性を保つため、
join_default_strictnessオプションはデフォルトでALLに設定されています。120e2cbe - 無効または複雑な正規表現に対して、
re2ライブラリがstderrへ出力していたログを削除しました。 #3723 Kafkaテーブルエンジンに、Kafka からの読み取りを開始する前にサブスクリプションを確認するチェック機能と、テーブル用の kafka_max_block_size 設定を追加しました。Marek VavrušacityHash64、farmHash64、metroHash64、sipHash64、halfMD5、murmurHash2_32、murmurHash2_64、murmurHash3_32、およびmurmurHash3_64関数は、任意の数の引数とタプル形式の引数を扱えるようになりました。#3451 #3519arrayReverse関数は、任意の型の配列で動作するようになりました。73e3a7b6- オプションのパラメーターとして、
timeSlots関数のスロットサイズ指定を追加しました。Kirill Shvakov FULLおよびRIGHT JOINでは、右側のテーブルから出力される未結合データのストリームにmax_block_size設定が使用されます。Amos Bird- TLS を有効にするための
--secureコマンドラインパラメータが、clickhouse-benchmarkとclickhouse-performance-testに追加されました。#3688 #3690 Buffer型テーブルの構造が宛先テーブルの構造と一致しない場合の型変換。 Vitaly Baranovtcp_keep_alive_timeoutオプションを追加し、指定した時間アイドル状態が続いた後に keep-alive パケットを送信できるようにしました。#3441system.partsテーブルで、パーティションキーが単一カラムで構成される場合の値に対する不要な引用符を削除しました。#3652- 剰余関数は、
DateおよびDateTimeデータ型で使用できます。#3385 POWER、LN、LCASE、UCASE、REPLACE、LOCATE、SUBSTR、MID関数のシノニムを追加しました。#3774 #3763 SQL 標準との互換性のため、一部の関数名は大文字と小文字を区別しないようになりました。SQL との互換性のため、シンタックスシュガーSUBSTRING(expr FROM start FOR length)を追加しました。#3804clickhouse-serverの実行可能コードに対応するメモリページをmlockし、スワップアウトされないようにできるようになりました。この機能はデフォルトで無効です。#3553min_bytes_to_use_direct_ioオプションが有効な場合のO_DIRECTからの読み取りパフォーマンスを改善しました。#3405dictGet...OrDefault関数について、定数キー引数と非定数のデフォルト引数におけるパフォーマンスを改善しました。 Amos BirdfirstSignificantSubdomain関数が、gov、mil、eduドメインに対応しました。Igor Hatarist パフォーマンスが改善されました。#3628SYS-V init.dスクリプトでclickhouse-serverを起動する際、/etc/default/clickhouseでCLICKHOUSE_PROGRAM_ENVを定義することで、カスタム環境変数を指定できるようになりました。 Pavlo Bashynskyi- clickhouse-server の init スクリプトの戻りコードを修正しました。#3516
system.metricsテーブルにはVersionIntegerメトリクスが追加され、system.build_optionsにはVERSION_INTEGERという行も追加されました。これには、18016000のような ClickHouse バージョンの数値表現が格納されます。#3644date = 2018-12-17のように、日付を誤って引用符で囲まずに記述してしまった場合に起こり得るエラーを防ぐため、Date型を数値と比較できないようにしました。 #3687rowNumberInAllBlocksのような Stateful な関数の動作を修正しました。従来はクエリ解析中に処理が開始されていたため、結果が 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 ソースを使用したDictionaryの更新で問題を引き起こしていたエラーを修正しました。 #3825, #3829
- DDL
ON CLUSTERクエリの実行時に、データベースが正しく指定されるよう修正しました。 #3460 max_temporary_non_const_columnsの制限を超えた場合に発生していたセグメンテーションフォールトを修正しました。 #3788
ビルドの改善:
- ARM向けビルドの修正。
ClickHouse リリース 18.14.18 (2018-12-04)
バグ修正:
- 一方の引数が定数でもう一方が定数でない場合に、
range型のDictionaryに対するdictGet...関数で発生していたエラーを修正しました。#3751 - Linux カーネルのログに
netlink: '...': attribute type 1 has an invalid lengthというメッセージが出力される原因となっていたエラーを修正しました。この問題は、比較的新しい Linux カーネルのバージョンでのみ発生していました。#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 bridge プロセスがメインサーバープロセスと一緒に終了しないことがある問題を修正しました。 #3642
- リモートテーブルのカラム一覧と異なるカラム一覧を指定した
Distributedテーブルへの同期 insert の問題を修正しました。 #3673 - MergeTree テーブルの drop 時にクラッシュを引き起こすことがある、まれな race condition を修正しました。 #3643
- クエリスレッドの作成が
Resource temporarily unavailableエラーで失敗した場合に発生するクエリのデッドロックを修正しました。 #3643 CREATE AS table構文を使用し、ENGINEclause がAS tableより前に指定されていた場合のENGINEclause のパースを修正しました (この不具合により、指定した engine が無視されていました) 。 #3692
ClickHouse リリース 18.14.15、2018-11-21
バグ修正:
Array(String)型のカラムのデシリアライズ時に、memory chunk のサイズが過大に見積もられ、その結果 “Memory limit exceeded” エラーが発生していました。この問題はバージョン 18.12.13 で発生しました。 #3589
ClickHouse リリース 18.14.14 (2018-11-20)
バグ修正:
- クラスターがセキュア (フラグ
<secure>) に設定されている場合のON CLUSTERクエリを修正しました。 #3599
ビルドの変更:
- 問題を修正しました (システムの 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 つのサブクエリを JOIN した際にクラッシュする問題を修正しました。#3505
- 外部データベースにクエリを実行する際、誤ったクエリ (空の
WHERE句を含む) が生成される問題を修正しました。hotid - ODBC Dictionaryで誤った timeout 値が使用される問題を修正しました。Marek Vavruša
ClickHouse リリース 18.14.11、2018-10-29
バグ修正:
- LIMIT クエリで発生していたエラー
Block structure mismatch in UNION stream: different number of columnsを修正しました。#2156 - Nested 構造内に Array を含むテーブルで、データのマージ時に発生していたエラーを修正しました。#3397
merge_tree_uniform_read_distribution設定が無効な場合 (デフォルトでは有効) にクエリ結果が不正になる問題を修正しました。#3429- Native フォーマットでの Distributed テーブルへの INSERT 時に発生していたエラーを修正しました。#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 CUBEmodifier を追加しました (代替構文GROUP BY CUBE(...)も利用できます) 。#3172formatDateTimefunction を追加しました。Alexandr KrasheninnikovJDBCtable engine とjdbctable function を追加しました (clickhouse-jdbc-bridge のインストールが必要です) 。Alexandr Krasheninnikov- ISO week number を扱うための関数
toISOWeek、toISOYear、toStartOfISOYear、toDayOfYearを追加しました。#3146 MySQLおよびODBCtable でNullableカラムを使用できるようになりました。#3362- ネストされたデータ構造を
JSONEachRowフォーマットでネストされたオブジェクトとして読み取れるようになりました。input_format_import_nested_jsonsetting を追加しました。Veloman Yunkan - データ挿入時に、多くの
MATERIALIZED VIEWで並列処理を利用できるようになりました。parallel_view_processingsetting を参照してください。Marek Vavruša SYSTEM FLUSH LOGSクエリを追加しました (query_logなどのシステムテーブルへのログ flush を強制します) 。#3321Replicatedtable の宣言時に、事前定義されたdatabaseおよびtableマクロを使用できるようになりました。#3251Decimal型の値を工学表記 (10 の累乗を示す表記) で読み取れるようになりました。#3153
実験的機能:
LowCardinality data types.に対するGROUP BY句の最適化。 #3138LowCardinality data types.に対する式の計算の最適化。 #3200
改善点:
ORDER BYとLIMITを使用するクエリのメモリ使用量を大幅に削減しました。max_bytes_before_remerge_sort設定を参照してください。#3205JOIN(LEFT、INNER、…) が省略されている場合は、INNER JOINが仮定されます。#3147JOINを含むクエリで、修飾されたアスタリスクが正しく機能するようになりました。Winter ZhangODBCテーブルエンジンは、リモートデータベースの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。 ALTER UPDATEクエリではON CLUSTERを指定できます。JSONEachRowフォーマットでのデータ読み取り性能を改善しました。 #3332- 互換性向上のため、
LENGTH関数とCHARACTER_LENGTH関数の同義語を追加しました。CONCAT関数で大文字・小文字を区別しなくなりました。#3306 DateTime型の別名としてTIMESTAMPを追加しました。#3390- クエリに関係のないログ行であっても、サーバーログでは常に query_id 用の領域が確保されています。これにより、サードパーティ製ツールでサーバーのテキストログを解析しやすくなります。
- クエリのメモリ消費量は、整数ギガバイト単位の次のしきい値を超えるとログに記録されます。 #3205
- ネイティブプロトコルを使用するクライアントライブラリが、INSERT クエリに対してサーバーが想定するより少ないカラムを誤って送信した場合に備え、互換性モードを追加しました。この問題は、clickhouse-cpp ライブラリの使用時に発生する可能性がありました。従来は、この状況でサーバーがクラッシュしていました。#3171
clickhouse-copierのユーザー定義のWHERE式で、partition_keyエイリアス (ソーステーブルのパーティションに対する追加のフィルタリング用) が使えるようになりました。これは、コピー中にパーティション化の方式が変わっても、その変更がわずかな場合に便利です。#3166Kafkaエンジンのワークフローは、高負荷時にデータの読み取り速度を自動的に抑えるため、バックグラウンドスレッドプールに移されました。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_hashedDictionary のDictionaryテーブルに関する問題を修正しました。このエラーはバージョン18.12.17で発生していました。#1702range_hashed辞書の読み込み時に発生するエラー (メッセージ:Unsupported type Nullable (...)) を修正しました。このエラーはバージョン 18.12.17 で発生していました。 #3362- 互いに近接した多数の頂点を持つPolygonにおいて、不正確な計算の蓄積により
pointInPolygon関数で発生していたエラーを修正しました。 #3331 #3341 - data partのマージ後、生成されたパーツのチェックサムが別のレプリカで同じマージを行った結果と異なる場合、マージ結果は削除され、data partはもう一方のレプリカからダウンロードされます (これは正しい動作です) 。しかし、data partをダウンロードした後、そのパーツは「partがすでに存在する」というエラーのためワーキングセットに追加できませんでした (これは、マージ後にdata partが少し遅れて削除されたためです) 。その結果、同じデータを繰り返しダウンロードしようとする状態になっていました。#3194
- クエリによる総メモリ消費量の誤った計算を修正しました (この計算誤りにより、
max_memory_usage_for_all_queries設定が正しく機能せず、MemoryTrackingメトリクスの値も誤っていました) 。この不具合はバージョン 18.12.13 で発生しました。Marek Vavruša CREATE TABLE ... ON CLUSTER ... AS SELECT ...の動作を修正しました。このエラーはバージョン 18.12.13 で発生していました。#3247JOINがリモートサーバーでのみ実行される場合に、クエリを開始したサーバー側で不要なデータ構造の準備を行っていた問題を修正しました。#3340Kafkaエンジンの不具合を修正しました。データの読み取り開始時に例外発生後に起きるデッドロックと、完了時のロックに対応しました Marek Vavruša。Kafkaテーブルで、オプションのschemaパラメータ (Cap'n'Protoフォーマットのスキーマ) が指定されていませんでした。Vojtech Splichal- ZooKeeper サーバー群の中に、接続を受け入れた直後にハンドシェイクへ応答せず、すぐに切断するサーバーがある場合、ClickHouse は別のサーバーへの接続を試みます。以前は、この状況で error
Cannot read all data. Bytes read: 0. Bytes expected: 4.が発生し、サーバーを起動できませんでした。8218cf3a - ZooKeeper サーバーのアンサンブルに DNS クエリでエラーが返されるサーバーが含まれている場合、それらのサーバーは無視されます。17b8e209
VALUESフォーマットでデータを insert する際のDateとDateTime間の型変換を修正しました (input_format_values_interpret_expressions = 1の場合) 。以前は、Unix epoch における日数を表す数値と Unix timestamp の間で変換が行われていたため、予期しない結果が生じていました。#3229Decimalと整数値の間の型変換を修正しました。#3211enable_optimize_predicate_expression設定に関するエラーを修正しました。Winter Zhang;などのデフォルト以外の CSV 区切り文字を使用した場合に、浮動小数点数を含む CSV フォーマットで発生していたパースエラーを修正しました #3155arrayCumSumNonNegative関数を修正しました (アキュムレータが 0 未満の場合、負の値は累積されないようにしました) 。Aleksey StudnevPREWHERE使用時に、Distributedテーブル上のMergeテーブルが正しく動作するよう修正しました。#3165ALTER UPDATEクエリの不具合を修正。- バージョン18.12で発生した
odbcテーブル関数の不具合を修正しました。#3197 StateArrayコンビネータを使用する集約関数の動作を修正しました。 #3188Decimalの値を 0 で除算したときに発生するクラッシュを修正しました。69dd6609Decimalと整数の引数を使用する演算での型出力を修正しました。 #3224Decimal128に対するGROUP BY実行中に発生するセグメンテーションフォールトを修正しました。3359ba06log_query_threads設定 (クエリ実行の各スレッドに関するログ情報) は、log_queriesオプション (クエリに関するログ情報) が 1 に設定されている場合にのみ有効になります。log_query_threadsオプションはデフォルトで有効なため、これまではクエリのログが無効でも、スレッドに関する情報が記録されていました。#3241- 分位点集約関数の分散実行で発生していたエラーを修正しました (エラーメッセージ:
Not found column quantile...) 。 292a8855 - バージョン 18.12.17 のサーバーとそれ以前のサーバーが混在するクラスターで同時に運用した際の互換性の問題を修正しました。固定長と可変長の両方の GROUP BY キーを持つ分散クエリで、集約対象のデータ量が多い場合、返されるデータが常に完全に集約されるとは限らず、異なる 2 つの行に同じ集約キーが含まれることがありました。 #3254
- テストで宣言された置換のうち、クエリに一部しか含まれていない場合の
clickhouse-performance-testでの置換処理を修正しました。#3263 PREWHEREとともにFINALを使用した際に発生していたエラーを修正しました。#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(外部 Dictionary を更新する必要があるかどうかを確認するクエリを指定する機能) が、clickhouseソースで実装されました。#3126- 範囲の境界を定義する
range_hashed外部 Dictionary のキーとして、UInt*、Int*、DateTimeデータ型 (Date型に加えて) を使用できるようになりました。NULLを使って開区間を表すことも可能になりました。Vasily Nemkov Decimal型で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オプションが追加されました。これにより、マージの合計サイズのしきい値を設定できます (しきい値を超えると、data part ファイルは O_DIRECT を使用して処理されます) 。 #3117system.mergesシステムテーブルにpartition_idカラムが含まれるようになりました。 #3099
改善点
- mutation 中に data part が変更されなかった場合、その data part はレプリカにダウンロードされません。#3103
clickhouse-clientの使用時に、設定名のオートコンプリートが利用可能になりました。#3106
バグ修正:
- 挿入時に、
Nested型フィールドの要素である配列のサイズをチェックするようにしました。#3118 ODBCソースおよびhashedストレージを使用する外部Dictionaryの更新時に発生していたエラーを修正しました。このエラーはバージョン 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(...)) 。 #2948- JOIN を含むクエリでは、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
- これで、clickhouse-client でクエリ実行ログを取得できるようになりました (
send_logs_level設定を使用) 。分散クエリ処理では、すべてのサーバーからのログがカスケードされます。#2482 system.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 待機時間、ならびにページキャッシュの有無それぞれにおける読み取り/書き込みデータ量に関する情報を取得できます) 。 #2482 ProfileEventsカウンターは、グローバル、各クエリ、さらに各クエリ実行スレッドごとに適用されるため、クエリごとのリソース消費を詳細にプロファイリングできます。 #2482system.query_thread_logテーブルを追加しました。このテーブルには、各クエリ実行スレッドに関する情報が含まれます。log_query_threads設定を追加しました。 #2482system.metricsテーブルとsystem.eventsテーブルに組み込みのドキュメントが備わりました。#3016arrayEnumerateDense関数が追加されました。Amos BirdarrayCumSumNonNegative関数とarrayDifference関数を追加しました。Aleksey Studnevretention集約関数が追加されました。Sundy Li- これで、プラス演算子を使って集約関数の状態を加算 (merge) できるようになり、さらに集約関数の状態に非負の定数を乗算できるようになりました。 #3062 #3034
- MergeTree familyのテーブルで、仮想カラム
_partition_idが利用できるようになりました。 #3089
実験的機能:
LowCardinality(T)データ型を追加しました。このデータ型は値のローカル Dictionary を自動的に自動生成し、Dictionary を展開することなくデータを処理できます。#2830- JIT コンパイル済み関数の cache と、コンパイル前の使用回数をカウントするカウンターを追加しました。式を JIT コンパイルするには、
compile_expressions設定を有効にしてください。#2990 #3077
改善:
- 放置されたレプリカがある場合に、レプリケーションログが際限なく蓄積される問題を修正しました。長時間遅延しているレプリカ向けの効果的な復旧モードを追加しました。
- 複数の集約フィールドを持つ
GROUP BYについて、そのうち 1 つが文字列型で、他が固定長型である場合のパフォーマンスを改善しました。 PREWHEREの使用時およびPREWHEREへの式の暗黙的な移動時のパフォーマンスが向上しました。- テキストフォーマット (
CSV、TSV) のパース性能を改善しました。 Amos Bird #2980 - バイナリ形式における文字列と配列の読み取り性能を改善しました。Amos Bird
- 1台のサーバー上に非常に多数のテーブルがある場合に、
system.tablesおよびsystem.columnsに対するクエリのパフォーマンスを向上し、メモリ消費を削減しました。#2953 - エラーになるクエリが大量に発生する場合のパフォーマンス問題を修正しました (
perf topには_dl_addr関数が表示されるものの、サーバーの CPU 使用率はそれほど高くありません) 。#2938 - 条件が View に CAST されます (
enable_optimize_predicate_expressionが有効な場合) 。 Winter Zhang UUIDデータ型の機能を改善しました。#3074 #2985- The-Alchemist 辞書で
UUIDデータ型がサポートされるようになりました。#2822 visitParamExtractRaw関数は、ネストされた構造でも正しく動作します。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クエリが materialized view で使えるようになりました。- 非常に多くの
ReplicatedMergeTreeテーブルがある場合に定期的な負荷スパイクを回避するため、ReplicatedMergeTreeテーブルのクリーンアップスレッドを定期実行する際にランダム化を追加しました。 ATTACH TABLE ... ON CLUSTERクエリのサポートを追加しました。#3025
バグ修正:
Dictionaryテーブルで、Size of offsets does not match size of columnまたはUnknown compression methodの例外が発生する問題を修正しました。このバグはバージョン 18.10.3 で発生していました。#2913CollapsingMergeTreeテーブルのマージ時に、データパーツのいずれかが空で (これらのパーツは、マージ時、またはすべてのデータが削除された場合のALTER DELETE時に生成されます) 、かつマージにverticalアルゴリズムが使用されている場合に発生していたバグを修正しました。#3049Memoryテーブルに対してDROPまたはTRUNCATEを実行中にSELECTが同時に実行されると発生し、サーバーのクラッシュにつながる可能性があった競合状態を修正しました。この不具合はバージョン 1.1.54388 で発生していました。#3038Replicatedテーブルへの挿入時にSession is expiredエラーが返された場合、データ損失が発生する可能性があった問題を修正しました (データ損失はReplicatedDataLossメトリクスで検出できます) 。このエラーはバージョン 1.1.54378 で発生していました。 #2939 #2949 #2964JOIN ... ON実行時のセグメンテーションフォールトを修正しました。#3000WHERE式がWHERE table.columnのように修飾付きカラム名のみで構成されている場合に、カラム名の検索時に発生していたエラーを修正しました。#2994- サブクエリを含む
IN式から成る単一のカラムをリモートサーバーに要求した場合に、分散クエリの実行時に発生していた “カラムが見つかりません” エラーを修正しました。 #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テーブルを同時に作成・削除した際に発生する競合状態を修正しました。 - Tuple などの特定の自明でない型で構成されたタプルを比較した際に、segfault が発生する可能性を修正しました。 #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
- 設定ファイルから削除した外部Dictionaryを、サーバーを再起動せずに削除できるようになりました。 #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 quantileExact集約関数は、空のFloat32またはFloat64セットに対して集約した場合、nanを返します。 Sundy Li
バグ修正:
- ODBC の接続文字列パラメータに対する不要なエスケープを削除し、接続を確立できるようにしました。このエラーはバージョン 18.6.0 で発生していました。
- レプリケーションキュー内で
REPLACE PARTITIONコマンドを処理するロジックを修正しました。同じパーティションに対するREPLACEコマンドが 2 つある場合、誤ったロジックにより、そのうち 1 つがレプリケーションキューに残ったまま実行されないことがありました。 #2814 - すべてのデータパーツが空の場合のマージの不具合を修正しました (マージによって作成されたパーツ、またはすべてのデータが削除された場合の
ALTER DELETEによって作成されたパーツ) 。この不具合はバージョン 18.1.0 で発生していました。 #2930 - 同時実行の
SetまたはJoinに関するエラーを修正しました。 Amos Bird SELECTクエリの 1 つに重複したカラム名が含まれている場合、サブクエリ内のUNION ALLクエリで発生していたBlock structure mismatch in UNION stream: different number of columnsエラーを修正しました。 Winter Zhang- MySQL サーバーへの接続時に例外が発生した場合のメモリリークを修正しました。
- クエリエラー時の clickhouse-client のレスポンスコードが正しくない問題を修正しました。
- DISTINCT を含む materialized view の不正な動作を修正しました。 #2795
後方互換性を持たない変更
- 分散テーブルに対する CHECK TABLE クエリのサポートを廃止しました。
ビルドの変更点:
- アロケータが変更され、
tcmallocの代わりにjemallocを使用するようになりました。これにより、一部のケースでは最大 20% 高速化しています。ただし、クエリによっては最大 20% 遅くなっています。一部のケースではメモリ使用量が約 10% 削減され、安定性も向上しました。競合の激しい負荷では、ユーザー空間およびシステムでの CPU 使用率はわずかに増加しています。#2773 - サブモジュール由来の libressl を使用するようになりました。#1983 #2807
- サブモジュール由来の unixodbc を使用するようになりました。#2789
- サブモジュール由来の mariadb-connector-c を使用するようになりました。#2785
- テストデータの可用性に依存する機能テストファイルを repository に追加しました (当面はテストデータ自体は含まれていません) 。
ClickHouse リリース 18.6
ClickHouse リリース 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 のカラムに対する任意の式を指定できます。右側の table では、完全修飾カラム名 (table.name,database.table.name,table_alias.name,subquery_alias.name) を使用できます。 #2742 - レプリケーションで HTTPS を有効にできるようになりました。 #2760
改善点:
- サーバーは自身のバージョンのパッチ部分をクライアントに渡します。パッチバージョンの部分に関するデータは
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 table functionの引数として、テーブルの代わりにテーブル関数を使用できるようになりました #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 ZhanganyHeavy集約関数のバグを修正しました。(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形式のサブネットマスクを設定できるようになりました。これは、途中に 0 を含む IPv6 ネットワークでマスクを使用するために必要です (#2637)。arrayDistinct関数を追加 (#2670)。- SummingMergeTree エンジンが AggregateFunction 型のカラムを扱えるようになりました (Constantin S. Pan)。
改善点:
- リリースバージョンの番号体系を変更しました。現在は、最初の部分がリリース年 (西暦、モスクワ時間、2000を引いた値) 、2 番目の部分がメジャー変更の番号 (ほとんどのリリースで増加) 、3 番目の部分がパッチバージョンを表します。changelog に別途記載がない限り、リリースは引き続き後方互換です。
- 浮動小数点数から文字列への変換を高速化しました (Amos Bird) 。
- パースエラーにより insert 中に一部の行がスキップされた場合 (これは
input_allow_errors_numおよびinput_allow_errors_ratioSettings が有効な場合に発生する可能性があります) 、スキップされた行数がサーバーログに記録されるようになりました (Leonardo Cecchi) 。
バグ修正:
- 一時テーブルに対する TRUNCATE コマンドを修正しました (Amos Bird) 。
- レスポンスの読み取り中にネットワークエラーが発生した際に起きていた、ZooKeeper クライアントライブラリのまれなデッドロックを修正しました (c315200) 。
- Nullable 型への CAST 時に発生するエラーを修正しました (#1322) 。
- インターバルの境界が一致したときに
maxIntersection()関数が誤った結果を返す問題を修正しました (Michael Furmur) 。 - 関数引数内の OR 式チェーンの誤った変換を修正しました (chenxing-xc) 。
- 別のサブクエリ内に
IN (subquery)式を含むクエリで発生していた性能低下を修正しました (#2571) 。 - 大文字ではない
CAST関数を使用する 分散クエリ において、異なるバージョンの server 間で発生していた非互換性を修正しました (fe8c4d6) 。 - 外部 DBMS へのクエリで、識別子のクォートが不足していた問題を修正しました (#2635) 。
後方互換性を持たない変更:
- 数字の 0 を含む文字列は DateTime に変換できません。例:
SELECT toDateTime('0')。このため、テーブルではDateTime DEFAULT '0'は機能せず、Dictionary では<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) 。 ReplicatedMergeTreeで、パーティションを指定せずにOPTIMIZE TABLE ... FINALを使用できるようになりました (Amos Bird) 。
バグ修正:
- レプリケートされたデータの送受信時に、読み書き用ソケットの
timeoutが非常に短く (1 秒) 設定されていた問題を修正しました。このため、ネットワークまたはディスクに負荷がかかっている場合、大きなパーツをダウンロードできず、結果としてパーツのダウンロードを繰り返し試行していました。このエラーはバージョン 1.1.54388 で発生していました。 - テーブルに重複するデータブロックを挿入した場合に、ZooKeeper で
chrootを使用すると問題が発生していた不具合を修正しました。 has関数が、Nullable 要素を持つ Array に対して正しく動作するようになりました (#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) 。 - 非レプリケートの
MergeTreeバリアントでは、パーティションを指定しなくてもOPTIMIZE TABLE ... FINALを使用できるようになりました (Amos Bird) 。
改善点:
- テーブル索引を使用できる場合の
IN演算子で、パフォーマンスを改善し、メモリ消費を削減するとともに、メモリ消費量の追跡を正確化しました (#2584) 。 - データパーツの追加時に行っていた冗長なチェックサム検証を削除しました。これはレプリカ数が多い場合に重要で、そのようなケースではチェック総数が N^2 になっていたためです。
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 リリース 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 engine を使用するテーブルおよび対応するテーブル関数への書き込み機能を追加しました (sundy-li) 。
url()テーブル関数とURLテーブルエンジンを追加しました (Alexander Sapin) 。windowFunnel集約関数を追加しました (sundy-li) 。- 文字列向けの新しい
startsWith関数とendsWith関数を追加しました (Vadim Plakhtinsky) 。 numbers()テーブル関数で OFFSET を指定できるようになりました (Winter Zhang) 。clickhouse-clientのパスワードを対話形式で入力できるようになりました。- サーバーログを syslog に送信できるようになりました (Alexander Krasheninnikov) 。
- 共有ライブラリソースを使用する Dictionary でのロギングをサポートしました (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 クライアントライブラリのバグを修正しました。
- パーティションのキーカラムに対する条件を含むクエリでの、パーツの pruning を修正しました (#2342) 。
CLEAR COLUMN IN PARTITIONの後でもマージできるようになりました (#2315) 。- ODBC テーブル関数 の型マッピングを修正しました (sundy-li) 。
- タイムゾーンあり/なしの
DateTimeに対する型比較を修正しました (Alexander Bocharov) 。 CAST演算子の構文パースとフォーマットを修正しました。- Distributed テーブルエンジンの materialized view への挿入を修正しました (Babacar Diassé) 。
Kafkaエンジンから materialized view にデータを書き込む際の race condition を修正しました (Yangkuan Liu) 。- remote() テーブル関数 における SSRF を修正しました。
- 複数行モードでの
clickhouse-clientの終了時の動作を修正しました (#2510) 。
改善点:
- レプリケートテーブルのバックグラウンドタスクが、個別のスレッドではなくスレッドプールで実行されるようになりました (Silviu Caragea) 。
- LZ4 圧縮のパフォーマンスを改善しました。
- 大量の JOIN とサブクエリを含むクエリの解析が高速化されました。
- ネットワークエラーが多すぎる場合に、DNS cache が自動的に更新されるようになりました。
- パーツが多すぎていずれかの materialized view への insert ができない場合、テーブルへの insert も行われなくなりました。
- イベントカウンター
Query、SelectQuery、InsertQueryの不整合を修正しました。 tuple IN (SELECT tuple)のような式は、tuple の型が一致していれば使用できるようになりました。- レプリケートテーブルを持つサーバーは、ZooKeeper が設定されていなくても起動できるようになりました。
- 使用可能な CPU コア数を計算する際に、cgroups の制限が考慮されるようになりました (Atri Sharma) 。
- systemd の設定ファイルに、設定ディレクトリ用の chown を追加しました (Mikhail Shiryaev) 。
ビルド関連の変更:
- gcc8 コンパイラでビルドできるようになりました。
- サブモジュールから llvm をビルドできるようになりました。
- librdkafka ライブラリのバージョンを v0.11.4 に更新しました。
- システムの libcpuid ライブラリを使用できるようになりました。ライブラリのバージョンも 0.4.0 に更新しました。
- vectorclass ライブラリを使用したビルドの不具合を修正しました (Babacar Diassé) 。
- Cmake はデフォルトで ninja 用のファイルを生成するようになりました (
-G Ninjaを使用した場合と同様) 。 - libtermcap の代わりに libtinfo ライブラリを使用できるようになりました (Georgy Kondratiev) 。
- Fedora Rawhide で発生していたヘッダーファイルの競合を修正しました (#2520) 。
後方互換性を持たない変更:
VerticalおよびPretty*フォーマットでのエスケープを廃止し、VerticalRawフォーマットを削除しました。- バージョン 1.1.54388 (またはそれ以降) のサーバーと、それより古いバージョンのサーバーを分散クエリで同時に使用していて、そのクエリに
ASキーワードなしのcast(x, 'Type')式が含まれ、かつcastが大文字で記述されていない場合、Not found column cast(0, 'UInt8') in blockのようなメッセージとともに例外がスローされます。対処方法: クラスター全体のサーバーを更新してください。
ClickHouse リリース 1.1.54385, 2018-06-01
バグ修正:
- 一部のケースでZooKeeperの操作がブロックされる不具合を修正しました。
ClickHouse リリース 1.1.54383、2018-05-22
バグ修正:
- テーブルに多数のレプリカがある場合に、レプリケーションキューの処理が遅くなる問題を修正しました。
ClickHouse リリース 1.1.54381, 2018-05-14
バグ修正:
- ClickHouse が ZooKeeper サーバーとの接続を失った際に、ZooKeeper でノードリークが発生する問題を修正しました。
ClickHouse リリース 1.1.54380、2018-04-21
新機能:
- テーブル関数
file(path, format, structure)を追加しました。/dev/urandomからバイトを読み込む例:ln -s /dev/urandom /var/lib/clickhouse/user_files/random``clickhouse-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から SELECT する際のIN演算子の誤動作を修正しました。partition_key_column IN (...)のような式で、パーティション索引による誤ったフィルタリングを修正しました。- テーブルに対して
REANAMEが実行された場合に、非リーダーのレプリカでOPTIMIZEクエリを実行できない問題を修正しました。 - 非リーダーのレプリカで
OPTIMIZEまたはALTERクエリを実行した際に発生する認可エラーを修正しました。 KILL QUERYがフリーズする問題を修正しました。- ZooKeeper クライアントライブラリの不具合を修正しました。この不具合により、ZooKeeper の設定で空でない
chrootプレフィックスを使用している場合に、ウォッチの消失、分散 DDL キューの停止、およびレプリケーションキューの遅延が発生していました。
後方互換性を持たない変更:
(a, b) IN (SELECT (a, b))のような式のサポートを廃止しました (代わりに同等の式(a, b) IN (SELECT a, b)を使用できます) 。以前のリリースでは、これらの式によってWHERE句のフィルタリング結果が不定になったり、エラーが発生したりしていました。
ClickHouse リリース 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) 。Kafkaengine では、カンマ区切りで複数のtopicsを指定できます (Tobias Adamson)- クエリが
KILL QUERYまたはreplace_running_queryによって停止された場合、クライアントは不完全な結果ではなくQuery was canceled例外を受け取ります。
改善点:
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の値が設定され、その逆も同様です) 。 Distributedテーブルへの非同期挿入におけるクラッシュリカバリがより堅牢になりました。countEqual関数の戻り値の型がUInt32からUInt64に変更されました (谢磊) 。
バグ修正:
- 式の左辺が
Nullableの場合にINで発生していたエラーを修正しました。 - タプルの一部の要素がテーブルの索引に含まれている場合でも、
INでタプルを使用した際に正しい結果が返されるようになりました。 max_execution_timeの制限が分散クエリで正しく機能するようになりました。system.columnsテーブル内の複合カラムのサイズ計算時に発生していたエラーを修正しました。CREATE TEMPORARY TABLE IF NOT EXISTSで一時テーブルを作成する際に発生していたエラーを修正しました。StorageKafkaのエラーを修正しました (##2075)- 特定の集約関数に無効な引数を渡した際に発生するサーバークラッシュを修正しました。
DETACH DATABASEクエリでReplicatedMergeTreeテーブルのバックグラウンドタスクを停止できなかったエラーを修正しました。- 集約された materialized view への insert 時に
Too many parts状態が発生しにくくなりました (##2084)。 - 同じレベルで、ある置換の直後に別の置換を続けて適用する必要がある場合の、設定内における置換の再帰的な処理を修正しました。
UNION ALLを含むクエリを使用するVIEWの作成時に、メタデータファイルの構文が正しく生成されるよう修正しました。SummingMergeTreeが、複合キーを持つネストされたデータ構造の合計計算で正しく動作するようになりました。ReplicatedMergeTreeテーブルのリーダー選択時に競合状態が発生する可能性を修正しました。
ビルドの変更:
- ビルドは
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を使用してください。旧名称のパッケージも、後方互換性のため引き続きリポジトリで利用できます。
後方互換性を持たない変更:
- 左辺に配列が指定されている場合の IN 式に対する特別な解釈を削除しました。以前は、式
arr IN (set)は「arrの要素のうち少なくとも 1 つが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 リリース 1.1.54370、2018-03-16
新機能:
system.macrosテーブルを追加し、設定ファイルの変更時にマクロが自動更新されるようにしました。SYSTEM RELOAD CONFIGクエリを追加しました。- 集計関数
maxIntersections(left_col, right_col)を追加しました。これは、同時に交差するインターバル[left; right]の最大数を返します。関数maxIntersectionsPosition(left, right)は、その「最大」のインターバルの開始位置を返します。(Michael Furmur)。
改善点:
Replicatedテーブルへのデータ挿入時に、ZooKeeperへのリクエスト数が減少しました (また、ユーザーレベルのエラーの大半はZooKeeperのログに出なくなりました) 。- データセットに別名を付けられるようになりました。例:
WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10.
バグ修正:
Distributedテーブル用の Merge テーブルの読み取り時に発生していたIllegal PREWHEREエラーを修正しました。- IPv4 のみの Docker コンテナーで clickhouse-server を起動できるようにする修正を追加しました。
- system
system.parts_columns tables.の読み取り時に発生していた 競合状態 を修正しました。 Distributedテーブルへの同期 insert 時の二重バッファリングを削除しました。これにより connection が timeout する可能性がありました。SELECTクエリの開始前に、利用できないレプリカを過度に長く待機してしまうバグを修正しました。system.partsテーブル内の誤った日付を修正しました。ZooKeeperクラスターの configuration でchrootが空でない場合、Replicatedテーブルにデータを insert できなくなるバグを修正しました。- 空の
ORDER BYテーブルに対する垂直 merging アルゴリズムを修正しました。 - リクエスト元の server にそれらの Dictionaries が存在しない場合でも、リモートテーブルへのクエリで Dictionaries を使用できるように戻しました。この機能はリリース 1.1.54362 で失われていました。
INの右辺でローカルのものではなくリモートのdefault.tableを使用すべき場合の、SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)のようなクエリの動作を復元しました。この動作はバージョン 1.1.54358 で壊れていました。Not found column ... in blockの不要な error レベルのログを削除しました。
ClickHouse リリース 1.1.54362、2018-03-11
新機能:
- 空集合に対する
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の結果で得られるカラムしか使用できませんでした。INが主キーのカラムからなる式のタプルに適用される場合、MergeTreeテーブルの索引が使用されます。例:WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...)(Anastasiya Tsarkova)。- クラスター間のコピーとデータの再分片を行う
clickhouse-copierツールを追加しました (ベータ) 。 - consistent hash 関数
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テーブル関数では、識別子として指定されている場合、第1引数としてクラスター名を指定できます。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ソースの外部 Dictionary でデータを読み込む際、デフォルト値としてnullを読み取るようになりました (Pavel Litvinenko) 。- 単一引用符なしの Unixタイムスタンプから、
ValuesフォーマットでDateTime値を読み取れるようになりました。 - 一部のレプリカに要求されたテーブルが存在しない場合でも、
remoteテーブル関数ではフェイルオーバーがサポートされています。 clickhouse-serverの実行時に、コマンドラインから設定を上書きできます。例:clickhouse-server -- --logger.level=information.FixedString型の引数に対するempty関数を実装しました。この関数は、文字列がヌルバイトだけで構成されている場合に 1 を返します (zhang2014) 。- 一部のアドレスで待ち受けできない場合でも終了せず、少なくとも1つの listen アドレスで待ち受けを継続できるようにする
listen_try設定パラメータが追加されました (IPv4 または IPv6 のサポートが無効になっているシステムで有用です) 。 VersionedCollapsingMergeTreeテーブルエンジンが追加されました。libraryDictionary ソースで、行と任意の数値型をサポート。MergeTreeテーブルは、主キーがなくても使用できます (ORDER BY tuple()を指定する必要があります) 。Nullable型は、引数がNULLでない場合、非Nullable型にCASTできます。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ディレクトリ内の置換を含むファイルは、アルファベット順に読み込まれるようになりました。- 要素の 1 つが空配列である定数の多次元配列に対する
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 (insert_distributed_sync = 1) を修正しました。- サブクエリ内に重複カラムがある場合の、
FULLおよびRIGHT JOINの特定の利用で発生する segfault を修正しました。 replace_running_queryおよびKILL QUERYの特定の利用で発生する segfault を修正しました。system.dictionariesテーブルのsourceカラムとlast_exceptionカラムの順序を修正しました。DROP DATABASEクエリでメタデータファイルが削除されない不具合を修正しました。Dictionarydatabase に対するDROP DATABASEクエリを修正しました。- 1 億件を超える cardinality に対して
uniqHLL12およびuniqCombined関数の精度が低くなる問題を修正しました (Alex Bocharov) 。 INSERTクエリで、デフォルトの明示的 expression も同時に計算する必要がある場合の、暗黙的なデフォルト値の計算を修正しました (zhang2014) 。MergeTreeテーブルへのクエリが完了できなくなるまれなケースを修正しました (chenxing-xc) 。- すべての分片がローカルである場合に、
Distributedテーブルに対してCHECKクエリを実行すると発生するクラッシュを修正しました (chenxing.xc) 。 - 正規表現を使用する関数で発生していた軽微な性能低下を修正しました。
- 複雑な expression から多次元配列を作成する際の性能低下を修正しました。
- メタデータを含む
.sqlファイルに余分なFORMATセクションが出力されることがある不具合を修正しました。 - 明示的に指定したテーブルを参照する
MATERIALIZED VIEWを削除しようとした際に、max_table_size_to_drop制限が適用されてしまう不具合を修正しました。 - 古いクライアントとの非互換性を修正しました (古いクライアントに、解釈できない
DateTime('timezone')型のデータが送られることがありました) 。 ALTERで追加されたものの古いパーティションでは空である structure の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設定を削除しました。この機能を使用していた場合は、feedback@clickhouse.comまでご連絡ください。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の索引を使って処理されるようになりました。- レプリケートテーブルへの挿入時の重複処理を改善し、レプリケーションキューの実行を遅くしないようにしました。
ClickHouse リリース 1.1.54342, 2018-01-22
- 1.1.54337 で発生したリグレッションを修正しました。デフォルトユーザーに readonly アクセス権がある場合、サーバーが
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に現れることがあります) 。 - 宛先テーブルに MATERIALIZED カラムが存在する場合でも、Buffer テーブルが正しく動作するようになりました (zhang2014 による) 。
- NULL の実装におけるバグを修正しました。
ClickHouse リリース 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フォーマットのスキーマを指定するために使用されます。スキーマファイルは、指定されたディレクトリにのみ配置できます。- external dictionaries とモデルの設定向けに、設定の置換 (
inclおよびconf.d) のサポートを追加しました (Pavel Yakunin) 。 system.settingsテーブルに、ドキュメント用のカラムを追加しました (Kirill Shvakov) 。MergeTreeテーブルの各データパートにおけるカラムサイズの情報を含むsystem.parts_columnsテーブルを追加しました。- 読み込まれた
CatBoost機械学習モデルの情報を含むsystem.modelsテーブルを追加しました。 - リモートデータベースにアクセスするための
mysqlおよびodbcテーブル関数と、それに対応するMySQLおよびODBCテーブルエンジンを追加しました。この機能はベータ段階です。 groupArray集約関数に対してAggregateFunction型の引数を渡せるようにしました (これにより、何らかの集約関数の state の配列を作成できます) 。- さまざまな集約関数コンビネータの組み合わせに関する制限を削除しました。たとえば、動作の異なる
avgForEachIfとavgIfForEach集約関数の両方を使用できます。 -ForEach集約関数コンビネータを、複数引数の集約関数にも対応するよう拡張しました。- 関数が非
Nullableの結果を返す場合でも、Nullable引数を持つ集約関数をサポートしました (Silviu Caragea の協力により追加) 。例:groupArray、groupUniqArray、topK。 clickhouse-client用にmax_client_network_bandwidthを追加しました (Kirill Shvakov) 。readonly = 2設定を持つユーザーは、TEMPORARY テーブル (CREATE、DROP、INSERT…) を扱えるようになりました (Kirill Shvakov) 。Kafkaエンジンで複数のコンシューマーを使用できるようにしました。Kafkaの設定オプションも拡張しました (Marek Vavruša) 。intExp3およびintExp4関数を追加しました。sumKahan集約関数を追加しました。-
- Number* が数値型である、to * Number* OrNull 関数群を追加しました。
INSERT SELECTクエリに対するWITH句のサポートを追加しました (author: zhang2014) 。http_connection_timeout、http_send_timeout、http_receive_timeout設定を追加しました。特に、これらの設定はレプリケーション用のデータパートのダウンロードに使用されます。これらの設定を変更することで、ネットワークが過負荷の場合に、より高速なフェイルオーバーが可能になります。Null型のテーブルに対するALTERをサポートしました (Anastasiya Tsarkova) 。reinterpretAsString関数を、メモリ上で連続して格納されるすべてのデータ型に対応するよう拡張しました。clickhouse-localツールに--silentオプションを追加しました。これにより、stderr へのクエリ実行情報の出力が抑制されます。- 月および/または日が2桁ではなく1桁で指定されるフォーマットのテキストから、
Date型の値を読み取れるようになりました (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の演算を修正しました。 DISTINCT、JOIN、uniq集約関数、および external dictionaries に対するUUIDデータ型の不足していたサポートを追加しました (Evgeniy Ivanov) 。UUIDのサポートはまだ不完全です。- 合計結果がゼロになる場合の
SummingMergeTreeの動作を修正しました。 Kafkaengine に関する各種修正を行いました (Marek Vavruša) 。Jointable engine の誤った動作を修正しました (Amos Bird) 。- FreeBSD および OS X におけるアロケータの不正な動作を修正しました。
extractAll関数が空の一致をサポートするようになりました。opensslの代わりにlibresslを使用できなかったエラーを修正しました。- 一時テーブル からの
CREATE TABLE AS SELECTクエリを修正しました。 - レプリケーションキュー更新時のアトミック性の欠如を修正しました。これにより、server が再起動されるまでレプリカの同期が崩れる可能性がありました。
gcd、lcm、modulo(%演算子) で発生し得る overflow を修正しました (Maks Skorokhod) 。umaskの変更後に-preprocessedfiles が作成されるようになりました (umaskは config で変更できます) 。- カスタムの partition key を使用している場合の parts のバックグラウンドチェック (
MergeTreePartChecker) におけるバグを修正しました。 - text formats における tuples (
Tupleデータ型 の値) のパースを修正しました。 multiIf、array、および一部の他の関数に互換性のない型が渡された場合のエラーメッセージを改善しました。Nullableデータ型 のサポートを再設計しました。server クラッシュにつながる可能性のあるバグを修正しました。また、NULLサポートに関連するほぼすべての他のバグも修正しました。たとえば、INSERT SELECT における不正な型変換、HAVING および PREWHERE での Nullable のサポート不足、join_use_nullsmode、ORoperator の引数としての Nullable データ型 などです。- データ型 の内部セマンティクスに関連するさまざまなバグを修正しました。例:
SummingMergeTreeにおけるEnumtype フィールドの不要な合計、Prettyformats におけるEnumtypes の alignment など。 - 複合カラムの許可された組み合わせに対するチェックをより厳密にしました。
FixedStringデータ型 に非常に大きなパラメータを指定した場合の overflow を修正しました。- 一般的なケースにおける
topK集約関数のバグを修正しました。 -Arraycombinator を持つ集約関数の n 項 variants の引数について、配列サイズの一致を確認する不足していたチェックを追加しました。clickhouse-clientの--pagerにおけるバグを修正しました (著者: ks1322) 。exp10関数の精度を修正しました。- ドキュメントとの整合性を高めるため、
visitParamExtract関数の動作を修正しました。 - 不正な データ型 が指定された場合のクラッシュを修正しました。
- すべてのカラムが定数である場合の
DISTINCTの動作を修正しました。 - 複雑な定数 expression を tuple 要素の index として
tupleElement関数で使用した場合のクエリのフォーマットを修正しました。 range_hasheddictionaries に対するDictionarytables のバグを修正しました。FULLおよびRIGHT JOINの結果に過剰な行が含まれる原因となるバグを修正しました (Amos Bird) 。- config の再読み込み中に
config.ddirectories 内で temporary files を作成および削除すると server がクラッシュする問題を修正しました。 SYSTEM DROP DNS CACHEクエリを修正しました。cache は flush されていましたが、クラスター nodes のアドレスは更新されていませんでした。- view 配下の table に対して
DETACH TABLEを実行した後のMATERIALIZED VIEWの動作を修正しました (Marek Vavruša) 。
ビルドの改善:
- ビルドには
pbuilderツールを使用します。ビルドプロセスはビルドホスト環境からほぼ完全に独立しています。 - 単一のビルドを異なる OS バージョンに使用できるようにしました。パッケージとバイナリは、幅広い Linux システムで動作するよう互換性を向上させました。
clickhouse-testパッケージを追加しました。Functional tests の実行に使用できます。- ソース 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に名称変更されました。 - テーブルを指定せず、FROM の直後に ARRAY JOIN を直接指定する
FROM ARRAY JOIN arr構文は削除されました (Amos Bird) 。 - デモ専用で使われていた
BlockTabSeparatedフォーマットは削除されました。 - 集約関数
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corrの state フォーマットが変更されました。これらの集約関数の state をテーブルに保存している場合 (AggregateFunctionデータ型を使用している場合、または対応する state を持つ materialized view の場合) は、feedback@clickhouse.com までご連絡ください。 - 以前のサーバーバージョンには、文書化されていない機能がありました。集約関数がパラメータに依存する場合でも、AggregateFunction データ型ではパラメータなしで指定できていました。例:
AggregateFunction(quantiles, UInt64)はAggregateFunction(quantiles(0.5, 0.9), UInt64)の代わりとして使えました。この機能は失われました。文書化されていなかったとはいえ、今後のリリースで再びサポートする予定です。 - min/max 集約関数では Enum データ型を使用できません。この機能は次のリリースで再び利用可能になる予定です。
アップグレード時の注意事項:
- クラスターでローリングアップデートを実行する際、古いバージョンの ClickHouse で動作しているレプリカと新しいバージョンで動作しているレプリカが混在する期間は、レプリケーションが一時的に停止し、ログに
unknown parameter 'shard'というメッセージが表示されます。クラスター内のすべてのレプリカの更新が完了すると、レプリケーションは再開されます。 - クラスターのサーバーで異なるバージョンの ClickHouse が動作している場合、次の関数を使用する分散クエリで誤った結果が返される可能性があります:
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corr。クラスター内のすべてのノードを更新してください。