後方互換性を持たない変更
これまで望ましくない挙動があった機能の修正。 Kafka/RabbitMQ/FileLog に対する direct select は許可されなくなりました。これは stream_like_engine_allow_direct_select を設定することで有効にできます。さらに、attached な materialized view が存在する場合は、設定で有効にしていても direct select は許可されません。Kafka と RabbitMQ では、direct select が許可されていても、デフォルトではメッセージはコミットされません。direct select でコミットを有効にするには、ストレージレベルの設定 kafka{rabbitmq}_commit_on_select=1 (デフォルトは 0) を使用する必要があります。 #31053 (Kseniia Sumarokova ).
新しい関数の挙動の軽微な変更。 JSON_VALUE が引用符なしの文字列を返すようになりました。 #27965 をクローズします。 #31008 (Kseniia Sumarokova ).
設定名の変更。 TSV/CSV 入力フォーマットでカスタム NULL 表現をサポートしました。TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow 入力フォーマットでの Nullable(String) のデシリアライズを修正しました。これに伴い、output_format_csv_null_representation と output_format_tsv_null_representation は、それぞれ format_csv_null_representation と format_tsv_null_representation に名前変更されました。 #30497 (Kruglov Pavel ).
すでに使われていないコードのさらなる非推奨化。 これは ClickHouse 20.6 より前のバージョンを使用している場合にのみ関係します。20.6 以降は複数の leader がサポートされているため、ReplicatedMergeTree から「leader election」メカニズムが削除されました。古いバージョンからアップグレードする際に、古いバージョンのレプリカが leader になっている場合、アップグレード後に server は起動に失敗します。新しいバージョンを起動するには、古いバージョンのレプリカを停止してください。その後は 20.6 より前のバージョンへダウングレードできなくなります。 #32140 (tavplubix ).
新機能
clickhouse-keeper に ZooKeeper の Four Letter Words コマンドをさらに実装しました: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands . #28981 (JackyWoo ). これで clickhouse-keeper は機能面でひととおり完成しました。
Bool データ型をサポートしました。 #31072 (kevin wan ).
File、URL、HDFS ストレージおよび INSERT INTO テーブル関数で PARTITION BY をサポートしました。#30273 をクローズしました。#30690 (Kseniia Sumarokova ).
CONSTRAINT ... ASSUME ... を追加しました (INSERT 時のチェックは行いません) 。最適化しやすくするため、CNF へのクエリ変換を追加しました (https://github.com/ClickHouse/ClickHouse/issues/11749 ) 。制約を利用したシンプルなクエリ書き換えを追加しました (現時点では単純なマッチングのみに対応しており、今後は <,=,>… にも対応するよう改善予定です) 。可能な場合に、重いカラムを軽いカラムで置き換える機能を追加しました。#18787 (Nikita Vasilev ).
http/url 関数での Basic 認証によるアクセス。 #31648 (michael1589 ).
WITH FILL 修飾子の STEP 句で INTERVAL 型に対応しました。 #30927 (Anton Popov ).
複数ファイルからの並列読み取りと、FROM INFILE 句でのグロブのサポートを追加しました。#30135 (Filatenkov Artur ) 。
Identifier テーブルおよびデータベース向けのクエリパラメータのサポートを追加しました。#27226 をクローズしました。#28668 (Nikolay Degterinsky ).
TLDR: テキストフォーマットの完全性と一貫性を大幅に改善。 TSV、TSVRaw、CSV、JSONCompactEachRow、JSONCompactStringsEachRow の各フォーマットをリファクタリングし、コードの重複を削除するとともに、-WithNames および -WithNamesAndTypes 接尾辞付きフォーマット向けの基本インターフェイスを追加しました。CSVWithNamesAndTypes、TSVRawWithNames、TSVRawWithNamesAndTypes、JSONCompactEachRowWIthNames、JSONCompactStringsEachRowWIthNames、RowBinaryWithNames の各フォーマットを追加しました。TSVWithNamesAndTypes、TSVRaw(WithNames/WIthNamesAndTypes)、CSVWithNamesAndTypes、JSONCompactEachRow(WithNames/WIthNamesAndTypes)、JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes) の各フォーマットで並列パースをサポートしました。RowBinaryWithNamesAndTypes フォーマットでカラムマッピングと型チェックをサポートしました。<format_name>WIthNamesAndTypes フォーマットに記述された型がテーブル構造と一致するかどうかを確認する設定 input_format_with_types_use_header を追加しました。設定 input_format_csv_empty_as_default を追加し、CSV フォーマットでは input_format_defaults_for_omitted_fields の代わりにこれを使用するようにしました (この設定は csv_empty_as_default を制御すべきではないためです) 。設定 input_format_defaults_for_omitted_fields の使い方を修正しました (以前は csv_empty_as_default としてしか使われていませんでしたが、本来は省略されたフィールドに対するデフォルト式の計算を制御すべきものです) 。TSVRaw フォーマットにおける Nullable の入力/出力を修正し、このフォーマットを TSV への挿入と完全互換にしました。input_format_null_as_default が有効な場合の LowCardinality(Nullable) での NULL の挿入を修正しました (以前は実際の NULL ではなくデフォルト値が挿入されていました) 。JSONStringsEachRow/JSONCompactStringsEachRow フォーマットで文字列のデシリアライゼーションを修正しました (文字列は最初の '\n' または '\t' までしかパースされていませんでした) 。Template 入力フォーマットで Raw エスケープ規則を使用できるようにしました。JSONCompactEachRow(WithNames/WIthNamesAndTypes) 入力フォーマットに診断情報を追加しました。設定 min_chunk_bytes_for_parallel_parsing が単一行のバイト数より小さい場合に -WithNames フォーマットの並列パースで発生していたバグを修正しました。#30178 (Kruglov Pavel )。CustomSeparated 入出力フォーマットでカラム名と型の出力/パースを可能にしました。TSVWithNames/WithNamesAndTypes と同様の CustomSeparatedWithNames/WithNamesAndTypes フォーマットを追加しました。#31434 (Kruglov Pavel )。
Aliyun OSS Storage のサポート。 #31286 (cfcz48 ).
設定ファイルでグローバルスレッドプールのすべての設定を行えるようになりました。#31285 (Tomáš Hromada ) 。
exponentialMovingAverage と比べて、より大きなウィンドウで効果を発揮するウィンドウ関数 exponentialTimeDecayedSum、exponentialTimeDecayedMax、exponentialTimeDecayedCount、exponentialTimeDecayedAvg が導入されました。あわせて、対応するユースケースも拡充されました。#29799 (Vladimir Chebotarev ).
LZ4 を使用して、ファイルに書き込む前にログを圧縮するオプションを追加しました。#23860 をクローズしました。#29219 (Nikolay Degterinsky ) 。
CROSS JOIN と同じ意味を持つ JOIN ON 1 = 1 をサポートしました。これにより #25578 がクローズされます。#25894 (Vladimir C ).
Map 型向けに Map combinator を追加。- Map 化された配列向けの従来の sum-, min-, max- Map を sum-, min-, max- MappedArrays に名称変更。#24539 (Ildus Kurbangaliev ).
HTTP からの読み取りを再試行可能にしました。#29696 をクローズします。#29894 (Kseniia Sumarokova ).
実験的機能
パフォーマンス改善
改善
不具合修正
positional arguments が有効な場合の group by / order by / limit by の別名に関する不具合を修正しました。#31173 をクローズしました。#31741 (Kseniia Sumarokova ).
Map 型での Buffer テーブルエンジンの使用に関する不具合を修正しました。#30546 。#31742 (Anton Popov ).
use_uncompressed_cache が有効になっている MergeTree テーブルの読み取りを修正しました。#31826 (Anton Popov ).
処理すべき内容がない mutation が停止状態のままになる挙動を修正しました (設定 empty_result_for_aggregation_by_empty_set が有効な場合) 。 #32358 (Nikita Mikhaylov ).
protobuf の書き込み時にカラムがスキップされる問題を修正しました。この PR で #31160 を修正し、コメント #31160 #issuecomment-980595318 を参照してください。#31988 (Vitaly Baranov ) 。
サブクエリ内で不要なカラムを削除する際の不具合を修正しました。group by のないクエリに集約関数がある場合は、不要であっても削除しないようにしました。#32289 (dongyifeng ).
Quota の上限には達していないのに、上限超過と判定されていました。この PR で #31174 を修正しました。#31337 (sunny ) 。
partial revoke 使用時の SHOW GRANTS を修正しました。この PR で #31138 を修正しました。#31249 (Vitaly Baranov ) 。
cgroup 制限があるコンテナー内で ClickHouse を実行した際、メモリ使用量が誤って見積もられていました。#31157 (Pavel Medvedev ) 。
デフォルト式のデータ型がカラムのデータ型と異なる場合の ALTER ... MATERIALIZE COLUMN ... クエリを修正しました。#32348 (Anton Popov ) 。
Decimal 引数を持つ集約関数 avgWeighted で、SIGFPE によるクラッシュが発生する問題を修正しました。#32053 を修正。#32303 (tavplubix ).
Dictionary テーブルが同名の XML-dictionary を参照している場合、Cannot attach 1 tables due to cyclic dependencies エラーによりサーバーが起動できないことがありましたが、この問題を修正しました。 #31315 。 #32288 (tavplubix ).
Quoted エスケープ規則で、Nullable(Float) の NaN のデシリアライズ時に発生するパースエラーを修正しました。 #32190 (Kruglov Pavel ).
XML辞書: table の CREATE クエリで使用される識別子を、新しいバージョンへのアップグレード時に default_database で修飾できるようになりました。#31963 をクローズしました。#32187 (Maksim Kita ).
一部のレプリカで設定 replicated_can_become_leader が無効になっている場合、クォーラム付きでinsertする際にアクティブなレプリカ数が誤って判定される可能性がありました。これは修正されました。 #32157 (tavplubix ).
Dictionaries: カスタムデータベースクエリで {condition} が機能しないケースを修正しました。#32117 (Maksim Kita ) 。
cast_keep_nullable を使用した、Nullable からの CAST を修正しました (以前は、たとえば toUInt32OrDefault(toNullable(toUInt32(1))) で PARAMETER_OUT_OF_BOUND エラーが発生していました) 。#32080 (Azat Khuzhin ) 。
一部のまれなケースにおける Join Storage の CREATE TABLE を修正しました。#31680 をクローズしました。#32066 (SuperDJY ).
パートのデタッチ時に発生する Directory ... already exists and is not empty エラーを修正しました。#32063 (tavplubix ).
MaterializedMySQL (実験的機能) : MySQL の DECIMAL データの誤解釈を修正しました。#31990 (Håvard Kvålen ) 。
FileLog (実験的機能) engine で、table の作成に失敗した際に不要なメタデータ directory が作成される問題を修正しました。修正 #31962 。 #31967 (flynn ).
一部のGET_PARTエントリは、すべてのレプリカでパーツが失われ、同じパーティション内に他のパーツが存在しない場合、レプリケーションキュー内でハングすることがありました。この問題は、パーティションキーに整数型のカラムまたはDate[Time]のみが含まれる場合に修正されています。#31485 。#31887 (tavplubix )。
UUID 型の引数を持つ empty 関数と notEmpty 関数を修正しました。#31819 を修正。 #31883 (Anton Popov ).
KeeperTCPHandler の構築時に、設定パスを keeper_server.session_timeout_ms から keeper_server.coordination_settings.session_timeout_ms へ変更しました。operation_timeout も同様です。#31859 (JackyWoo ).
Nullable の主キーが使用されている場合に発生する、Nullable 型への無効な CAST を修正しました。 (Nullable の主キーは非推奨の機能です。使用しないでください) 。これにより #31075 を修正しました。 #31823 (Amos Bird ).
SQL の再帰 UDF で発生するクラッシュを修正。 #30856 をクローズ。 #31820 (Maksim Kita ) 。
型指定付きの関数 dictGet を Dictionary の属性に使用した際、その型が Nullable の場合に発生していたクラッシュを修正しました。#30980 。#31800 (Maksim Kita ) 。
ODBC クエリの結果が空の場合にクラッシュする問題を修正しました (一部の ODBC ドライバで発生) 。#31465 をクローズしました。#31766 (Kseniia Sumarokova ).
クエリプロファイラの無効化に関する不具合を修正 (query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0 の場合、クエリの終了後もクエリプロファイラが有効のままになることがありました) 。#31740 (Azat Khuzhin ).
同時に実行されるATTACH PARTITIONクエリで、まれに発生していたセグメンテーション違反を修正しました。#31738 (tavplubix ) 。
出力内でデータと進捗情報付きの行が混在する場合に発生する、JSONEachRowWithProgress 出力フォーマットの競合状態を修正しました。#31736 (Kruglov Pavel ) 。
指定したクラスター名が Replicated データベースの名前である場合に、ON CLUSTER クエリの実行時に発生する there are no such cluster here エラーを修正しました。#31723 (tavplubix ).
Nullable カラムに対する decrypt 関数の一部の適用時に発生していた例外を修正しました。これにより #31662 をクローズします。これにより #31426 をクローズします。#31707 (alexey-milovidov ).
文字列にUTF-8文字が含まれている場合の ngrams 関数を修正しました。 #31706 (yandd ).
設定 input_format_allow_errors_num と input_format_allow_errors_ratio は、IPv4 などの domain types のパースでは機能していませんでしたが、修正されました。#31686 を修正。#31697 (tavplubix ).
MATERIALIZE COLUMN で発生するヌルポインタ例外を修正しました。#31679 (Nikolai Kochetov ) 。
RENAME TABLE クエリは、Ordinary データベース内の DDL Dictionary の名前を変更しようとした際に正しく動作していませんでしたが、修正されました。#31638 (tavplubix ).
sparkbar 集約関数を、意図どおりに実装しました。参照: #26175 #issuecomment-960353867, コメント 。 #31624 (小路 ).
無効な UTF-8 シーケンスを含むのがカラム名だけの場合に、不正な JSON が生成される問題を修正しました。#31534 (Kevin Michel ).
この最適化のバグが修正されるまで、partial_merge_join_left_table_buffer_bytes を無効にしてください。詳細は #31009 ) を参照してください。不要なオプション partial_merge_join_optimizations を削除しました。#31528 (Vladimir C ).
短い INSERT SELECT クエリでの進捗表示を修正しました。#31510 (Azat Khuzhin ) 。
GROUP BY と位置引数に関する誤動作を修正しました。#31280 #issuecomment-968696186 をクローズしました。#31420 (Kseniia Sumarokova ).
S3 用の STS 認証情報プロバイダーにおける nullptr を修正しました。#31409 (Vladimir Chebotarev ) 。
誤りだったため、索引解析から notLike 関数を除外しました。 #31169 (sundyli ).
一部の協調ログが失われており、かつ最新のログより新しいスナップショットが存在する場合に起動できなくなることがあるKeeperのバグを修正しました。#31150 (alesapin ).
ローカルJOINにおいて右側の分散テーブルを書き換えるようにしました。#25809 を解決しました。#31105 (abel-cheng ).
別名およびWHERE句を含む Merge テーブルを修正しました (以前はまったく動作していませんでした) 。 #28802 をクローズしました。 #31044 (Kseniia Sumarokova ).
引用符付き識別子における JSON_VALUE/JSON_QUERY を修正しました。これにより、json path にスペースを含められるようになりました。#30971 をクローズしました。#31003 (Kseniia Sumarokova ).
行指向ではないフォーマットで formatRow 関数を使用すると、セグメンテーションフォルトが発生していました。そのため、このようなフォーマットではこの関数を使用できないようにしました (意味がないためです) 。#31001 (Kruglov Pavel ) 。
materialized view を drop した後の select クエリが壊れる不具合を修正しました。この問題は #30691 で報告されました。#30997 (Kseniia Sumarokova ).
ATTACH PARTITION … FROM および MOVE PARTITION … の場合、max_partition_size_to_drop チェックをスキップする。#30995 (Amr Alaa ).
INTERSECT および EXCEPT 演算子に関するいくつかのコーナーケースを修正しました。#30803 をクローズしました。#30965 (Kseniia Sumarokova ).
ビルド/テスト/パッケージングの改善
後方互換性を持たない変更
SQL/JSON 関数における json_path 引数と json 引数の順序を変更しました (標準に合わせるため) 。これにより #30449 をクローズします。#30474 (Kseniia Sumarokova ).
MergeTree テーブル設定 write_final_mark を削除しました。今後は常に true になります。#30455 (Kseniia Sumarokova ). 対応は不要で、すべてのテーブルは新しいバージョンとの互換性があります。
関数 bayesAB は削除されました。更新したうえでこの関数を復活させるため、ご協力をお願いします。これにより #26233 をクローズします。#29934 (alexey-milovidov ).
これは、実験的な clickhouse-keeper サポートをすでに使い始めている場合にのみ関係します。ClickHouse Keeper のスナップショットは、独自の ClickHouse LZ4 block 圧縮ではなく、デフォルトで ZSTD codec によって圧縮されるようになりました。この動作は、協調設定 compress_snapshots_with_zstd_format で無効にできます (すべてのクォーラム レプリカで同じ値である必要があります) 。後方互換性の問題はかなりまれで、新しいノードが古いノードにスナップショットを送信した場合にのみ発生する可能性があります (復旧時に発生します) 。古いノードは ZSTD フォーマットのスナップショットを読み取れません。#29417 (alesapin ).
新機能
新しい非同期 INSERT モードでは、挿入されたデータを蓄積し、バックグラウンドで 1 つのバッチとして保存できます。クライアント側では、クエリ内にデータが埋め込まれた INSERT クエリや、別のバッファ内のデータを使用する INSERT クエリ (たとえば HTTP protocol 経由の INSERT クエリ) で async_insert を設定することで有効にできます。wait_for_async_insert が true の場合 (デフォルト) 、クライアントはデータがテーブルに flush されるまで待機します。サーバー側では、設定 async_insert_threads、async_insert_max_data_size、async_insert_busy_timeout_ms によって制御されます。#18282 を実装しました。#27537 (Anton Popov ). #20557 (Ivan ). パフォーマンスに関する注記: 非同期挿入では、1 秒あたり最大約 10,000 件の個別の INSERT クエリを実行できます。そのため、1 秒あたり数百万行の挿入性能を実現したい場合は、引き続きバッチで挿入することを推奨します。
clickhouse-local に対話型モードを追加しました。これにより、clickhouse-local を実行するだけで、サーバーに接続せずに ClickHouse のコマンドラインインターフェイスを利用し、ファイルや外部データソースのデータを処理できます。あわせて、clickhouse-client と clickhouse-local のコードを統合しました。#7203 をクローズ。#25516 をクローズ。#22401 をクローズ。#26231 (Kseniia Sumarokova ).
実行可能 (スクリプト化可能) なユーザー定義関数のサポートが追加されました。これらは、任意のプログラミング言語で記述できるUDFです。#28803 (Maksim Kita ).
外部データソースへの定義済み接続を許可しました。これにより、外部データソースの利用時に認証情報やアドレスを指定する必要がなくなり、代わりに名前で参照できるようになります。#28367 をクローズしました。#28577 (Kseniia Sumarokova ).
system データベース内の対応するテーブルに対応する SCHEMATA、TABLES、VIEWS、COLUMNS ビューを持つ INFORMATION_SCHEMA データベースを追加しました。#9770 をクローズしました。#28691 (tavplubix ).
EXISTS (サブクエリ) をサポートしました。#6852 をクローズしました。#29731 (Kseniia Sumarokova ).
監査向けのセッションロギング。成功したものと失敗したものを含む、すべてのログイン・ログアウトイベントを新しい system.session_log テーブルに記録します。#22415 (Vasily Nemkov ) (Vitaly Baranov ).
多次元のコサイン距離関数およびユークリッド距離関数、L1、L2、Lp、Linf 距離とノルムをサポート。Tuple に対するスカラー積と、Tuple に対するさまざまな算術演算子にも対応。これにより、#4509 が完全に解決され、さらにそれ以上の改善も含まれています。#27933 (Alexey Boykov ) 。
INTO OUTFILE および FROM INFILE での圧縮・解凍のサポートを追加しました (自動検出、または追加のオプションパラメータを使用) 。#27135 (Filatenkov Artur ).
HTTP OPTIONS リクエストによる CORS (Cross Origin Resource Sharing) のサポートを追加。これにより、Grafana は小細工なしでサーバーレスリクエストで動作するようになりました。#18693 をクローズ。#29155 (Filatenkov Artur )。
JOIN ON を含むクエリで、論理和 (OR) がサポートされるようになりました。#21320 (Ilya Golshtein ) 。
関数 tokens を追加しました。これにより、英数字以外の ASCII 文字を区切り文字として使って、文字列をトークンに分割できるようになりました。#29981 (Maksim Kita )。テキストから N-gram を抽出する関数 ngrams を追加しました。#29699 をクローズしました。#29738 (Maksim Kita ).
Unicode正規化関数 normalizeUTF8NFC、normalizeUTF8NFD、normalizeUTF8NFKC、normalizeUTF8NFKD を追加しました。#28633 (darkkeks ).
FileLog table engine を使用した、ClickHouse におけるアプリケーションのログファイルのストリーミング消費。Kafka や RabbitMQ engine に似ていますが、ローカルファイルシステム上の追記専用ログやローテーションされるログを対象としています。#6953 をクローズ。#25969 (flynn ) (Kseniia Sumarokova ).
CapnProto 出力フォーマットを追加し、CapnProto 入力フォーマットをリファクタリングしました。 #29291 (Kruglov Pavel ).
クエリ内で数値を2進数リテラルとして記述できるようになりました。例: SELECT 0b001;。#29304 (Maksim Kita ).
hashed_array Dictionary 型を追加しました。複数の属性を持つ Dictionary で使用した場合のメモリ使用量を削減します。#30236 をクローズしました。#30242 (Maksim Kita ).
JSONExtractKeys 関数が追加されました。#30056 (Vitaly ) 。
関数 getOSKernelVersion を追加しました。OS カーネルのバージョンを含む文字列を返します。#29755 (Memo ) 。
MD4 および SHA384 関数を追加しました。MD4 は廃止された安全でないハッシュ関数であり、すでに一部のレガシーシステムで MD4 が使用されていて、まったく同じ結果を得る必要があるまれな場合にのみ使用できます。#29602 (Nikita Tikhomirov ).
設定ファイルで hsts_max_age に正の値を設定すると、ClickHouse HTTPサーバーで HSTS を有効にできます。#29516 (凌涛 ) 。
Huawei OBS Storage のサポートを追加しました。 #24294 をクローズしました。 #29511 (kevin wan ).
キーが単純な正規表現に一致する要素を含むかどうかを調べる新しい関数 mapContainsKeyLike。#29471 (凌涛 ). 指定したパターンに一致する要素だけを保持した map を取得する新しい関数 mapExtractKeyLike。#30793 (凌涛 ).
ALTER TABLE x MODIFY COMMENT に対応しました。#29264 (Vasily Nemkov ) 。
ClickHouse にはないものの H3 API では利用できる、H3 の情報取得関数を追加しました: https://h3geo.org/docs/api/inspection . #29209 (Bharat Nallan ).
Replicated データベースで、非レプリケートの ALTER TABLE FETCH および ATTACH を許可。 #29202 (Kevin Michel ).
設定 output_format_csv_null_representation を追加しました。output_format_tsv_null_representation と同様の設定ですが、CSV 出力向けです。#29123 (PHO ).
現在のZooKeeperセッションのuptimeを秒単位で返す関数 zookeeperSessionUptime() を追加しました。#28983 (tavplubix ).
h3ToGeoBoundary 関数を実装。#28952 (Ivan Veselov ) 。
ウィンドウ関数として使用できる集約関数 exponentialMovingAverage を追加しました。これにより #27511 が解決されます。#28914 (alexey-milovidov )。
テーブルのカラムのサブカラムをDESCRIBEクエリの結果に含められるようになりました (describe_include_subcolumns設定で有効化できます) 。 #28905 (Anton Popov ).
Executable, ExecutablePool にオプション send_chunk_header が追加されました。このオプションが true の場合、chunk の前に、改行付きの chunk の行数 rows_count がクライアントに送信されます。#28833 (Maksim Kita ).
tokenbf_v1 と ngram は、FixedSring 型の String をキーに持つ Map をサポートします。これにより、map キーの filter を使うクエリで、データの skipping 性能が向上します。sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by id 上記のテーブルでは、クエリ select * from map_tokebf where map['K']='V' により、キー A を含まない granule がスキップされます。もちろん、スキップされる行数は、設定した granularity と index_granularity に依存します。#28511 (凌涛 ).
サーバーからクライアントに profile events を送信できるようになりました。新しいパケットタイプ ProfileEvents を導入しました。#26177 を解決しました。#28364 (Dmitry Novik ).
FixedString および String データ型のビットシフト演算。これにより #27763 が解決されます。#28325 (小路 ).
データベースエンジン MaterializedPostgreSQL で、PostgreSQL からのレプリケーション対象テーブルの動的な追加 / 削除をサポートしました。データベース設定に対する ALTER をサポートしました。#27573 をクローズしました。#28301 (Kseniia Sumarokova ).
関数 accurateCastOrDefault(x, T) を追加しました。#21330 を修正しました。著者は @taiyang-li です。 #23028 (Maksim Kita )。
関数 toUUIDOrDefault、toUInt8/16/32/64/256OrDefault、toInt8/16/32/64/128/256OrDefault を追加しました。これにより、文字列のパースに失敗した場合に、ユーザーがデフォルト値 (NULL 以外) を指定できるようになりました。#21330 (taiyang-li ) 。
パフォーマンス改善
バックグラウンドマージは相互にプリエンプト可能になり、適切な優先度でスケジュールされるようになりました。これにより、長時間実行されるマージが短時間のマージの進行を妨げることがなくなります。これは、マージ実行のスケジューリングと制御を改善するために必要です。これにより、「パーツが多すぎる」error が発生する可能性が低くなります。#22381 。#25165 (Nikita Mikhaylov ) 。background pool 内のスレッド数を超える数の merge と mutation を実行できるようになりました。merge と mutation はサイズに応じて段階的に実行されます (小さいものほど優先度が高くなります) 。実行する task 数とスレッド数の比率は、設定 background_merges_mutations_concurrency_ratio で制御され、デフォルト値は 2 です。#29140 (Nikita Mikhaylov ) 。
リモートファイルシステムで非同期読み取りを利用できるようにしました。リモートファイルシステムから読み取る際のシーク回数も減らします。これによりパフォーマンスが大幅に向上し、特定の条件下では実験的な web および s3 ディスクが EBS より高速に動作するようになります。#29205 (Kseniia Sumarokova )。あわせて、web ディスクタイプ (ウェブサーバーでホストされる静的データセット) は実験段階を脱し、本番利用可能となりました。
clickhouse-client で INTO OUTFILE を使用するクエリで、複数スレッドが使われるようになりました。INTO OUTFILE 使用時に進捗バーがちらつく問題を修正しました。これにより #30873 をクローズします。これにより #30872 をクローズします。#30886 (alexey-milovidov ).
一部の SELECT クエリで、ディスクから読み取る冗長な圧縮データ量を削減 (MergeTree エンジンファミリーのみ) 。 #30111 (alesapin ).
MergeTree テーブルエンジンファミリーで圧縮ブロックを読み取る際の冗長な seek 呼び出しをいくつか削減しました。#29766 (alesapin ) 。
url テーブル関数で複数の URL を並列に処理できるようにしました。これにより #29670 と #29671 をクローズしました。#29673 (alexey-milovidov ).
設定 optimize_aggregation_in_order が有効な場合、主キー順での集約のパフォーマンスを向上。 #30266 (Anton Popov ).
現在、ClickHouse は外部 S3 との通信時に DNS cache を使用するようになりました。#29999 (alesapin ) 。
外部データベース (MySQL など) に対する IS NULL/IS NOT NULL のプッシュダウンをサポートしました。#29463 (Azat Khuzhin )。isNull/isNotNull を IS NULL/IS NOT NULL に変換するようにしました (外部データベース、たとえば MySQL 向け) 。#29446 (Azat Khuzhin )。
Dictionary テーブルに対するSELECTクエリで複数スレッドが使用されるようになりました。 #30500 (Maksim Kita ) 。
Decimal カラムに対するフィルタリング (WHERE 操作) のパフォーマンスを改善しました。#30431 (Jun Jin ) 。
popcnt/ctz を用いた、より高性能な実装に置き換えることで、filter 処理内の分岐の多いコードを削除しました。#29881 (Jun Jin ) 。
SSE/AVX2/AVX512 命令をまとめて利用し、filter のバイトマスク生成関数 (WHERE 演算子で使用) を改善しました。なお、デフォルトでは ClickHouse は SSE のみを使用するため、これはカスタムビルドでのみ relevant です。#30014 (jasperzhu ). #30670 (jasperzhu ).
Nullableな浮動小数点数に対するSUM集約関数のパフォーマンスを改善しました。#28906 (Raúl Marín ) 。
複数のdiskを使用している場合のpartのloading処理を高速化しました。考え方は https://github.com/ClickHouse/ClickHouse/pull/16423 と似ています。本番環境では、24分 → 16分に改善しました。#28363 (Amos Bird ).
メモリ使用量を削減するため、S3 multipart upload の part サイズのデフォルト設定を縮小。 #28679 (ianton-ru ).
bitmapAnd 関数を高速化しました。#28332 (dddounaiking ) 。
StorageMergeTree で、マージがまだ進行中のときに表示される不要な mutation 通知を削除しました。#27552 (Vladimir Chebotarev ).
文字列比較のパフォーマンス改善を試行。 #28767 (alexey-milovidov ).
主キー索引とパーティションフィルターが Tuple でも機能するようになりました。 #29281 (凌涛 ).
クエリに、引数は同じで level パラメータだけが異なる複数の quantile 集計関数がある場合、設定 optimize_syntax_fuse_functions が有効であれば、それらは 1 つにまとめられ、1 回のパスで実行されます。#26657 (hexiaoting ) 。
主キーの最初の式に対する min-max 集約が、プロジェクションによって最適化されるようになりました。これは #329 に対応するものです。#29918 (Amos Bird ) 。
実験的機能
ClickHouse Keeper のノード設定 (.xml ファイル) を変更できるようになりました。#30372 (alesapin ).
sparkbar 集約関数を追加しました。これにより #26175 を解決します。#27481 (小路 ). 注: この関数には 1 つ問題があり、動作は今後のリリースで変更される予定です。
改善
ビルド/テスト/パッケージングの改善
バグ修正
positionCaseInsensitiveUTF8 や countSubstringsCaseInsensitiveUTF8 などの UTF-8 文字列に対する大文字・小文字を区別しない検索関数で、実際には一致しない部分文字列がごくまれに見つかってしまうことがありましたが、修正されました。#30663 (tavplubix ).
暗号化されたディスク上の空ファイルの読み取りに関する問題を修正しました。#30494 (Vitaly Baranov ) 。
設定 legacy_column_name_of_tuple_literal = 0 の分散クエリにおいて、選言チェーンを IN に変換する処理 (設定 optimize_min_equality_disjunction_chain_length で制御) の不具合を修正しました。 #28658 (Anton Popov ).
insert_allow_materialized_columns=0 の場合でも、分散テーブルのシャーディングキーとしてマテリアライズドカラムを使用できるようにしました。 #28637 (Vitaly Baranov ).
TO と FROM が設定されていて、結果セットに行がない場合の ORDER BY ... WITH FILL の不具合を修正しました。#30888 (Anton Popov ) 。
オペランドが3つ以上ある場合に、AND/OR 式で set 索引が使用されない問題を修正しました。この修正により #30416 を解消しました。 #30887 (Amos Bird ).
ハッシュ関数を含むプロジェクションの実体化時に発生するクラッシュを修正しました。これにより #30861 が修正されます。この問題は https://github.com/ClickHouse/ClickHouse/pull/28560 と似ており、ヘッダーが空であるという不変条件の理解が不十分であったことに起因します。#30877 (Amos Bird ).
ReplicatedMergeTree で、ZooKeeper パスから補助 ZooKeeper 名を抽出する際の曖昧さを解消しました。従来は、ZooKeeper パスにコロンが含まれていると、Unknown auxiliary ZooKeeper name によりサーバーが起動できないことがありました。#29052 を修正しています。また、先頭がスラッシュではない ZooKeeper パスを指定することもこれまでは許可されていましたが、現在は非推奨であり、そのようなパスを持つ新しいテーブルは作成できません。さらに、補助 ZooKeeper 名にスラッシュやコロンを含めることもできません。#30822 (tavplubix ).
何らかの理由で localBackup に失敗した場合、一時ディレクトリをクリーンアップする。 #30797 (ianton-ru ).
REPLACE/MOVE PARTITION と、非レプリケートの MergeTree におけるバックグラウンドマージの間で発生していた競合状態を修正しました。この問題により、移動または置換されたデータの一部がパーティション内に残ってしまう可能性がありました。#29327 を修正しました。#30717 (tavplubix ).
PREWHERE が常に true になる場合の、WHERE を伴う PREWHERE の不具合を修正しました。#30668 (Azat Khuzhin ) 。
Limit のプッシュダウン最適化により、Cannot find column エラーが発生することがありました。これを修正しました。#30438 。#30562 (Nikolai Kochetov ) 。
isNotNull/isNull から IS [NOT] NULL への書き換えで、不足していた括弧を追加しました (isNotNull(1)+isNotNull(2) のような式を含むクエリを修正) 。 #30520 (Azat Khuzhin ).
同一テーブルへのスカラーサブクエリを伴うALTERで発生するデッドロックを修正し、#30461 をクローズしました。#30492 (Vladimir C ).
REPLACE PARTITION の実行中にセッションの有効期限が切れた場合に発生する可能性があったセグメンテーションフォルトを修正しました。#30432 (tavplubix ) 。
IN (subquery) のような条件を含むクエリは、集約プロジェクションが適用されている場合、誤った結果を返すことがありました。プロジェクション向けのセット生成を修正しました。 #30310 (Amos Bird ).
projection が有効な場合の JOIN クエリでのカラムエイリアスの名前解決を修正しました。これにより #30146 を修正しました。#30293 (Amos Bird ) 。
replaceRegexpAll 関数のいくつかの不具合を修正しました。#30292 (Memo ) 。
ComplexKeyHashedDictionary、ComplexKeySparseHashedDictionary のレイアウト設定における preallocate オプションのパースに関する不具合を修正しました。#30246 (Maksim Kita ) 。
[I]LIKE 関数を修正し、#28661 をクローズしました。#30244 (Nikolay Degterinsky ) 。
multiIf での shortcircuit と lowcardinality に起因するクラッシュを修正しました。#30243 (Raúl Marín ) 。
FlatDictionary、HashedDictionary で、Nullable 属性の bytes_allocated の計算を修正しました。 #30238 (Maksim Kita ).
複数のJOIN句で、数字で始まる識別子を許可しました。 #30230 (Vladimir C ) 。
max_read_buffer_size = 0 の場合の MergeTree からの読み取りを修正 (ユーザーが自分で墓穴を掘りたい場合) (例外 Can't adjust last granule、LOGICAL_ERROR、あるいはデータ損失につながる可能性があります) 。#30192 (Azat Khuzhin ) 。
min_bytes_to_use_direct_io 使用時の pread_fake_async/pread_threadpool の不具合を修正しました。#30191 (Azat Khuzhin ) 。
Nullable カラムに基づいて MATERIALIZED カラムが INSERT SELECT で誤って補完される不具合を修正しました。#30189 (Azat Khuzhin ).
関数 initializeAggregation で Nullable 型の引数をサポートしました。 #30177 (Anton Popov ).
GLOBAL IN と WITH TOTALS を含むクエリで発生する Port is already connected エラーを修正しました。21.9 と 21.10 のみ。#30086 (Nikolai Kochetov ).
MergeTree における MOVE PARTITION とマージ/ミューテーション間の競合を修正しました。#30074 (Azat Khuzhin ) 。
削除した Memory データベースがserverの再起動後に再び現れることがありましたが、修正されました (#29795 ) 。また、Ordinary データベースの削除時に Directory not empty エラーが発生する場合の回避策として、force_remove_data_recursively_on_drop 設定が追加されました (Cloud 環境では残ったデータを手動で削除できないためです) 。#30054 (tavplubix ) 。
tuple() によるサンプルのクラッシュを修正し、#30004 をクローズしました。#30016 (flynn ).
issue のクローズを試みる: #29965 。 #29976 (hexiaoting ).
FileChecker と StorageLog/StorageStripeLog の間で発生する可能性があるデータ競合を修正しました。#29959 (Azat Khuzhin ).
StorageLog における LogSink::writeMarks() と LogSource の間のデータ競合を修正しました。#29946 (Azat Khuzhin ) 。
https://github.com/ClickHouse/ClickHouse/pull/19544 で導入された MergeTree テーブルの同時実行クエリ制限における、潜在的なリソースリークの問題を修正しました。 #29879 (Amos Bird ).
システムテーブル再作成チェックを修正 (enum値の変更を検出できない問題) 。 #29857 (Azat Khuzhin ).
MaterializedMySQL: MySQL への接続が失われた際に、トランザクションの一部しか処理されないことがある問題を修正しました。#29837 (Håvard Kvålen ).
おそらくカーネルのバグが原因で、ごくまれに発生する可能性がある Timeout exceeded: elapsed 18446744073.709553 seconds error を回避します。#29154 を修正しました。#29811 (tavplubix ).
ATTACH TABLE ... FROM 'path'クエリで、path の代わりに文字列以外のリテラルを使用した場合に発生する不正な型変換を修正しました。これにより、未初期化メモリを読み取る可能性がありました。#29790 (alexey-milovidov ).
GROUP BY 時の LowCardinality への同時アクセスを修正しました (Buffer テーブルと組み合わせると問題が発生する可能性があります) 。 #29782 (Azat Khuzhin ).
分片で <= 21.3 と >= 21.4 のバージョンが混在し、GROUP BY キーがすべて固定長の複数のカラムで構成され、かつ二段階集約が有効化されている場合 (group_by_two_level_threshold および group_by_two_level_threshold_bytes を参照) に、分散クエリで GROUP BY の結果が不正になり (結果に同じキーを持つ複数の行が含まれる) 、問題を修正しました。#29580 。#29735 (Nikolai Kochetov ) 。
サーバーの再起動時に、設定 materialized_postgresql_tables_list が正しく動作しない不具合を修正しました。#28529 で報告されています。#29686 (Kseniia Sumarokova ).
filter predicate 内の条件が、push-down 最適化後に失われることがありました。#29625 (Nikolai Kochetov ) 。
別名を含む JIT 式コンパイルおよび短絡式評価の問題を修正しました。#29403 をクローズしました。#29574 (Maksim Kita ).
DEFAULT 式で x.y.z... のような不正なテーブル識別子を使用した際に、ALTER MODIFY クエリでまれに発生するセグメンテーション違反を修正しました。#29184 。#29573 (alesapin ).
GROUP BY WITH TOTALS HAVING におけるヌルポインタ逆参照を修正 (HAVING のカラムが選択されていない場合) 。#29553 (Azat Khuzhin ) 。
Joinテーブルエンジンのテーブルに対して読み取りと書き込みを同時に行う際のデッドロックを回避します。 #29544 (Raúl Marín ).
std::mismatch の使い方に問題があったため、チェック pathStartsWith のバグを修正しました: The behavior is undefined if the second range is shorter than the first range.。 #29531 (Kseniia Sumarokova ).
ODBC bridge において、error Invalid cursor state に対する再試行を追加しました。これは再試行可能なエラーです。#29473 を修正しました。#29518 (Kseniia Sumarokova ).
Lazyデータベースのロード時に、テーブル名のパースが誤っていた問題を修正しました。#29456 を修正。#29476 (tavplubix )。
プッシュダウンされたHAVING述語を持つサブクエリで発生する可能性のあるBlock structure mismatchを修正しました。#29010 を修正。#29475 (Nikolai Kochetov ) 。
greatest/least 関数で発生する論理エラー Cannot capture columns を修正しました。#29334 をクローズしました。#29454 (Kruglov Pavel ).
RocksDBテーブルエンジン: 複数のDBを開く際に発生するレースコンディションを修正 (CIでこの問題を再現する一部のテストも復活) 。#29393 (Azat Khuzhin ) 。
設定に不備がある場合に、Replicated アクセスストレージが正常にシャットダウンしない問題を修正しました。 #29388 (Kevin Michel ).
メモリ安全ではないため、ウィンドウ関数 nth_value を削除しました。これにより #29347 をクローズしました。#29348 (alexey-milovidov ) 。
projection part の vertical merge を修正しました。これにより #29253 の問題も修正されます。さらに、この PR では https://github.com/ClickHouse/ClickHouse/pull/25165 で導入された projection の merge/mutation に関する複数の問題も修正しています。#29337 (Amos Bird ).
新しいレプリカの追加時に、ReplicatedデータベースでDDLクエリがハングする問題を修正しました。#29328 (Kevin Michel ) 。
接続タイムアウト (send_timeout/receive_timeout) の問題を修正しました。 #29282 (Azat Khuzhin ).
テーブルのカラムのいずれかに、大文字と小文字を区別しない関数を含むデフォルト式がある場合、ReplicatedMergeTree の新しいレプリカの再作成または作成時に発生する可能性がある Table columns structure in ZooKeeper is different from local table structure 例外を修正しました。#29266 (Anton Popov ).
Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF) ではなく、通常の Database doesn't exist error (UNKNOWN_DATABASE) をクライアントに (TCP 経由で) 返すようにしました。#29229 (Azat Khuzhin ).
Avro入力フォーマットで、LowCardinality(Nullable) 型のカラムへの挿入時に発生する segfault を修正しました。 #29132 (Kruglov Pavel ).
inter-server secret の場合に、以前の認証情報が再利用されないようにした (そのクラスターで interserver secret が設定されていると、Buffer/Kafka 経由で分散テーブルに INSERT する前に、その接続で以前設定されたユーザーが再利用されることがあった) 。#29060 (Azat Khuzhin ).
Dictionary との join 時に any_join_distinct_right_table_keys を処理するようにし、#29007 をクローズしました。 #29014 (Vladimir C ).
エイリアスカラムで JOIN した際に発生する "block 内にカラム … が見つかりません" エラーを修正しました。#26980 をクローズしました。#29008 (Vladimir C ).
GLOBAL IN サブクエリで使用されるスレッド数を修正しました (#19414 のバグ修正以降、単一スレッドで実行されていました) 。 #28997 (Nikolai Kochetov ).
ORDER BY に WITH FILL が含まれている場合に発生する不適切な最適化を修正しました。これにより #28908 をクローズしました。これにより #26049 をクローズしました。#28910 (alexey-milovidov )。
定数を使用した場合の高階配列関数 (arrayCompact の SIGSEGV、arrayDifference/arrayCumSumNonNegative の ILLEGAL_COLUMN) を修正しました。#28904 (Azat Khuzhin ).
mutations_sync=2 における mutation の待機処理を修正しました。#28889 (Azat Khuzhin ) 。
複数のカラムを含む IN 句 (つまり (k,v) IN ((1, 2))) を使用した、外部データベース (つまり MySQL) に対するクエリの不具合を修正しました。 #28888 (Azat Khuzhin ).
短絡関数の評価における LowCardinality のバグを修正しました。#28884 をクローズしました。#28887 (Kruglov Pavel ).
compact パーツからのサブカラム読み取りを修正しました。 #28873 (Anton Popov ).
まれにレプリカ間で差異が生じる可能性のある、DROP PART と REPLACE/MOVE PARTITION の間の競合状態を修正しました。#28864 (tavplubix ) 。
短絡評価時の式のコンパイルを修正しました。 #28821 (Azat Khuzhin ).
ごくまれに、すべてのレプリカをハードリブートした後、ReplicatedMergeTree のレプリカ間で不整合が発生することがある問題を修正しました。エラーは Part ... intersects (previous|next) part ... のように表示されます。#28817 (alesapin ).
接続の使用可否をより適切に確認し、念のため RabbitMQ のシャットダウン時に発生しうるあらゆる例外も捕捉するようにしました。#28797 (Kseniia Sumarokova ).
ReplicatedMergeTreeQueue における軽微な競合状態を修正しました。ユーザーには見えないはずですが、微妙なバグを引き起こす可能性があります。 #28734 (alesapin ).
例外発生時に、部分的に作成された集約プロジェクションがある SELECT でクラッシュする可能性がある問題を修正しました。#28700 (Amos Bird ) 。
渡されたパラメーターが不正な場合に、分散テーブルの作成時に発生する coredump を修正しました。 #28686 (Zhiyong Wang ) 。
system.processes テーブルに、Settings.Names と Settings.Values の別名を追加しました。#28685 (Vitaly ) 。
S2 Geometry ライブラリのサポート: s2RectAdd 関数と s2RectContains 関数で必要な引数の個数を修正しました。#28663 (Bharat Nallan ).
Nullable または LowCardinality の主キー使用時に発生する、無効な定数型変換を修正しました。 #28636 (Amos Bird ).
PREWHERE における「カラムが集約関数内になく、GROUP BY にも含まれていない」を修正しました (修正: #28461 ) 。#28502 (Azat Khuzhin ) 。
後方互換性を持たない変更
現在、以下の MergeTree テーブルレベル設定 replicated_max_parallel_sends、replicated_max_parallel_sends_for_table、replicated_max_parallel_fetches、replicated_max_parallel_fetches_for_table は何の効果もありません。これらは以前から適切に機能しておらず、max_replicated_fetches_network_bandwidth、max_replicated_sends_network_bandwidth、background_fetches_pool_size に置き換えられました。 #28404 (alesapin ).
新機能
実験的機能
静的ファイルの形式で Web サーバー上に読み取り専用tableを保存するための、web 型のdisk。#23982 を参照してください。#25251 (Kseniia Sumarokova )。これは主に、共有ストレージ上での操作のテストを容易にし、データセットを簡単に取り込めるようにするために必要です。21.11 のreleaseまでは使用を推奨しません。
新しいコマンド BACKUP と RESTORE を追加しました。#21945 (Vitaly Baranov )。これは現在も開発中であり、現行バージョンでの使用は想定されていません。
パフォーマンス改善
sumIf および countIf 集約関数を高速化しました。#28272 (Raúl Marín ).
minmax 索引用の仮想 PROJECTION を作成します。これにより、allow_experimental_projection_optimization が有効な場合、可能なケースではクエリはデータを読み取る代わりに minmax 索引を使用します。#26286 (Amos Bird ).
sequenceMatch と sequenceCount に 2 つのチェックを導入し、シーケンスの pattern の決定論的な部分がイベント一覧に存在しない場合に早期終了できるようにしました。この変更により、以前は操作上限に達して失敗していた多くのクエリが実行可能になり、全体として pipeline も高速化されます。#27729 (Jakub Kuklis ).
binary 関数、特に 0 以外の定数による除算について、常に単調であるという情報を利用して主キー分析を強化しました。#28302 (Amos Bird ).
hasAll のフィルタ条件で bloom filter のデータスキッピング索引を活用できるようにしました。#27984 (Braulio Valdivielso Martínez ).
テーブルの起動処理を遅延させることで、data parts の loading を高速化しました。#28313 (Amos Bird ).
WHERE から PREWHERE に移動される conditions の数が過剰になる可能性がある問題を修正しました (この最適化は設定 optimize_move_to_prewhere で制御されます) 。#28139 (lthaooo ).
optimize_distributed_group_by_sharding_key をデフォルトで有効化しました。#28105 (Azat Khuzhin ).
改善
Distributed テーブルの作成前にクラスター名を確認し、不正なクラスター名ではテーブルを作成できないようにしました。#27832 を修正しました。#27927 (tavplubix )。
他の quantile…Weighted 関数と同様に、集約関数 quantileBFloat16Weighted を追加しました。これにより #27745 が解決されます。#27758 (Ivan Novitskiy ).
属性リストが空の Dictionaries を作成できるようにしました。 #27905 (Maksim Kita ).
パスワードのリセット方法に関する対話型ドキュメントを clickhouse-client に追加しました。これは、ユーザーが ClickHouse をインストールしてパスワードを設定した直後に、それを忘れてしまった場合に役立ちます。#27750 を参照してください。#27903 (alexey-milovidov )。
JSONAsString 入力フォーマットで、データが配列で囲まれている場合をサポートしました。#25517 をクローズしました。#25633 (Kruglov Pavel ).
system.replicas テーブルに新しいカラム last_queue_update_exception を追加しました。#26843 (nvartolomei ).
MaterializedPostgreSQL テーブルで、フェイルオーバー時の再接続に対応しました。#28529 をクローズしました。#28614 (Kseniia Sumarokova ).
サーバーの初回起動時に、一意のサーバーUUIDを生成するようにしました。#20089 (Bharat Nallan ) 。
MySQL エンジンに connection_wait_timeout 設定 (デフォルトは 5 秒、0 は待機しない) を導入しました。#28474 (Azat Khuzhin ) 。
不正な引数を指定して MaterializedPostgreSQL を作成できないようにしました。#28423 をクローズしました。#28430 (Kseniia Sumarokova ).
vertical merge では、事前定義された "rows_sources" ではなく、実際の tmp ファイルを使用するようにしました。これにより、tmp ディスクに不要なディレクトリが生成されるのを防げます。#28299 (Amos Bird ).
HDFS との連携を設定するため、clickhouse-server.service で環境変数 LIBHDFS3_CONF を export する代わりに、server config に libhdfs3_conf を追加しました。#28268 (Zhichang Yu ) 。
予期しない例外 (Part %name% doesn't exist) を引き起こす可能性がある、Temporary 状態のパーツが削除される問題を修正しました。#23661 。 #28221 #28221 ) (Azat Khuzhin ).
zookeeper_log.address を修正し (この PR の最初のパッチ以前はアドレスが常に :: になっていました) 、このカラムに対する getpeername(2) の呼び出し回数を削減しました (zookeeper_log にエントリが追加されるたびに getpeername() が呼び出されていたため、これを避けるために zookeeper client 内でこのアドレスをキャッシュするようにしました) 。 #28212 (Azat Khuzhin ).
演算子 [] の添字と Map 型のキーの間の暗黙的な変換 (たとえば、異なる Int 型、String、FixedString) をサポート。 #28096 (Anton Popov ).
PostgreSQL table engine またはテーブル関数への insert 時に ON CONFLICT 句をサポートしました。#27727 をクローズしました。#28081 (Kseniia Sumarokova )。
互換性のあるデータをアタッチできるよう、Enumデータ型の制限を緩和しました。#26672 を解決しました。#28028 (Dmitry Novik ) 。
空集合に対して定数キーでグループ化する際の動作を制御する設定 empty_result_for_aggregation_by_constant_keys_on_empty_set を追加しました。これは #6842 の従来の動作を復元するためです。#27932 (Amos Bird ).
replication_wait_for_inactive_replica_timeout 設定が追加されました。これにより、非アクティブなレプリカが ALTER/OPTIMZE/TRUNCATE クエリを実行するまでの待機時間を指定できます (デフォルトは 120 秒です) 。replication_alter_partitions_sync が 2 で、一部のレプリカが replication_wait_for_inactive_replica_timeout 秒を超えて非アクティブな場合、UNFINISHED 例外がスローされます。#27931 (tavplubix ).
APPLYカラム変換子でラムダ引数をサポートし、複数の引数を持つ関数を適用できるようにしました。これは #27877 に対応するものです。#27901 (Amos Bird ) 。
tcp_keep_alive_timeout がデフォルトで有効になりました。#27882 (Azat Khuzhin ) 。
リモートクエリのキャンセルを改善 (リモートサーバーが異常終了した場合) 。#27881 (Azat Khuzhin ).
大容量のS3オブジェクトには、マルチパートコピーアップロードを使用します。 #27858 (ianton-ru ).
ライブラリ辞書のパスでシンボリックリンクをたどれるようにしました。#27815 (Kseniia Sumarokova ).
これで、ALTER MODIFY COLUM T を Nullable(T) に変更しても、mutation は不要になりました。#27787 (victorgao ) 。
エラーを黙って無視せず、ReadBufferFromS3 で遅延をカウントしないようにしました。#27484 (Vladimir Chebotarev ) 。
実際に有効期限 (TTL) の処理を行わず、メタデータのみを再計算するようにして、ALTER ... MATERIALIZE TTL を改善しました。 #27019 (lthaooo ).
EOF に改行がなくても、カスタムトップレベルドメインの一覧を読み込めるようにしました。 #28213 (Azat Khuzhin ).
不具合修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース v21.9 (2021-09-09)
後方互換性を持たない変更
Decimal 型のテキスト表現で、末尾のゼロを出力しないようにしました。例: scale 6 の decimal では、1.230000 ではなく 1.23 が出力されます。これにより #15794 をクローズします。アプリケーションが何らかの形で末尾のゼロに依存していた場合は、わずかな非互換性が生じる可能性があります。出力フォーマットでのシリアライゼーションは、設定 output_format_decimal_trailing_zeros で制御できます。toString の実装および String へのキャストは、無条件に変更されます。#27680 (alexey-milovidov ).
パラメータ付き aggregate function の state に対して -Merge combinator を適用する際、異なるパラメータを持つ aggregate function によって生成された state は許可しないようにしました。たとえば、fooState(42)(x) の state は fooMerge(s) や fooMerge(123)(s) では確定できず、fooMerge(42)(s) のようにパラメータを明示的に指定し、その値も一致している必要があります。これは、パラメータを最終化のためだけに使う quantile や sequence* などの一部の特殊な aggregate function には影響しません。#26847 (tavplubix ).
clickhouse-local では、ポート付きのローカルアドレスを常にリモートとして扱うようにしました。#26736 (Raúl Marín ).
カラムの別名が expression の名前と同じになっている複雑なクエリで、不正な cast が発生することがある問題を修正しました。これにより #25447 と #26914 を修正します。この修正により後方非互換性が生じる可能性があります。異なる expression に同じ名前が付いている場合は、Exception が throw されます。enable_optimize_predicate_expression が設定されている一部のまれなケースでは、これによって動作しなくなる可能性があります。#26639 (alexey-milovidov ).
scalar サブクエリは、その型が Nullable になり得る場合、常に Nullable の結果を返すようになりました。これは、サブクエリが空の場合、その結果は Null であるべきだからです。従来は、型推論では scalar サブクエリを実行しないため、非 Nullable 型が使われて型の不整合エラーが発生する可能性がありました。結果が空で、Nullable に変換できない scalar サブクエリ (Array や Tuple など) は、現在ではエラーを throw します。#25411 を修正しました。#26423 (Nikolai Kochetov ).
here document の構文を導入しました。例: SELECT $doc$ VALUE $doc$。#26671 (Maksim Kita )。この変更は、クエリ内に $ を含む識別子がある場合、後方非互換となります #28768 。
これで、索引は isNull および isNotNull を含む Nullable 型を扱えるようになりました。#12433 および #12455 (Amos Bird )、ならびに #27250 (Azat Khuzhin )。ただし、これには on-disk format の変更が含まれており、新しい server は古い data を読み取れても、古い server は読み取れません。また、MINMAX データスキッピングインデックスがある場合、新しい索引は従来の .idx ではなく .idx2 拡張子を持つため、Data after mutation/merge is not byte-identical エラーが発生することがあります。そのため、この場合は既存のすべてのレプリカの更新を遅らせるべきではありません。そうしないと、古いレプリカ (<21.9) が 21.9+ の新しいレプリカから data をダウンロードした際に、ダウンロードした part に索引を適用できなくなります。
新機能
実験的機能
圧縮の代わりにカラムを暗号化する圧縮コーデック AES_128_GCM_SIV を追加しました。#19896 (PHO )。今後書き直される予定のため、使用しないでください。
MaterializeMySQL を MaterializedMySQL に名称変更しました。#26822 (tavplubix )。
パフォーマンス改善
改善点
window functions を正式機能とする。allow_experimental_window_functions 設定を削除する。#27184 (Alexander Kuzmenkov ) 。
分単位ぴったりではないタイムゾーンオフセットとの互換性を改善しました。#27080 (Raúl Marín ) 。
File テーブルのファイルディスクリプタが通常のファイルである場合、そのファイルを複数回読み取れるようにしました。これにより、stdin が clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < file のような通常のファイルであれば、clickhouse-local は stdin を複数回 (複数の SELECT クエリやサブクエリで) 読み取れるようになります。これにより #11124 をクローズしました。共同著者: (alexey-milovidov )。 #25960 (BoloniniD )。
重複した索引解析を削除し、プロジェクション解析時に無効な limit チェックが行われる可能性を防止しました。 #27742 (Amos Bird ).
HTTPリクエストのボディでクエリパラメータを渡せるようになりました。#27706 (Hermano Lustosa ) 。
パーティション式でのarrayJoinを禁止しました。#27648 (Raúl Marín ) 。
認証に失敗した場合、クライアントの IP アドレスを記録する。 #27514 (Misko Lee ).
gRPCプロトコルのバイナリデータでは、文字列ではなくバイトを使用するようにしました。#27431 (Vitaly Baranov ).
HTTPポートが設定されていない状態でユーザーがTCPポートにHTTPリクエストを送信しようとした場合、エラーメッセージ付きのレスポンスを返すようにしました。 #27385 (Braulio Valdivielso Martínez ).
内部使用向けの_CAST関数を追加しました。この関数は型のNullable性を保持しませんが、内部向けではないcastは設定cast_keep_nullableに従ってNullable性を保持します。#12636 をクローズしました。#27382 (Kseniia Sumarokova ).
整形済みクエリを追加で system.query_log に記録する設定 log_formatted_queries を追加しました。normalizeQuery や normalizeQueryKeepNames などの関数は、パフォーマンス向上のためにクエリの解析やフォーマットを行わないため、これは正規化クエリの分析に役立ちます。#27380 (Amos Bird ).
multiMatchAny などの hyperscan 関連関数で巨大な正規表現が使用されるのを防ぐため、2 つの設定 max_hyperscan_regexp_length と max_hyperscan_regexp_total_length を追加しました。#27378 (Amos Bird ) 。
bitmap aggregate functions が消費するメモリが、メモリ制限の計算に含まれるようになりました。これにより #26555 が解決されます。#27252 (alexey-milovidov ).
S3プロキシリゾルバに 10 秒間の cache を追加しました。#27216 (ianton-ru ) 。
グローバル mutex を、正規表現の構築ごとの個別のものに分割しました。これにより、大きな正規表現の構築で他の関連スレッドがブロックされるのを防げます。 #27211 (Amos Bird ).
PostgreSQLデータベースエンジンでスキーマをサポートしました。#27166 をクローズしました。#27198 (Kseniia Sumarokova ).
clickhouse-clientでメモリ使用量を追跡できるようにしました。 #27191 (Filatenkov Artur ).
クエリが開始できなかった場合でも、system.query_log に query_kind を記録するようにしました。#27182 (Amos Bird ) 。
レプリカ名をレプリカのアクティブ状態に対応付けるカラム replica_is_active をテーブル system.replicas に追加しました。#27138 をクローズしました。#27180 (Maksim Kita ) 。
Web UIでサーバーURI経由でクエリ設定を渡せるようになりました。 #27177 (kolsys ).
現在のノードが ZooKeeper にプッシュした DDL エントリ ID の最大値を表す MaxPushedDDLEntryID という新しいメトリクスを追加しました。 #27174 (Fuwang Hu ).
clickhouse-keeper が znode を作成する際の、存在条件および空文字列ノードの判定を改善しました。 #27125 (小路 ).
Merge JOIN で、右側が空集合の場合も正しく処理されるようになりました。#27078 (Vladimir C ).
関数が分片レベルの定数として扱えるようになりました。つまり、何らかの分散テーブルのコンテキストで実行された場合は通常のカラムを生成し、それ以外の場合は定数値を生成します。主な関数は hostName(), tcpPort(), version(), buildId(), uptime(), などです。 #27020 (Amos Bird ).
extractAllGroupsHorizontal を更新しました。行ごとの一致件数の上限を、オプションの第3引数で設定できるようになりました。#26961 (Vasily Nemkov ) 。
RocksDB の統計情報を system.rocksdb テーブル経由で公開。ClickHouse の設定 (rocksdb... オプション) から rocksdb オプションを読み取ります。注意: ClickHouse は RocksDB に依存しておらず、RocksDB は追加のインテグレーションストレージエンジンの 1 つにすぎません。#26821 (Azat Khuzhin ).
内部 RocksDB ログの冗長性を低減。注: ClickHouse は RocksDB に依存しておらず、RocksDB は追加のインテグレーション向けストレージエンジンの 1 つにすぎません。これにより #26252 をクローズします。 #26789 (alexey-milovidov ).
デフォルトロールの変更は、新しいセッションにのみ影響します。#26759 (Vitaly Baranov ) 。
Docker ではデフォルトで Watchdog は無効です。Ctrl+C を処理できない問題を修正しました。#26757 (Mikhail f. Shiryaev ).
SET PROFILE で、指定したプロファイルに制約が設定されている場合は、それらも適用されるようになりました。#26730 (Vitaly Baranov ) 。
KILL QUERY リクエストの処理を改善。#26675 (Raúl Marín ) 。
mapPopulatesSeries 関数で Map 型をサポートしました。#26663 (Ildus Kurbangaliev ) 。
skip_unavailable_shards 使用時に接続試行が過剰 (x2) になる問題を修正しました。#26658 (Azat Khuzhin ) 。
connection の失敗時 (例: EMFILE) に clickhouse-benchmark がハングしないようにしました。#26656 (Azat Khuzhin ) 。
Kafka engineで使用できるスレッド数を増やしました。 #26642 (feihengye ).
clickhouse-benchmark にラウンドロビン対応を追加しました (通常の複数 host/port での実行と異なるのは、統計レポートのみです) 。#26607 (Azat Khuzhin ).
実行可能辞書 (executable、executable_pool) は、clickhouse-local を使用して DDLクエリで作成できるようになりました。#22355 をクローズしました。#26510 (Maksim Kita ) 。
mysql および postgresql 互換プロトコルハンドラー向けに、クライアントクエリの種別を設定しました。 #26498 (anneji-dev ).
distributed_push_down_limit=1 を指定すると、SELECT * FROM dist ORDER BY key LIMIT 10 のようなクエリでは、分片ごとに LIMIT が適用されます。SELECT DISTINCT shading_key FROM dist ORDER BY key のようなクエリでは、Distinct/LIMIT BY ステップは実行されません。これにより、distributed_push_down_limit は optimize_distributed_group_by_sharding_key 最適化でも考慮されるようになりました。#26466 (Azat Khuzhin ).
protobuf を 3.17.3 に更新しました。変更履歴は https://github.com/protocolbuffers/protobuf/releases で公開されています。#26424 (Ilya Yatsishin ).
大規模なクラスターでテールレイテンシを軽減できる use_hedged_requests 設定を有効にしました。 #26380 (alexey-milovidov ).
ユーザーの許可ホスト一覧に存在しないホストが含まれる場合の動作を改善しました。#26368 (ianton-ru ).
CREATE TABLE 経由で Distributed のディレクトリモニター設定を指定できるようになりました (例: CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 など) 。#26336 (Azat Khuzhin ) 。
web UI のオリジンと異なる場合、server アドレスを web UI の履歴 URL に保存するようにしました。これにより #26044 をクローズします。 #26322 (alexey-milovidov ).
sleep / sleepEachRow の呼び出しをプロファイリングするイベントを追加しました。 #26320 (Raúl Marín ).
異なるクラスター間で分片の接続を再利用できるようになりました。また、cluster table function の使用時に新しい接続が作成されるのも回避します。#26318 (Amos Bird ).
古い一時ディレクトリの削除実行間隔を、デフォルト値付きのパラメータで制御できるようにしました。 #26212 . #26313 (fastio ).
関数 range によって生成されるデータ量の安全しきい値を調整するための設定 function_range_max_elements_in_block を追加しました。これにより #26303 がクローズされます。#26305 (alexey-milovidov ).
テーブル作成時にハッシュ関数をチェックし、サンプリング時にはチェックしないようにしました。MergeTree 用の設定を追加しました。誤ったサンプリングカラムでテーブルが作成されていても、サンプリングが一度も使われない場合は、この設定を無効にすることで、例外を出さずにサーバーを起動できます。 #26256 (zhaoyu ).
指定した String カラムを、デフォルトの bytes ではなく string として Avro に出力するための設定 output_format_avro_string_column_pattern を追加しました。#22414 に対応しています。#26245 (Ilya Golshtein ).
Log および TinyLog テーブルの system.columns テーブルに、カラムサイズの情報を追加しました。これにより #9001 が解決されました。#26241 (Nikolay Degterinsky ).
カスタムのdisk構成があり、一部のdiskにdetachedディレクトリが存在しない場合でも、system.detached_partsテーブルをクエリしてもExceptionをスローしないようにしました。これにより #26078 を解決します。 #26236 (alexey-milovidov ).
now()、today() のような定数式を含む、キー内の非決定論的関数をチェックするようにしました。これにより #25875 をクローズしました。これにより #11333 をクローズしました。#26235 (alexey-milovidov ).
PostgreSQLテーブルエンジンで、timestamp および timestamptz データ型を DateTime64 に変換するようにしました。#26234 (jasine ).
より適切なプロジェクション候補を選択できるよう、プロジェクションに対して積極的な IN 索引解析を適用しました。 #26218 (Amos Bird ).
スカラー関数が渡された場合、IN から GLOBAL キーワードを削除するようにしました。以前のバージョンでは、GLOBAL IN f(x) を指定すると例外が発生していました。#26217 (Amos Bird ).
例外メッセージにエラー ID (BAD_ARGUMENTS など) を追加しました。これにより #25862 がクローズされました。#26172 (alexey-milovidov ) 。
clickhouse-local の –progress オプションで誤った出力がされる問題を修正しました。プログレスバーは 100% に達すると、clickhouse-client と同様に消去されます。#17484 をクローズしました。#26128 (Kseniia Sumarokova ).
設定 merge_selecting_sleep_ms を追加しました。#26120 (lthaooo ).
Linux AIO の 1 ブロック先読みを伴う複雑な使用を廃止し、O_DIRECT を用いたごく単純な同期 IO に置き換えました。以前のバージョンでは、max_threads が 1 より大きい場合、設定 min_bytes_to_use_direct_io が正しく機能しないことがありました。direct IO による読み取り (クエリでは既定で無効、大規模なマージでは既定で有効) は、効率がやや低い形で動作します。これにより #25997 をクローズします。#26003 (alexey-milovidov )。
REPLACE TABLE クエリ時に Distributed テーブルをフラッシュするようにしました。#24566 を解決しました。新しいテーブルへの挿入に失敗した場合、[CREATE OR] REPLACE TABLE ... AS SELECT クエリでテーブルを置き換えたり (または作成したり) しないようにしました。#23175 を解決しました。#25895 (tavplubix ).
クエリによって実行された (マテリアライズドまたはライブ) ビューの名前を含む views カラムを system.query_log に追加しました。クエリ中に実行された各ビューに関する情報を含む新しいログテーブル (system.query_views_log) を追加しました。ビューの実行動作を変更しました。ビューの実行中に例外がスローされた場合、すでに開始されているビューは完了するまで実行を継続します。これは以前は parallel_view_processing=true の場合の挙動でしたが、現在は常にこの挙動になります。 - 依存ビューが読み取りの進捗をコンテキストに報告するようになりました。#25714 (Raúl Marín ).
分散クエリの実行完了時に、接続のドレインを非同期で行うようにしました。新しいサーバー設定 max_threads_for_connection_collector が追加され、バックグラウンドで接続を回収する worker 数を指定できるようになりました。プールがいっぱいの場合、接続のドレインは同期的に行われますが、従来とは少し動作が異なります。クライアントに EOS を送信した後にドレインされるため、クエリは十分なデータを受信した時点ですぐに成功し、例外はクライアントに送出されるのではなくログに記録されます。設定 drain_timeout も追加されました (デフォルトは 3 秒です) 。接続のドレインは、タイムアウト時に切断されます。 #25674 (Amos Bird ).
設定で複数の include をサポートしました。複数のソースからユーザー設定やリモートサーバー設定を include できるようになりました。<include /> 要素に from_zk、from_env、または incl 属性を指定するだけで、対応する内容に置き換えられます。#24404 (nvartolomei ).
insert_distributed_one_random_shard = 1 を使用した分散テーブルへの複数ブロック挿入の不具合を修正しました。これは軽微な機能です。改善として分類しました。#23140 (Amos Bird ).
Map 型で、キー/値として LowCardinality および FixedString をサポート。 #21543 (hexiaoting ).
ローカルディスク設定の再読み込みを有効にしました。 #19526 (taiyang-li ).
バグ修正
ビルド/テスト/パッケージングの改善
stateful テストと stateless tests がランダムな timezones で実行されるようになりました。#12439 を修正しました。Protobuf format で String を DateTime として読み取り、DateTime を String として書き込む際に、timezone が考慮されるようになりました。Arrow および Parquet フォーマットで UInt16 を DateTime として読み取る場合、Arrow と Parquet では Date が UInt16 としてシリアライズされるため、まず Date として扱い、その後 DateTime の timezone を考慮して DateTime に変換するようになりました。GraphiteMergeTree で、時刻の rounding に time zone が考慮されるようになりました。#5098 を修正しました。著者: @alexey-milovidov. #15408 (alesapin ).
clickhouse-test が Jinja2 templates を使った SQL テストをサポートするようになりました。#26579 (Vladimir C ).
clang-13 での build のサポートを追加しました。これにより #27705 がクローズされます。#27714 (alexey-milovidov ). #27777 (Sergei Semin )
特定の CPU 命令セットの有効/無効を切り替えて build するための CMake オプションを追加しました。これは #17469 および #27509 に対応するものです。#27508 (alexey-milovidov ).
動的ライブラリ使用時の補助プログラムのリンクを修正しました。#26958 (Raúl Marín ).
RocksDB を 2021-07-16 時点の master に更新しました。#26411 (alexey-milovidov ).
ClickHouse リリース v21.8、2021-08-12
アップグレードに関する注意
新しいバージョンでは、システムログテーブル (system.query_log、system.query_thread_log、system.processes、system.opentelemetry_span_log) で Map データ型を使用します。これらのテーブルは新しいデータ型で自動的に作成されます。古いクエリとの互換性を保つため、仮想カラムも作成されます。#18698 。#23934 , #25773 (hexiaoting , sundy-li , Maksim Kita )。バージョン 21.8 からそれ以前のバージョンに ダウングレード する場合は、ログを含むシステムテーブルを手動でクリーンアップする必要があります。/var/lib/clickhouse/data/system/*_log を確認してください。
新機能
SQL/JSON 標準の一部をサポートしました。#24148 (l1tsolaiki , Kseniia Sumarokova ).
CPU 使用率、ディスク使用量、メモリ使用量、IO、ネットワーク、ファイル、ロードアベレージ、CPU 周波数、温度センサー、EDAC カウンター、システム稼働時間に関する一般的なシステムメトリクス (system.asynchronous_metrics および system.asynchronous_metric_log) を収集するようにしました。あわせて、スケジューリングジッターやメトリクス収集に要した時間に関するメトリクスも追加しました。これは ClickHouse における atop のように動作し、追加のツールをインストールしていなくても監視データにアクセスできます。#9430 をクローズしました。#24416 (alexey-milovidov , Yegor Levankov ).
MaterializedPostgreSQL テーブルエンジンおよびデータベースエンジンを追加しました。このデータベースエンジンにより、データベース全体またはデータベース内のテーブルの任意の部分集合をレプリケートできます。#20470 (Kseniia Sumarokova ).
新しい関数 leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8() を追加しました。#26075 (Vitaly Baranov ).
ADD INDEX コマンドに FIRST キーワードを追加し、索引リストの先頭に索引を追加できるようにしました。#25904 (xjewer ).
既存のデータスキッピングインデックスに関する情報を含む system.data_skipping_indices テーブルを導入しました。#7659 をクローズしました。#25693 (Dmitry Novik ).
bin/unbin 関数を追加しました。#25609 (zhaoyu ).
mapAdd および mapSubtract 関数で Map と UInt128, Int128, UInt256, Int256 型をサポートしました。#25596 (Ildus Kurbangaliev ).
DISTINCT ON (columns) 式をサポートしました。#25404 をクローズしました。#25589 (Zijie Lu ).
カスタム設定をデフォルト値にリセットし、テーブルのメタデータから削除できるようにしました。これにより、システムや設定ファイルのデフォルト値を知らなくても変更をロールバックできます。#14449 をクローズしました。#17769 (xjewer ).
EXPLAIN PIPELINE graph = 1 クエリが送信された場合、Web UI でパイプラインをグラフとして表示するようにしました。#26067 (alexey-milovidov ).
パフォーマンス改善
aggregate functions をコンパイルするようにしました。有効にするには、compile_aggregate_expressions オプションを使用します。#24789 (Maksim Kita ).
多数のカラムを持つテーブルの読み取りが必要な短いクエリのレイテンシを改善しました。#26371 (Anton Popov ).
改善
バグ修正
ClickHouse リリース v21.7 (2021-07-09)
後方互換性を持たない変更
明示的に定義された大きな Set を含むクエリのパフォーマンスを改善しました。互換性設定 legacy_column_name_of_tuple_literal を追加しました。バージョン 21.7 未満からそれ以降の任意のバージョンへクラスターをローリングアップデートする際は、これを true に設定することを推奨します。そうしないと、アップデート中に IN 句で明示的に定義された Set を含む分散クエリが失敗する可能性があります。 #25371 (Anton Popov ).
clickhouse-keeper (ZooKeeper の実験的な代替) における最大バッファサイズが、前方・後方互換性のない形で変更されました。後で行うより、今のうち (本番運用前) に対応しておくほうが望ましいです。 #25421 (alesapin ).
新機能
XML の代替として、YAML フォーマットでの設定をサポートしました。これにより #3607 をクローズしました。#21858 (BoloniniD )。
データ自体は (おそらく) 存在しているものの、ZooKeeper のメタデータが失われた場合に、レプリケートテーブルを復元する手段を提供します。#13458 を解決しました。#13652 (Mike Kot )。
Arrow/Parquet/ORC で structs と maps を、また Arrow の入出力フォーマットで辞書をサポートしました。新しい設定 output_format_arrow_low_cardinality_as_dictionary も追加しました。#24341 (Kruglov Pavel )。
辞書で Array 型のサポートを追加しました。#25119 (Maksim Kita )。
bitPositionsToArray 関数を追加しました。#23792 をクローズしました。著者 [Kevin Wan] (@MaxWk)。#25394 (Maksim Kita )。
'Friday' や 'April' のような名前を返す dateName 関数を追加しました。著者 [Daniil Kondratyev] (@dankondr)。#25372 (Maksim Kita )。
カラムを JSON 表現にシリアライズする toJSONString 関数を追加しました。#25164 (Amos Bird )。
query_log に 2 つの新しいカラム initial_query_start_time、initial_query_start_time_microsecond が追加され、分散クエリがある場合はその開始時刻を記録するようになりました。#25022 (Amos Bird )。
集約関数 segmentLengthSum を追加しました。#24250 (flynn )。
すべての IN/JOIN をデフォルトで GLOBAL IN/JOIN にする新しい boolean 設定 prefer_global_in_and_join を追加しました。#23434 (Amos Bird )。
Join table engine に対する ALTER DELETE クエリをサポートしました。#23260 (foolchi )。
集約関数 quantileBFloat16 と、それに対応する quantilesBFloat16 および medianBFloat16 を追加しました。これは非常にシンプルで高速な分位点推定器で、相対誤差は 0.390625% 以下です。これにより #16641 をクローズしました。#23204 (Ivan Novitskiy )。
flow analysis に有用な sequenceNextNode() 関数を実装しました。#19766 (achimbab )。
実験的機能
パフォーマンス改善
一部の関数を subcolumn の読み取りに変換し、読み取るデータ量を削減する最適化を追加しました。たとえば、ステートメント col IS NULL は subcolumn col.null の読み取りに変換されます。この最適化は設定 optimize_functions_to_subcolumns により有効化できますが、現時点ではデフォルトで無効です。 #24406 (Anton Popov ).
より多くのカラムを、可能な場合はエイリアス式に書き換えるようにしました。これにより、プロジェクションなどの、より高度な最適化が有効になる場合があります。 #24405 (Amos Bird ).
型 bloom_filter の索引を、定数 Array を伴う hasAny 関数の式で使用できるようになりました。これにより #24291 が解決されます。 #24900 (Vasily Nemkov ).
RabbitMQ のキューが空の場合に読み取り試行を再スケジュールするため、指数バックオフを追加しました。 (ClickHouse は RabbitMQ からのデータ取り込みをサポートしています。) これにより #24340 が解決されます。 #24415 (Kseniia Sumarokova ).
改善
レプリケーションの帯域幅を制限できるようになりました。2 つの Replicated*MergeTree 設定 max_replicated_fetches_network_bandwidth と max_replicated_sends_network_bandwidth を追加し、テーブルごとのレプリケーション fetch/send の最大速度を制限できるようにしました。さらに、サーバー全体に適用される 2 つの設定 (default user profile 内) max_replicated_fetches_network_bandwidth_for_server と max_replicated_sends_network_bandwidth_for_server を追加し、すべてのテーブルに対するレプリケーションの最大速度を制限できるようにしました。これらの設定は完全に厳密に適用されるわけではありません。デフォルトでは無効です。#1821 を修正しました。#24573 (alesapin ).
ODBC および Library bridge 向けのリソース制約と分離。bridge プロセス用に、専用の clickhouse-bridge グループとユーザーを使用します。bridge が OOMキラーの最優先対象となるように、oom_score_adj を設定します。最大 RSS を 1 GiB に設定します。#23861 をクローズしました。#25280 (Kseniia Sumarokova ).
メインのclickhouse実行ファイルへのスタンドアロンのclickhouse-keeperシンボリックリンクを追加しました。これにより、メインのClickHouse serverなしで協調機能を実行できるようになりました。#24059 (alesapin ).
VIEW へのクエリではグローバル設定を使用するようにしました。VIEW へのクエリがローカル設定を使用した場合の動作を修正しました。CREATE VIEW と SELECT の設定が異なるとエラーが発生していました。現時点では、VIEW ではこれらの変更された設定は使用されませんが、CREATE VIEW クエリの SETTINGS セクションで追加の設定を渡すことは引き続き可能です。#20551 をクローズしました。#24095 (Vladimir ).
サーバー起動時、不正なパーティションIDを持つパーツは削除されることはなく、常にデタッチされていました。 #25070 . #25166 (Nikolai Kochetov ).
バックグラウンドスケジュールプールのサイズを 128 に増やしました (background_schedule_pool_size 設定) 。これにより、ZooKeeper への接続が遅い場合にレプリケーションキューがハングするのを回避できます。#25072 (alesapin ).
バックグラウンドで一度にマージできるパーツ数を制限する MergeTree 設定 max_parts_to_merge_at_once を追加しました。OPTIMIZE FINAL クエリには影響しません。#1820 を修正しました。#24496 (alesapin ).
パーティションプルーニングで NOT IN 演算子が使えるようになりました。#24894 (Amos Bird ) 。
127.0.1.1 のような IPv4 アドレスをローカルとして認識するようにしました。これについては議論の余地がありますが、#23504 をクローズします。Michael Filimonov がこの機能をテストする予定です。#24316 (alexey-milovidov ).
MaterializeMySQL で作成された ClickHouse データベース (実験的機能) に、マテリアライズ元の MySQL データベースにあるすべてのカラムコメントが含まれるようになりました。 #25199 (Storozhuk Kostiantyn ).
MySQLストレージエンジン向けに設定 (connection_auto_close/connection_max_tries/connection_pool_size) を追加しました。#24146 (Azat Khuzhin ) 。
Distributed engine の起動時間を短縮しました。#25663 (Azat Khuzhin ) 。
分散テーブルの改善。internal_replication=true の場合、dirname からレプリカを除外しました (これにより、クラスターを持つ Distributed への INSERT を任意の数のレプリカから実行できるようになりました。従来は 15 個のレプリカまでしかサポートされておらず、それを超えると async ブロック用ディレクトリの作成時に ENAMETOOLONG で失敗していました) 。 #25513 (Azat Khuzhin ).
LowCardinality で Interval 型がサポートされました。これは一部の式の中間値に必要です。#21730 をクローズしました。#25410 (Vladimir ).
sequenceMatch および sequenceCount 関数の時間条件で == 演算子が使えるようになりました。例: sequenceMatch('(?1)(?t==1)(?2)')(time, data = 1, data = 2)。 #25299 (Christophe Kalenzaga ).
設定項目 http_max_fields、http_max_field_name_size、http_max_field_value_size を追加しました。#25296 (Ivan ) 。
関数 if の分岐で Decimal 型と Int 型をサポートするようにしました。これにより #20549 がクローズされます。これにより #10142 がクローズされます。#25283 (alexey-milovidov )。
clickhouse-client のプロンプトを更新し、再接続時にメッセージを表示するようにしました。これにより #10577 が解決されます。#25281 (alexey-milovidov ).
集約関数 topK のメモリ追跡を修正しました。これにより #25259 がクローズされます。#25260 (alexey-milovidov )。
IDN ホスト (例: example.рф) に対する topLevelDomain を修正しました。従来は、このようなホストに対して空文字列を返していました。#25103 (Azat Khuzhin ).
実行時に Linux カーネルのバージョンを検出するようにしました (ネストされた epoll を動作させるために必要であり、async_socket_for_remote/use_hedged_requests では必須です。そうしないと、リモートクエリがハングする可能性があります) 。 #25067 (Azat Khuzhin ) 。
分散クエリにおいて、optimize_skip_unused_shards=1 のとき、(sharding key) IN (one-element-tuple) のような条件で分片をスキップできるようになりました。 (複数要素の Tuple はサポートされていましたが、単一要素の Tuple はリテラルとして解釈されるため、動作していませんでした。) #24930 (Amos Bird ).
S3エラーのログメッセージを改善し、キーやバケットが空の場合でも空白が二重に入らないようにしました。#24897 (Vladimir Chebotarev ).
一部のクエリでは、多段階のセマンティック解析が必要です。この場合は、IN 用に生成済みの Set を再利用してみてください。#24874 (Amos Bird ) 。
insert_distributed_sync で max_distributed_connections を尊重するようにしました (そうしないと、大規模なクラスターで同期 insert を行う際に max_thread_pool_size を使い果たす可能性があります) 。 #24754 (Azat Khuzhin ).
スカラーサブクエリで、Limit for rows or bytes to read exceeded のようなエラーが隠蔽されないようにしました。#24545 (nvartolomei ).
String-to-Int パーサーの判定を厳格化し、toInt64('+') で例外を送出するようにしました。#24475 (Amos Bird ) 。
SSD_CACHE を DDL クエリで作成した場合、user_files ディレクトリ内にのみ作成できます。 #24466 (Maksim Kita ).
insertクエリでデフォルト以外のスキーマを指定するPostgreSQLのサポートを追加しました。 #24149 をクローズ。 #24413 (Kseniia Sumarokova ).
IPv6 アドレスが正しく解決されるように修正しました (つまり、select * from remote('[::1]', system.one) が動作するように修正しました) 。 #24319 (Azat Khuzhin ).
複数行モードで、FROM句内のサブクエリに含まれる行末の空白を修正し、クエリの出力もよりわかりやすくなるようわずかに変更しました。#24151 (Azat Khuzhin ).
分散テーブルの改善。障害発生時 (たとえばメモリ制限や破損が原因の場合) に分散 Batch を分割できるようにする機能が、distributed_directory_monitor_split_batch_on_failure の設定として追加されました (デフォルトでは OFF) 。#23864 (Azat Khuzhin ) 。
Join テーブルエンジンでのカラム名の競合に対応しました。#20309 をクローズしました。#23769 (Vladimir ).
clickhouse-local の File テーブルエンジン、およびデータが stdin 経由で渡された場合の clickhouse-client の INSERT クエリで、進行状況が表示されるようになりました。#18209 をクローズしました。#23656 (Kseniia Sumarokova ) 。
clickhouse-copier のバグ修正と改善。異なる (ただし互換性のあるスキーマの) テーブルをコピーできるようにしました。#9159 をクローズ。ReplacingMergeTree をコピーするためのテストを追加。#22711 をクローズ。カラムの有効期限 (TTL) とデータスキッピングインデックスをサポート。内部の Distributed テーブルを作成する際には、これらは単純に削除されます (有効期限 (TTL) とスキッピングインデックスは基になるテーブルに残ります) 。#19384 をクローズ。MATERIALIZED カラムと ALIAS カラムをコピーできるようにしました。これが役立つケースもあります (たとえば、このカラムが PRIMARY KEY に含まれている場合) 。これにより、タスク設定で allow_to_copy_alias_and_materialized_columns プロパティを true に設定すると許可されます。#9177 をクローズ。[#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007 ) をクローズ。#9514 をクローズ。補助テーブルを移動する前に元のテーブルのパーティションを削除するための allow_to_drop_target_partitions プロパティをタスク設定に追加。#20957 をクローズ。OPTIMIZE DEDUPLICATE クエリを廃止。この回避策が必要だったのは、ALTER TABLE MOVE PARTITION が何度も再試行され、通常の MergeTree テーブルには重複排除機能がないためです。#17966 をクローズ。進行状況をパス task_path + /status の ZooKeeper ノードに JSON フォーマットで書き込むようにしました。#20955 をクローズ。引数なしの ReplicatedTables をサポート。#24834 をクローズ 。#23518 (Nikita Mikhaylov ).
S3 からの読み取りを再試行する際、各再試行の間にバックオフを伴う待機を追加しました。#23461 (Vladimir Chebotarev ) 。
Distributed table への INSERT で、insert_allow_materialized_columns (マテリアライズドカラムを許可) が反映されるようにしました。#23349 (Azat Khuzhin ).
分散クエリでLIMITのプッシュダウンを可能にしました。#23027 (Azat Khuzhin ) 。
複数の S3 ボリュームを使用する zero-copy レプリケーションの問題を修正 (#22679 を修正) 。#22864 (ianton-ru ) 。
ユーザーがオペレーティングシステムに任意の空きポートを要求した際にバインドされた実際のポート番号を特定し、それをログメッセージに表示するようにしました。 #25569 (bnaecker ).
attndims が場合によっては正しく動作しないため、postgres配列の変換結果が n 次元配列ではなく String データ型になってしまうことがある問題を修正しました。#24804 をクローズしました。#25538 (Kseniia Sumarokova ).
MySQL、PostgreSQL、ODBC における、timezone 付き DateTime の変換を修正しました。#5057 をクローズしました。#25528 (Kseniia Sumarokova ) 。
テーブルごとに KILL MUTATION を区別するようにしました (これにより、予期しない Cancelled mutating parts エラーを修正) 。#25025 (Azat Khuzhin ) 。
bucket のルートに S3 disk を宣言できるようになりました (S3 仮想ファイルシステムは開発中の実験的機能です) 。#24898 (Vladimir Chebotarev ) 。
分散テーブルでサブカラム (例:Tuple の部分) を読み取れるようにしました。#24472 (Anton Popov ) 。
MySQL互換プロトコル向けの機能改善: user 関数が正しい出力を返すようにしました。#25697 をクローズしました。#25697 (sundyli ).
バグ修正
後方互換性を改善。パーティションキーで使用される場合は、古い modulo 関数バージョンを使用します。#23508 をクローズ。#24157 (Kseniia Sumarokova ) 。
低メモリのサーバーでごくまれに発生し、再起動しないとマージを実行できなくなる不具合を修正しました。おそらく #24603 も修正されます。 #24872 (alesapin ).
alter move/replace partition の同時実行時に、レプリケーションキューで発生することがある極めてまれなエラー Tagging already tagged part を修正しました。これにより、#22142 も修正される可能性があります。#24961 (alesapin ).
他の集約関数の集約関数 state を集約して集約関数 state を計算する際に発生する可能性のあるクラッシュを修正しました (実用的なユースケースではありません) 。#24523 を参照してください。#25015 (alexey-milovidov )。
クエリ SYSTEM RESTART REPLICA または SYSTEM SYNC REPLICA が完了しない場合の挙動を修正しました。この問題は、RAM 容量が極端に少ないサーバーで確認されました。#24457 (Nikita Mikhaylov ).
clickhouse-server 内で ZooKeeper クライアントがハングする可能性がある不具合を修正しました。 #24721 (alesapin ).
ZooKeeper への connection が失われ、connection の復元後にレプリカが複製された場合、replication queue に outdated な エントリ が含まれることがありました。replication queue に 交差する 仮想パーツ が含まれている際に、アサーションが失敗する問題を修正しました。これは、一部の data part が失われた場合にまれに発生することがあります。終了するのではなく、Log に error を出力するようにしました。 #24777 (tavplubix ).
クエリプランの式プッシュダウン最適化で WHERE 条件が失われる問題を修正しました (設定 query_plan_filter_push_down = 1 をデフォルトで有効化) 。#25368 を修正します。#25370 (Nikolai Kochetov )。
有効期限 (TTL) を伴うマージ後に交差するパーツが生じる可能性があるバグを修正しました:Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin ).
ZooKeeper との接続が失われた場合、ReplicatedMergeTree テーブルは再接続を試みる前にバックグラウンド処理の完了を待つことがありました。この問題は修正され、現在はバックグラウンド処理が強制的に停止されます。#25306 (tavplubix ).
配列が主キーに使用されている場合に、ARRAY JOIN を含むクエリで発生するエラー Key expression contains comparison between inconvertible types を修正しました。#8247 を修正します。#25546 (Anton Popov ).
クエリ WITH TOTALS および WITH FILL で totals が誤っていた問題を修正しました。#20872 を修正しました。#25539 (Anton Popov ).
クラスター設定の再読み込みと同時に system.clusters にクエリした際に発生するデータレースを修正しました。#25737 (Amos Bird ) 。
データベース間で Distributed テーブルを移動する際の No such file or directory エラーを修正しました。#24971 を修正。#25667 (tavplubix ) 。
REPLACE PARTITION は、まれにソースパーティションが空の場合に無視されることがありましたが、この問題は修正されました。#24869 。#25665 (tavplubix ).
まれに一部のレプリカでエンキューされたDDLクエリがスキップされることがある、Replicated データベースエンジンのバグを修正しました。 #24805 (tavplubix ).
クエリを伴わない EXPLAIN AST でのヌルポインタ逆参照を修正しました。#25631 (Nikolai Kochetov ) 。
空のパーツの自動削除を待機する処理を修正しました。これにより、background pool が完全に埋まり、レプリケーションが停止する可能性がありました。#23315 (Anton Popov ).
S3仮想ファイルシステムに保存されたテーブルの復元を修正しました (これは本番環境には未対応の実験的機能です) 。#25601 (ianton-ru ) 。
Decimal256 使用時の Arrow フォーマットにおける nullptr の逆参照を修正。Arrow フォーマットで Decimal256 をサポート。#25531 (Kruglov Pavel ).
前処理済みの設定ファイル名の前に余分なアンダースコアが付く問題を修正しました。 #25431 (Vitaly Baranov ) 。
clickhouse-copier ツールの修正: copier のタスク設定に sharding_key がない場合に発生するセグメンテーションフォルトを修正しました。#25419 (Nikita Mikhaylov ).
DDL で使用した際の REPLACE カラム変換子について、フォーマット済みのクエリを正しくクォートするよう修正しました。これにより #23925 が修正されます。#25391 (Amos Bird ).
quantileDeterministic 関数および同様の関数で、非決定論的な挙動が生じる可能性を修正しました。これにより #20480 がクローズされます。#25313 (alexey-milovidov ).
SummingMergeTree で SimpleAggregateFunction(LowCardinality) をサポートしました。#25134 を修正しています。#25300 (Nikolai Kochetov ).
例外メッセージ "Cannot sum Array/Tuple in min/maxMap" に関するロジックエラーを修正しました。#25298 (Kruglov Pavel ) 。
LowCardinality 引数を IN で使用したクエリで発生するエラー Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t> を修正しました (このバグは 21.6 で発生しました) 。#25187 を修正。#25290 (Nikolai Kochetov )。
Nullable でないカラムでの joinGetOrNull の誤った動作を修正しました。これにより #24261 も修正されます。#25288 (Amos Bird ).
大きな整数における誤った動作と UBSan の報告を修正しました。以前のバージョンでは、CAST(1e19 AS UInt128) はゼロを返していました。#25279 (alexey-milovidov ).
CSVWithNames フォーマットを使用してカラムの一部を挿入する際に発生していたエラーを修正しました。#25129 の修正です。#25169 (Nikita Mikhaylov ).
テーブルのプロジェクションをFINAL付きのSELECTで使用しないでください。現時点ではサポートされていません。#25163 (Amos Bird ).
21.5 までに更新した後、テーブルのパーティションキーに UUID を使用している場合に発生する可能性があるパーツの損失を修正しました。 (パーティションキーに UUID を使用することは推奨されません。) #25070 を修正しました。 #25127 (Nikolai Kochetov ).
cross join と joined_subquery_requires_alias = 0 を含むクエリで発生するクラッシュを修正しました。#24011 を修正。#25082 (Nikolai Kochetov ).
mapContains 関数で定数 map を扱う際のバグを修正し、empty column was returned by function mapContains エラーが発生する問題を解消しました。#25077 をクローズしました。#25080 (Kruglov Pavel ).
a UInt32 ALIAS a + 1 や b UInt32 MATERIALIZED b のように、自身を参照するカラムを含むテーブルを作成できてしまう問題を修正しました。#24910 、#24292 。#25059 (alesapin )。
空でない GROUP BY キーを持つ集約プロジェクションを使用して、空の キーによる GROUP BY を含むクエリを実行した際に誤った結果が返る問題を修正しました。 #25055 (Amos Bird ).
Protobufフォーマットで分割されたネストメッセージのシリアライゼーションを修正しました。このPRでは #24647 を修正しました。 #25000 (Vitaly Baranov ).
分散クエリの LIMIT/OFFSET 設定を修正 (リモートノードでは無視) 。#24940 (Azat Khuzhin ) 。
Arrow フォーマットで発生する可能性がある heap-buffer-overflow を修正しました。#24922 (Kruglov Pavel ) 。
DiskS3 からファイルを読み取る際に発生する可能性のあったエラー 'Cannot read from istream at offset 0' を修正しました (S3 仮想ファイルシステムは開発中の実験的な機能であり、本番環境では使用しないでください) 。#24885 (Pavel Kovalenko ) 。
Distributed materialized view の JOIN 時に発生する "Missing columns" 例外を修正しました。 #24870 (Azat Khuzhin ).
postgresql互換プロトコルで NULL 値を許可するようにしました。#22622 をクローズ。#24857 (Kseniia Sumarokova ).
mutation がまだメモリに読み込まれていない場合に、mutation の待機中に例外 Mutation was killed がクライアントに送出されることがある不具合を修正しました。 #24809 (alesapin ) 。
乱数生成器の状態のデシリアライズ処理の不具合を修正しました。この不具合により、一部のデータ型 (AggregateFunction(groupArraySample(N), T)) など) が非決定論的に振る舞うことがありました。#24538 (tavplubix ).
他の集約状態から uniqXXXXStates を構築することを禁止しました。#24523 (Raúl Marín ) 。その後、関連する問題の根本原因を実際に取り除くことで、再び許可しました。(alexey-milovidov ).
CREATE .. AS SELECT クエリでのタプルの使用に関する不具合を修正しました。#24464 (Anton Popov ) 。
Buffer テーブルの合計バイト数の計算を修正しました。現在の ClickHouse バージョンでは、バッファの flush 中に total_writes.bytes カウンターが大きく減少しすぎていました。その結果、カウンターのオーバーフローが発生し、flush のしばらく後に totalBytes が 17.44 EB 前後の値を返すことがありました。#24450 (DimasKovas ).
toWeek 関数の単調性に関する誤った情報を修正しました。これにより #24422 を修正しています。このバグは https://github.com/ClickHouse/ClickHouse/pull/5212 で導入され、その後、より高度なパーティションプルーナーによって明らかになりました。#24446 (Amos Bird ).
ユーザー認証をLDAPで管理している場合に、LDAPグループが存在しないローカルロールにマッピングされていると、LDAPロールの (再) マッピング中に発生する可能性があるデッドロックを修正しました。#24431 (Denis Glazachev ).
"multipart/form-data" メッセージでは、boundary の直前の CRLF をその一部として扱うようにしました。#23905 を修正しました。#24399 (Ivan )。
積集合の偽パーツがある場合のパーティションの削除の不具合を修正しました。まれに、現在のブロック番号を上回る mutation バージョンを持つパーツが存在することがありました。#24321 (Amos Bird ) 。
Ordinary データベースから Atomic データベースへ materialized view を移動する際のバグ (RENAME TABLE クエリ) を修正しました。これにより、内部テーブルも materialized view とともに新しいデータベースへ移動されるようになりました。#23926 を修正しました。#24309 (tavplubix ) 。
空のHTTPヘッダーを許可しました。#23901 を修正しました。#24285 (Ivan ).
Memoryテーブルにおけるmutation (ALTER UPDATE/DELETE) が正しく処理されるようになりました。#24274 をクローズしました。#24275 (flynn ).
JOIN 出力のカラムの LowCardinality プロパティが、入力と同じになるようにしました。#23351 、#20315 をクローズしました。#24061 (Vladimir ).
Kafkaテーブルの修正。Engine = Kafka のフェイルオーバー動作において、同じコンシューマーに以前空の割り当てがあった場合、消費を開始できなかった不具合を修正しました。#21118 をクローズしました。#21267 (filimonov ).
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.6、2021-06-05
後方互換性を持たない変更
uniqState / uniqHLL12State / uniqCombinedState / uniqCombined64State は、UUID 型に対して互換性のない状態を生成します。#33607 。
アップグレードに関する注意
zstd 圧縮ライブラリが v1.5.0 に更新されました。レプリケーションで "checksum does not match" というメッセージが表示されることがあります。これらは圧縮アルゴリズムの更新に伴う想定内のメッセージであり、無視して問題ありません。情報提供のためのメッセージであり、何らかの望ましくない動作を示すものではありません。
設定 compile_expressions はデフォルトで有効です。さまざまなシナリオで十分にテストされていますが、サーバー上で望ましくない動作が見られる場合は、この設定を無効にしてみてください。
UUID 型の値は整数と比較できません。たとえば、uuid != 0 と書く代わりに、uuid != '00000000-0000-0000-0000-000000000000' と入力してください。
新機能
Postgresライクなキャスト演算子 (::) を追加しました。例: [1, 2]::Array(UInt8), 0.1::Decimal(4, 4), number::UInt16。 #23871 (Anton Popov ).
大きな整数を本番環境で利用できる状態にしました。UInt128 データ型のサポートを追加しました。Decimal256 データ型の既知の問題を修正しました。辞書で大きな整数をサポートしました。大きな整数に対する gcd/lcm 関数をサポートしました。配列検索および条件関数で大きな整数をサポートしました。LowCardinality(UUID) をサポートしました。generateRandom テーブル関数および clickhouse-obfuscator で大きな整数をサポートしました。スカラ―サブクエリから UUID を返す際のエラーを修正しました。これにより #7834 を修正しました。これにより #23936 を修正しました。これにより #4176 を修正しました。これにより #24018 を修正しました。後方互換性を持たない変更: UUID 型の値は整数と比較できなくなりました。たとえば、uuid != 0 と書く代わりに、uuid != '00000000-0000-0000-0000-000000000000' と記述してください。#23631 (alexey-milovidov ).
Arrow、Parquet、ORC フォーマットでのデータの挿入および選択で、Array データ型をサポートしました。#21770 (taylor12805 ).
テーブルコメントを実装。#23225 をクローズ。#23548 (flynn ) 。
clickhouse-local で、DDLクエリによるDictionaryの作成をサポートしました。#22354 をクローズしました。DETACH DICTIONARY PERMANENTLY のサポートを追加しました。Atomic データベースエンジンで EXCHANGE DICTIONARIES をサポートしました。RENAME DICTIONARY を使用して、データベース間でDictionaryを移動できるようにしました。#23436 (Maksim Kita ).
ClickHouse で Theta Sketch をサポートするため、集約関数 uniqTheta が追加されました。#23894 。#22609 (Ping Yu ) 。
関数 splitByRegexp を追加しました。#24077 (abel-cheng ) 。
配列をパラメータとして受け取り、配列内のすべての要素の積を返す関数 arrayProduct を追加しました。#21613 をクローズします。#23782 (Maksim Kita ) 。
system.stack_trace に thread_name カラムを追加しました。これにより #23256 をクローズします。#24124 (abel-cheng )。
insert_null_as_default = 1 の場合、INSERT ... SELECT および INSERT ... SELECT ... UNION ALL ... クエリで、NULL の代わりにデフォルト値を挿入します。#22832 を解決しました。#23524 (Kseniia Sumarokova ).
clickhouse-local で --progress オプションによる進捗表示のサポートが追加されました。#23196 (Egor Savin ) 。
http Dictionary ソースで、HTTP 圧縮 (Content-Encoding HTTP ヘッダーで判定) のサポートを追加しました。これにより、#8912 が修正されます。#23946 (FArthur-cmd ).
SYSTEM QUERY RELOAD MODEL、SYSTEM QUERY RELOAD MODELS を追加しました。#18722 を解決します。#23182 (Maksim Kita ) 。
EXPLAIN PLAN クエリに設定 json (boolean、デフォルトは 0) を追加しました。有効にすると、クエリの出力は JSON 1 行のみになります。不要なエスケープを避けるため、TSVRaw フォーマットの使用を推奨します。#23082 (Nikolai Kochetov ).
EXPLAIN PIPELINE クエリに設定 indexes (ブール値、デフォルトでは無効) を追加しました。有効にすると、使用された索引と、適用された各索引についてフィルタリングされたパーツ数およびグラニュール数が表示されます。MergeTree* テーブルでサポートされています。#22352 (Nikolai Kochetov ).
LDAP: Active Directory グループを ClickHouse のロールにマッピングする際に使用するユーザー DN の検出機能を実装しました。#22228 (Denis Glazachev ).
連続する行の差分を合計し、タイムスタンプを保存することでマージ時の順序を維持する新しい集約関数 deltaSumTimestamp。 #21888 (Russ Frank ).
安全性は低いものの、Docker 環境で正しく動作する S3 用の IMDS 認証情報プロバイダーを追加しました。#21852 (Vladimir Chebotarev ) 。
indexHint 関数を復活させました。これは #21238 に対応するものです。これにより #9542 が差し戻されます。これで #9540 が修正されます。#21304 (Amos Bird )。
実験的機能
パフォーマンス改善
デフォルトで compile_expressions 設定を有効にしました。この設定を有効にすると、単純な関数や演算子の組み合わせが実行時に LLVM によってネイティブコードへコンパイルされます。#8482 (Maksim Kita , alexey-milovidov ). 注: 問題が発生した場合は、このオプションを無効にしてください。
re2 ライブラリを更新しました。正規表現マッチングのパフォーマンスが向上しました。また、この PR で gcc-11 との互換性も追加されました。#24196 (Raúl Marín ).
ORC 入力フォーマットで、ファイルサイズが非常に大きい場合にメモリ消費の大きいテーブル全体の一括読み込みではなく、ストライプ単位で読み込むようになりました。#23102 (Chao Ma ).
クエリ内の集約関数 sum、count、avg を単一の集約関数に融合するようにしました。この最適化は optimize_fuse_sum_count_avg 設定で制御されます。これは新しい集約関数 sumCount によって実装されています。この関数は sum と count という 2 つのフィールドを持つタプルを返します。#21337 (hexiaoting ).
zstd を v1.5.0 に更新しました。圧縮のパフォーマンスが数パーセント向上しました。#24135 (Raúl Marín ). 注: レプリケーションで "checksum does not match" というメッセージが表示されることがあります。これは圧縮アルゴリズムの更新による想定内のメッセージであり、無視して問題ありません。
Buffer テーブルのパフォーマンスを改善しました: Buffer エンジンで total_bytes/total_rows に対するロックを取得しないようにしました。#24066 (Azat Khuzhin ).
hashed/sparse_hashed 辞書の事前割り当てサポートが復活しました。#23979 (Azat Khuzhin ).
デフォルトで async_socket_for_remote を有効にしました (ファンアウトが大きい分散テーブルへのクエリで使用されるスレッド数を削減します) 。#23683 (Nikolai Kochetov ).
改善
MergeTreeテーブルファミリーに仮想カラム _partition_value を追加しました。これは、パーティションを決定論的に絞り込むために使用できます。これは、ミューテーション用のパーティションマッチャーを実装するために必要です。#23673 (Amos Bird ).
S3ストレージとディスクに region パラメーターが追加されました。#23846 (Vladimir Chebotarev ).
異なるロギングチャンネルごとに、異なるログレベルを設定できるようになりました。#19569 を解決。#23857 (filimonov ).
DateTime 演算で timezone が明示的に指定されていない場合、デフォルトの timezone を保持するようにしました。たとえば、timezone なしの DateTime 型の値に 1 秒を加えても、timezone なしの DateTime のままです。以前のバージョンでは、デフォルトの timezone の値が返り値のデータ型に明示的に設定されるため、DateTime('something') になっていました。これにより #4854 を修正しました。#23392 (alexey-milovidov ).
MySQL ストレージで、データベース名の代わりに空文字列を指定できるようになりました。クエリにはデフォルトのデータベースが使用されます。以前のバージョンでは SELECT クエリではこれが機能しており、今回 INSERT のサポートも追加されました。これにより #19281 がクローズされます。これは Sphinx やその他の MySQL 互換外部データベースを扱う場合に便利です。#23319 (alexey-milovidov ).
quantile(s)TDigestを修正しました。tdunning/t-digest 3.2+ に基づき、シングルトンのセントロイドに対する特別な処理を追加しました。あわせて、以前のバージョンのアルゴリズム実装にあった、セントロイドが過度に圧縮される不具合も修正しました。#23314 (Vladimir Chebotarev ) 。
関数 now64 が、オプションのタイムゾーン引数をサポートするようになりました。#24091 (Vasily Nemkov ) 。
clickhouse-client の対話型モードで、データの途中に表示される進行状況バーが、ターミナル上に表示されているデータの一部を上書きしてしまうことがある問題を修正しました。これにより #19283 をクローズします。 #23050 (alexey-milovidov ).
simdjson でメモリ割り当てが失敗した際にクラッシュする問題を修正しました。 https://github.com/simdjson/simdjson/pull/1567 。ごくまれにしか発生しないバグのため、改善として分類しました。 #24147 (Amos Bird ).
ストレージのシャットダウン時まで Dictionary を保持します (これにより、サーバーのシャットダウン時に Buffer エンジンの最終フラッシュ中に発生する可能性がある external dictionary 'DICT' not found エラーを回避できます) 。#24068 (Azat Khuzhin ) 。
(同一データベース内の) テーブルをシャットダウンする前に Buffer テーブルをフラッシュするようにし、基になるテーブルがすでにデタッチされているために blocks が破棄されること (およびログに Destination table default.a_data_01870 doesn't exist. Block of data is discarded という error が記録されること) を防ぐようにしました。 #24067 (Azat Khuzhin ).
これにより、prefer_column_name_to_alias = 1 では、group by、having、order by においてもカラム名が優先されるようになります。これで #23882 が修正されます。#24022 (Amos Bird ).
DateTime64 で ORDER BY WITH FILL をサポートしました。#24016 (kevin wan ) 。
ReplacingMergeTree で DateTime64 をバージョンカラムとして使えるようになりました。#23992 (kevin wan ) 。
サーバー起動時に、OS 名、カーネルバージョン、CPU アーキテクチャの情報をログに記録するようにしました。#23988 (Azat Khuzhin ).
postgresql Dictionary ソースでテーブルスキーマを指定できるようになりました。#23958 をクローズします。#23980 (Kseniia Sumarokova ).
Enum 要素名のヒントを追加 (タイプミスがある場合に候補名を提示) 。 #17112 をクローズ。 #23919 (flynn ).
辞書について、検出率 (値が見つかった割合) を測定するようになりました (system.dictionaries の found_rate を参照) 。 #23916 (Azat Khuzhin ).
テーブル設定 rabbitmq_queue_settings_list を使用して、特定のキュー設定を追加できるようにしました。 (#23737 および #23918 をクローズ) 。RabbitMQ のセットアップ全体をユーザーが制御できるようにしました。テーブル設定 rabbitmq_queue_consume が 1 に設定されている場合、RabbitMQ テーブルエンジンは指定されたキューにのみ接続し、exchange、キュー、バインディングの宣言など、RabbitMQ コンシューマー側のセットアップを一切行いません。 (#21757 をクローズ) 。RabbitMQ テーブルが削除された際に適切にクリーンアップするようにしました。テーブルによって作成された場合は、そのテーブルが宣言したキューと、それにバインドされたすべての exchange を削除します。#23887 (Kseniia Sumarokova ) 。
system.distribution_queue に broken_data_files/broken_data_compressed_bytes を追加しました。破損としてマークされた、分散テーブルへの非同期挿入用ファイル数のメトリック (BrokenDistributedFilesToInsert) を追加しました。#23885 (Azat Khuzhin ) 。
system.tables へのクエリで、ZooKeeper にアクセスすることはなくなりました。#23793 (Fuwang Hu ) 。
OPTIMIZE クエリで lock_acquire_timeout_for_background_operations が適用されるようにしました。#23623 (Azat Khuzhin ) 。
新しい SYSTEM RESTART DISK SQL コマンドにより、実行時に S3 ディスクの設定を変更できるようになりました。#23429 (Pavel Kovalenko ).
ユーザーが誤って max_distributed_connections を 0 に設定してしまうと、Distributed テーブルに対するすべてのクエリで、"logical error" を含むメッセージの例外がスローされます。しかし、これは実際には想定内の動作であり、logical error ではないため、例外メッセージはやや不正確でした。また、logical error が決して発生しないことを保証する CI 環境内のチェックもトリガーしていました。今後は、max_distributed_connections が 0 に誤設定されている場合、それを取り得る最小値 (1) として扱います。#23348 (Azat Khuzhin ).
デフォルトで min_bytes_to_use_mmap_io を無効にしました。#23322 (Azat Khuzhin ).
join_use_nulls で LowCardinality の NULL 許容をサポートし、#15101 をクローズしました。#23237 (vdimir ) 。
S3 ディスクで、MergeTree のパーツを detached ディレクトリに復元できるようになりました。#23112 (Pavel Kovalenko ) 。
S3 で HTTP 接続が切断された際の再試行。 #22988 (Vladimir Chebotarev ).
MySQL table engine、Dictionary ソース、および MaterializeMySQL の小規模なデータフェッチ向けに、設定 external_storage_max_read_rows と external_storage_max_read_rows を追加しました。#22697 (TCeason ).
MaterializeMySQL (実験的機能) : これまで、SQL の非互換性により MySQL 5.7.9 はサポートされていませんでした。現在は、MySQL パラメータの検証は MaterializeMySQL 側で行うようになりました。#23413 (TCeason ).
分散テーブルでサブカラムを読み取れるようにしました。#24472 (Anton Popov ) 。
CREATE .. AS SELECT クエリでのタプルの扱いを修正しました。#24464 (Anton Popov ) 。
Kafka テーブルで Parquet フォーマットをサポート。 #23412 (Chao Ma ).
バグ修正
パーティションキーおよび主キーで使用する場合は、古い modulo 関数のバージョンを使用します。#23508 をクローズ。#24157 (Kseniia Sumarokova )。以前のリリースでは、これが後方互換性の欠如の原因となっていました。
クエリ SYSTEM RESTART REPLICA または SYSTEM SYNC REPLICA が無限に処理され続ける不具合を修正しました。この問題は、RAM が極端に少ないサーバーで検出されました。#24457 (Nikita Mikhaylov ).
toWeek 関数の単調性の誤りを修正しました。これにより #24422 が修正されます。このバグは #5212 で導入され、その後、より賢いパーティションプルーナーによって顕在化しました。#24446 (Amos Bird )。
積集合の疑似パーツに関するパーティションの削除の不具合を修正しました。まれに、現在のブロック番号を超える mutation バージョンを持つパーツが存在することがありました。#24321 (Amos Bird ).
Ordinary データベースから Atomic データベースへ materialized view を移動する際のバグ (RENAME TABLE クエリ) を修正しました。これにより、内部 table も materialized view とともに新しいデータベースへ移動されるようになりました。#23926 を修正します。#24309 (tavplubix ).
クライアントリクエストで空の HTTP ヘッダーを許可するようにしました。#23901 を修正しました。#24285 (Ivan ).
Memory テーブルの mutation の失敗を修正するため、max_threads = 1 を設定しました。#24274 をクローズしました。#24275 (flynn ).
Memory テーブルの実装にあるタイプミスを修正しました。このバグは #15127 で入り込んだものです。#24192 をクローズします。#24193 (张中南 ) 。
クエリ実行中に HDFS にアクセスできなくなった場合にサーバーが異常終了する問題を修正しました。#24117 をクローズします。#24191 (Kseniia Sumarokova ).
定数条件で Nested カラムを更新した際に発生するクラッシュを修正しました。 #24183 (hexiaoting ).
高負荷時にRBACで発生し得る競合状態を修正しました。このPRでは #24090 、#24134 、. #24176 を修正しています (Vitaly Baranov ) 。
書き込みリクエスト (insert/alter など) を処理できてしまう、部分的にしか初期化されていないテーブルが発生する可能性のあるまれなバグを修正しました。今後、このようなテーブルはreadonlyモードになります。 #24122 (alesapin ).
不具合を修正しました: EXPLAIN PIPELINE で SELECT xxx FINAL を実行した際に、誤ったパイプラインが表示されていました。(hexiaoting ).
WHERE 句で const DateTime 値と DateTime64 カラムを使用した際の問題を修正しました。#24100 (Vasily Nemkov ) 。
merge JOIN で発生するクラッシュを修正し、#24010 をクローズしました。#24013 (vdimir ).
一部のALTER PARTITIONクエリで、レプリケーションキューにPart A intersects previous part BおよびUnexpected merged part C intersecting drop range Dエラーが発生することがありました。この問題を修正しました。#23296 。#23997 (tavplubix ).
外部 GROUP BY およびオーバーフロー行 (つまり、SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having' のようなクエリ) で発生する SIGSEGV を修正しました。#23962 (Azat Khuzhin ).
ソースに重複がある CACHE Dictionary におけるキー関連メトリクスの計上を修正しました (DictCacheKeysRequestedMiss のオーバーフローの原因となる問題) 。 #23929 (Azat Khuzhin ).
PostgreSQL engine の接続プール実装を修正しました。#23897 をクローズしました。#23909 (Kseniia Sumarokova ).
GROUP BY と、通常の関数でラップされた aggregate function を含む場合の distributed_group_by_no_merge = 2 の問題を修正しました (#23546 で壊れていました) 。distributed_group_by_no_merge = 2 を window functions とともに使おうとした場合は、例外を投げるようにしました。window functions を含む queries では optimize_distributed_group_by_sharding_key を無効にしました。#23906 (Azat Khuzhin )。
s3 テーブル関数の修正: HTTP エラーの処理を改善しました。以前は HTTP エラーのレスポンス本文が無視されていました。#23844 (Vladimir Chebotarev ).
s3 テーブル関数の修正: URI の処理を改善しました。+ 記号を含む URL との非互換性を修正し、このようなキーを持つデータを以前は読み取れなかった問題を解消しました。#23822 (Vladimir Chebotarev ).
GLOBAL IN/JOIN と use_hedged_requests を使用するクエリで発生するエラー Can't initialize pipeline with empty pipe を修正しました。#23431 。#23805 (Nikolai Kochetov ).
materialized view で参照されている場合に CLEAR COLUMN が機能しない問題を修正しました。#23764 をクローズしました。 #23781 (flynn ).
Values フォーマット使用時に HDFS から読み込む際、解放済みのヒープメモリを使用してしまう問題を修正しました。 #23761 (Kseniia Sumarokova ).
Distributed への INSERT 時に発生しうる "Cannot schedule a task" error (何らかの例外が発生していた場合) を回避。 #23744 (Azat Khuzhin ).
古い状態になった ReplicatedMergeTree レプリカの復旧に関する不具合を修正しました。レプリカの停止中に ALTER クエリが実行されると、一部のメタデータ更新がそのレプリカで無視されることがありました。#23742 (tavplubix ).
Join と WITH TOTALS に関する不具合を修正し、#17718 をクローズしました。#23549 (vdimir ).
フィルタのプッシュダウン最適化後に発生する可能性があった、UNION を含むクエリでの Block structure mismatch エラーを修正しました。#23029 を修正しました。#23359 (Nikolai Kochetov ) 。
optimize_skip_unused_shards_rewrite_in 設定が有効な場合に、型変換を追加しました。これにより、MSan の報告が修正されます。 #23219 (Azat Khuzhin ).
ネストされたサブカラムの更新時に不足していたチェックを追加し、issue #22353 をクローズしました。#22503 (hexiaoting )。
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.5、2021-05-20
後方互換性を持たない変更
整数が浮動小数点データ型で正確に表現できない場合の、整数と浮動小数点数の比較方法を変更しました。新しいバージョンでは丸め誤差が発生するため、比較結果は false になります。例: 9223372036854775808.0 != 9223372036854775808。これは、9223372036854775808 という値を浮動小数点数で正確に表現できないためです (その結果、9223372036854775808.0 は 9223372036854776000.0 に丸められます) 。一方、以前のバージョンではこれらは等しいと判定されていました。これは、浮動小数点数 9223372036854776000.0 を UInt64 に変換し直すと 9223372036854775808 になるためです。参考までに、Python でもこれらの数値は等しいものとして扱われます。ただし、この挙動は CPU モデルに依存していました (範囲外の一部の数値では AMD64 と AArch64 で結果が異なります) 。そのため、比較をより正確にしました。今後は、整数が浮動小数点型で正確に表現できる場合にのみ、整数と浮動小数点数を等しいものとして扱います。#22595 (alexey-milovidov ).
単一の Tuple 引数に対する argMin と argMax のサポートを削除しました。このコードはメモリセーフではありませんでした。この機能は誤って追加されたもので、利用者に混乱を招いていました。これらの関数は、今後別の名前で再導入される可能性があります。これにより #22384 を修正し、#17359 を取り消します。#23393 (alexey-milovidov ).
新機能
関数 dictGetChildren(dictionary, key)、dictGetDescendants(dictionary, key, level) を追加しました。dictGetChildren は、子のインデックスをすべて Array として返します。これは dictGetHierarchy の逆変換です。dictGetDescendants は、dictGetChildren を level 回再帰的に適用した場合と同様に、すべての子孫を返します。level の値が 0 の場合は無限大と同等です。dictGetHierarchy、dictIsIn 関数の性能も改善しました。Closes #14656 . #22096 (Maksim Kita ).
関数 dictGetOrNull を追加しました。これは dictGet と同様に動作しますが、Dictionary 内にキーが見つからない場合は Null を返します。Closes #22375 . #22413 (Maksim Kita ).
table function s3Cluster を追加しました。これにより、指定したクラスターの各ノードで s3 上のファイルを並列に処理できます。#22012 (Nikita Mikhaylov ).
MySQL/PostgreSQL テーブルエンジン / table function で、レプリカと分片をサポートしました。SELECT * FROM mysql('host{1,2}-{1|2}', ...) のように記述できます。Closes #20969 . #22217 (Kseniia Sumarokova ).
ALTER TABLE ... FETCH PART ... クエリを追加しました。これは FETCH PARTITION に似ていますが、1 つの part だけを fetch します。#22706 (turbo jason ).
Distributed table に対する再帰クエリの深さを制限する設定 max_distributed_depth を追加しました。Closes #20229 . #21942 (flynn ).
パフォーマンス改善
AVX2 向けの動的ディスパッチにより、intDiv のパフォーマンスを改善しました。これにより #22314 をクローズしました。#23000 (alexey-milovidov )。
ローカルファイル以外のソース (例: URL) に対する ArrowStream 入力フォーマットの読み取りパフォーマンスを改善しました。#22673 (nvartolomei )。
localhost とやり取りする場合 (clickhouse-client 使用時、またはサーバー間で分散クエリを実行する場合) に、ネイティブプロトコル経由の圧縮をデフォルトで無効化しました。これにより、一部のインポート/エクスポート処理のパフォーマンスが向上する場合があります。これにより #22234 をクローズしました。#22237 (alexey-milovidov )。
分散クエリでは、IN 句の右辺からその分片に属さない値を除外するようにしました (optimize_skip_unused_shards_rewrite_in で有効。デフォルトで有効ですが、引き続き optimize_skip_unused_shards が必要です) 。#21511 (Azat Khuzhin )。
File 系のテーブルエンジンと、Parquet、Arrow、ORC などの列指向フォーマットで、カラムの一部を読み取る際のパフォーマンスを改善しました。これにより #issue:20129 をクローズしました。#21302 (keenwolf )。
バージョン 21.1 より前と同様に、より多くの条件を PREWHERE に移動できるようにしました (内部ヒューリスティクスの調整) 。移動される条件の数が不十分だと、パフォーマンスが低下する可能性がありました。#23397 (Anton Popov )。
ODBC 接続のパフォーマンスを改善し、バックログに残っていた未解決の問題をすべて修正しました。Poco::ODBC の代わりに nanodbc ライブラリを使用するようにしました。#9678 をクローズしました。ODBC テーブルエンジンで DateTime64 と Decimal* をサポートしました。#21961 をクローズしました。キリル文字のテキストが切り詰められる問題を修正しました。#16246 をクローズしました。ODBC bridge に接続プールを追加しました。#21972 (Kseniia Sumarokova )。
改善
バグ修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.4
ClickHouse リリース 21.4.1 2021-04-12
後方互換性を持たない変更
toStartOfIntervalFunction は、時間インターバルを午前 0 時に揃えるようになります (以前のバージョンでは Unix epoch の開始時点に揃えられていました) 。たとえば、toStartOfInterval(x, INTERVAL 11 HOUR) は 1 日を 00:00:00..10:59:59、11:00:00..21:59:59、22:00:00..23:59:59 の 3 つのインターバルに分割します。この動作のほうが実運用のニーズに適しています。これにより #9510 が修正されます。#22060 (alexey-milovidov ).
graphite のロールアップ設定では、Age と Precision は保持期間が進むごとに増加している必要があります。現在はこれが検証され、不正な設定では例外が発生します。#21496 (Mikhail f. Shiryaev ).
カスタムトップレベルドメインのリストに含まれる 3 階層以上のドメインに対して、cutToFirstSignificantSubdomainCustom() / firstSignificantSubdomainCustom() が誤った結果を返す問題を修正しました。これらのカスタムトップレベルドメインに一致する入力ドメインでは、第 3 レベルドメインが最初の有意なドメインと見なされていました。現在は修正されています。この変更により、たとえばこの関数を分片キーで使用している場合は非互換が生じる可能性があります。#21946 (Azat Khuzhin ).
テーブル system.dictionaries のカラム keys は、カラム key.names および key.types に置き換えられました。system.dictionaries テーブルのカラム key.names、key.types、attribute.names、attribute.types は、Dictionary がロードされていなくても参照できます。#21884 (Maksim Kita ).
ALTER TABLE ATTACH PART[ITION] コマンドを処理するレプリカは、他のレプリカからデータを取得する前に、自身の detached/ フォルダ内を検索するようになりました。実装の詳細として、replicated log に新しいコマンド ATTACH_PART が導入されています。パーツはチェックサムに基づいて検索および比較されます。#18978 (Mike Kot ). 注 :
ATTACH PART[ITION] クエリは、クラスターのアップグレード中には動作しない場合があります。
新しいバージョンで ALTER ... ATTACH クエリを実行した後は、古い ClickHouse バージョンへロールバックできません。古いサーバーでは replicated log の ATTACH_PART エントリを処理できず、失敗するためです。
このバージョンでは、空の <remote_url_allow_hosts></remote_url_allow_hosts> は、以前のバージョンでは何もしなかったのに対し、リモートホストへのすべてのアクセスをブロックします。以前の動作を維持したい場合は、設定ファイルに空の remote_url_allow_hosts 要素があれば削除してください。#20058 (Vladimir Chebotarev ).
新機能
DateTime64 の範囲を拡張し、1925 年から 2283 年までの日付をサポートするようにしました。ゼロ日付 (1970-01-01) 付近での DateTime のサポートも改善しました。#9404 (alexey-milovidov , Vasily Nemkov )。ただし、拡張された日付範囲では、すべての時刻・日付関数が動作するわけではありません。
事前設定済みユーザーおよびHTTPリクエスト (GSS-SPNEGO) 向けのKerberos認証のサポートを追加しました。#14995 (Denis Glazachev ).
別名ではなく元のカラム名を使用するための prefer_column_name_to_alias 設定を追加しました。これは、一般的なデータベースの別名規則との互換性を高めるために必要です。#9715 および #9887 に対応しています。#22044 (Amos Bird ) 。
関数 dictGetChildren(dictionary, key)、dictGetDescendants(dictionary, key, level) を追加しました。関数 dictGetChildren は、すべての子要素をインデックスの配列として返します。これは dictGetHierarchy の逆変換です。関数 dictGetDescendants は、dictGetChildren を level 回再帰的に適用した場合と同様に、すべての子孫要素を返します。level の値が 0 の場合は無限大と同等です。#14656 をクローズしました。#22096 (Maksim Kita ).
executable_pool Dictionary ソースを追加しました。#14528 をクローズしました。#21321 (Maksim Kita ).
dictionary table function を追加しました。Dictionary engine と同様に動作します。#21560 をクローズしました。#21910 (Maksim Kita ) 。
PolygonDictionary 属性で Nullable 型を利用できるようになりました。#21890 (Maksim Kita ) 。
関数 dictGet、dictHas は、DDL で作成された辞書でデータベース名が指定されていない場合、現在のデータベース名を使用します。#21632 をクローズしました。#21859 (Maksim Kita ) 。
関数 dictGetOrNull を追加しました。dictGet と同様に動作しますが、Dictionary 内でキーが見つからない場合は Null を返します。#22375 をクローズしました。#22413 (Maksim Kita ).
ComplexKeyCache、SSDCache、SSDComplexKeyCache 辞書に非同期更新を追加しました。Cache、ComplexKeyCache、SSDCache、SSDComplexKeyCache 辞書で Nullable 型をサポートしました。dictGet、dictGetOrDefault 関数で複数属性の取得をサポートしました。#21517 を修正しました。#20595 (Maksim Kita )。
RangeHashedDictionary で dictHas 関数をサポートしました。#6680 を修正。#19816 (Maksim Kita ).
DateTime または DateTime64 データ型の timezone 名を返す関数 timezoneOf を追加しました。これによって #9959 はクローズされません。関数名の不整合を修正し、timezone と timeZone、toTimezone と toTimeZone、および timezoneOf と timeZoneOf の別名を追加しました。#22001 (alexey-milovidov ).
CREATE/ALTER USER コマンドに、新しい省略可能な句 GRANTEES を追加しました。これは、このユーザー自身に grant option 付きで必要なすべてのアクセス権が付与されている場合に、このユーザーから権限付与を受けられるユーザーまたはロールを指定します。デフォルトでは GRANTEES ANY が使用されます。これは、grant option を持つユーザーが誰にでも権限を付与できることを意味します。構文: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]。#21641 (Vitaly Baranov ).
system.clusters に新しいカラム slowdowns_count を追加しました。hedged request の使用時には、このレプリカの応答が遅いために別のレプリカへ切り替えた回数が表示されます。また、system.clusters に errors_count の実際の値も表示されるようになりました。#21480 (Kruglov Pavel ).
MergeTree* エンジンに _partition_id 仮想カラムを追加しました。_partition_id によるパーティションのプルーニングが可能になりました。パーティション ID 文字列を計算する partitionID() 関数を追加しました。#21401 (Amos Bird ) 。
指定したCIDRネットワークプレフィックスにIPv4またはIPv6アドレスが含まれているかを判定する関数 isIPAddressInRange を追加しました。#21329 (PHO ).
新しいSQLコマンド ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name' を追加しました。このコマンドは、すべてのディスクから凍結されたパーティションを適切に削除するために必要です。#21142 (Pavel Kovalenko )。
JOIN におけるキー型の暗黙的な変換をサポートしました。#19885 (Vladimir ).
実験的機能
浮動小数点型の RANGE OFFSET フレーム (ウィンドウ関数向け) をサポートしました。lag/lead に似ていますが、ウィンドウフレームを考慮する lagInFrame/leadInFrame ウィンドウ関数を実装しました。フレームが between unbounded preceding and unbounded following の場合、これらは lag/lead と同一です。これにより #5485 を解決しました。#21895 (Alexander Kuzmenkov ).
S3ストレージ上の ReplicatedMergeTree に対するゼロコピーレプリケーション。#16240 (ianton-ru ).
既存の S3ディスクを、バックアップ/復元機能を備えたスキーマへ移行できるようにしました。#22070 (Pavel Kovalenko ).
パフォーマンス改善
clickhouse-local など全体で、並列フォーマットをサポートしました。 #21630 (Nikita Mikhaylov ).
CSVWithNames および TSVWithNames フォーマットでの並列パースをサポートしました。これにより #21085 を解決します。 #21149 (Nikita Mikhaylov ).
64 MiB 以上のファイル範囲について、mmap IO による読み取りを有効にしました (設定 min_bytes_to_use_mmap_io) 。中程度の性能向上が見込まれます。 #22326 (alexey-milovidov ).
min_bytes_to_use_mmap_io 設定で読み取るファイル向けに cache を追加しました。設定値が小さい場合でも、頻繁な mmap/munmap 呼び出しとそれに伴うページフォールトを回避できるため、大幅な (2 倍以上の) 性能向上が得られます。なお、mmap IO には本番環境での信頼性を下げる大きな欠点があります (例: 障害のあるディスクでのハングや SIGBUS、制御しづらい memory usage) 。それでも、ベンチマークでは有効です。 #22206 (alexey-milovidov ).
codec NONE 使用時の不要なデータコピーを回避しました。なお、codec NONE はたいてい有用ではないため、常に圧縮 (デフォルトでは LZ4) を使用することを推奨します。一般的な認識に反して、圧縮を無効にしても性能が向上するとは限らず、逆効果になることもあります。NONE codec が有用なのは次のような場合です: - データが圧縮できない場合。 - 合成ベンチマーク。 #22145 (alexey-milovidov ).
max_rows_to_group_by が小さく、group_by_overflow_mode='any' の場合の GROUP BY を高速化しました。 #21856 (Nikolai Kochetov ).
SELECT ... FINAL ... WHERE のようなクエリの性能を最適化しました。これにより、FINAL を含むクエリでは、sorting key に含まれるカラムを PREWHERE に移動できるようになりました。 #21830 (foolchi ).
memcpy を別の実装に置き換えることで性能を改善しました。これにより #18583 を解決します。 #21520 (alexey-milovidov ).
sorting key 順での aggregation の性能を改善しました (設定 optimize_aggregation_in_order が有効な場合) 。 #19401 (Anton Popov ).
改善
PostgreSQL のテーブル/データベースエンジンおよび Dictionary ソース向けの接続プールを追加しました。これにより #21444 が修正されるはずです。#21839 (Kseniia Sumarokova ).
postgres ストレージ/テーブル関数で、デフォルト以外のテーブルスキーマをサポートしました。#21701 をクローズしました。#21711 (Kseniia Sumarokova ).
Postgres Dictionary ソースで、レプリカの優先順位に対応しました。#21710 (Kseniia Sumarokova ) 。
新しいMergeTree設定 min_bytes_to_rebalance_partition_over_jbod を導入しました。これにより、JBODボリューム上の異なるディスクに新しいパーツを均等に割り当てられるようになります。#16481 (Amos Bird ) 。
対応するクエリに対して、system.query_log の query_kind カラムに Grant、Revoke、System の値を追加しました。 #21102 (Vasily Nemkov ).
レプリケーションに使用されるHTTP接続のタイムアウトを、他のHTTPタイムアウトとは別に設定できるようにしました。#20088 (nvartolomei ).
サーバーがブロックを書き込んでいる際に例外が発生した場合、クライアントに表示される例外メッセージを改善しました。以前のバージョンでは、クライアントが Data compressed with different methods のような誤解を招くメッセージを受け取ることがありました。#22427 (alexey-milovidov ).
Directory tmp_fetch_XXX already exists エラーを修正しました。このエラーは、part の fetch が失敗した後に発生することがありました。既に存在する場合は、一時 fetch ディレクトリを削除します。#14197 を修正しました。#22411 (nvartolomei ).
UInt256 引数を持つ関数 range の MSan レポートを修正 (大きな整数のサポートは実験的です) 。これにより #22157 をクローズしました。#22387 (alexey-milovidov )。
system.processes テーブルに current_database カラムを追加しました。これには、そのクエリの現在のデータベースが格納されます。#22365 (Alexander Kuzmenkov ).
clickhouse-client に、大文字・小文字を区別しない履歴検索/ナビゲーション機能と、サブワード単位での移動機能を追加しました。 #22105 (Amos Bird ).
(NULL, NULL) のような NULL のタプルが IN 演算子の左辺にあり、右辺が非 NULL のタプルである場合、たとえば SELECT (NULL, NULL) IN ((0, 0), (3, 1)) は、互換性のない型に関する例外をスローするのではなく、0 を返すようになりました。この expression は、SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1) のような式の最適化によって現れることもあります。これにより #22017 がクローズされます。#22063 (alexey-milovidov ).
simdjson の使用バージョンを 0.9.1 に更新しました。これにより #21984 が修正されます。#22057 (Vitaly Baranov ).
CONNECTION_ID() および VERSION() 関数に、大文字と小文字を区別しない別名を追加しました。これにより #22028 の問題を修正しました。#22042 (Eugene Klimov ).
各イベントが一度だけ計算されるようにするオプション strict_increase を windowFunnel 関数に追加しました (#21835 を解決) 。 #22025 (Vladimir ).
MergeTree テーブルのパーティションキーに Date または DateTime カラムが含まれず、DateTime64 カラムがちょうど 1 つだけ含まれている場合、その値が system.parts および system.parts_columns テーブルの min_time カラムと max_time カラムに表示されるようになりました。system.parts_columns テーブルに min_time カラムと max_time カラムを追加しました (これまで system.parts テーブルとの不整合がありました) 。これにより #18244 を解決しました。#22011 (alexey-milovidov ).
clickhouse-copier で、補助テーブルから宛先へパーティションを移動するための replication_alter_partitions_sync=1 設定をサポートしました。デフォルトのタイムアウト値を短縮しました。#21911 を修正しました。#21912 (turbo jason )。
システムテーブルに、EmbeddedRocksDB テーブルのデータディレクトリのパスを表示する。 #21903 (tavplubix ).
プロファイルイベント HedgedRequestsChangeReplica を追加し、read data timeout の単位を秒からミリ秒に変更しました。#21886 (Kruglov Pavel ) 。
DiskS3 (開発中の実験的機能) 。宛先が空でなく、cacheディスクを使用している場合にディレクトリを移動できない不具合を修正しました。#21837 (Pavel Kovalenko ).
Web UI における Array および Map データ型のフォーマットを改善しました。 #21798 (alexey-milovidov ).
設定が更新された場合にのみ、クラスターを更新するようにしました。 #21685 (Kruglov Pavel ).
分散DDLクエリでクエリ設定およびセッション設定が伝播されるようになりました。これを有効にするには、distributed_ddl_entry_format_version を 2 に設定します。distributed_ddl_output_mode 設定が追加されました。サポートされるモードは、none、throw (デフォルト) 、null_status_on_timeout、never_throw です。Replicated データベースエンジンに関するその他の修正と改善。#21535 (tavplubix ).
PODArray が、16 の約数でも倍数でもない要素サイズでインスタンス化された場合、バッファオーバーフローが発生する可能性がありました。現行リリースにはこの不具合はありません。#21533 (alexey-milovidov ).
system.errors に last_error_time/last_error_message/last_error_stacktrace/remote カラムが追加されました。#21529 (Azat Khuzhin ) 。
visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String} の別名として simpleJSONExtract/simpleJSONHas を追加しました。#21383 を修正しました。#21519 (fastio ).
optimize_skip_unused_shards における sharding key の値の数を制限する設定 optimize_skip_unused_shards_limit を追加しました。#21512 (Azat Khuzhin ).
最後のクエリの後に余分な空白やコメントがあっても clickhouse-format が例外を投げないよう改善し、データを含む ASTInsertQuery をフォーマットする際には、分かりやすいメッセージとともに早い段階で例外を投げるようにしました。 #21311 (flynn ).
データ型 Map での整数キーのサポートを改善しました。#21157 (Anton Popov ).
MaterializeMySQL: 接続が失われた場合、MySQL への再接続を試みるようにした。 #20961 (Håvard Kvålen ).
CROSS JOIN を INNER JOIN に書き換えられるケースをさらに増やしました。#20392 (Vladimir ).
optimize_on_insert 設定が有効な場合、INSERT 時に空のパーツを作成しないようにしました。#20304 の修正です。#20387 (Kruglov Pavel ).
MaterializeMySQL: _version カラムに minmax スキッピング索引を追加しました。#20382 (Stig Bakken ).
clickhouse-format に --backslash オプションを追加しました。整形済みクエリの各行末にバックスラッシュを追加できます。 #21494 (flynn ).
これにより、すでにカバーされているパートに対して mutation を実行しようとしても、ClickHouse は LOGICAL_ERROR 例外をスローしなくなりました。#22013 を修正しました。#22291 (alesapin ).
バグ修正
競合状態が発生する可能性を防ぐため、HedgedConnections でパケット受信処理をキャンセルする前に epoll から socket を削除するようにしました。#22161 を修正しました。#22443 (Kruglov Pavel ).
並列パースルーチンに (不足していた) メモリ使用量の計上を追加しました。以前のバージョンでは、結果セットに非常に大きなデータブロックが含まれる場合、OOM が発生する可能性がありました。これにより #22008 を修正しました。#22425 (alexey-milovidov )。
SELECT に定数の WHERE 条件があり、かつソーステーブルに名前が数字のカラムが存在する場合に発生する可能性のある例外を修正しました。 #22270 (LiuNeng ).
use_hedged_requests=0 および async_socket_for_remote=1 におけるクエリのキャンセルの問題を修正しました。 #22183 (Azat Khuzhin ).
InterserverIOHTTPHandler の未捕捉の例外を修正しました。 #22146 (Azat Khuzhin ).
設定に http_port が含まれていない場合の Docker エントリポイントを修正しました。 #22132 (Ewout ).
JOIN、TOTALS、arrayJoin におけるエラー Invalid number of rows in Chunk を修正しました。#19303 をクローズしました。#22129 (Vladimir ).
Kafka からメッセージをポーリングするために使われていたバックグラウンドスレッドプールの名前を修正しました。問題のあるスレッドプールを使用している Kafka engine は、メッセージキューからメッセージを消費しなくなっていました。 #22122 (fastio ).
ReplicatedMergeTree テーブルエンジンにおける OPTIMIZE および ALTER クエリの待機処理を修正しました。これにより、テーブルがデタッチされた場合や再起動された場合でも、クエリがハングしなくなりました。#22118 (alesapin ).
問題のある Linux カーネルでは、async_socket_for_remote/use_hedged_requests を無効化しました。 #22109 (Azat Khuzhin ).
Docker entrypoint: LOG_PATH が空の場合に . に対して chown を実行しないようにしました。#22100 をクローズ。#22102 (filimonov ).
関数 decrypt では、AEAD モードで暗号化されたデータの最小サイズを確認する check が不足していました。これにより #21897 が解消されます。 #22064 (alexey-milovidov ) 。
まれに、CollapsingMergeTree のマージによって、index_granularity + 1 行を持つグラニュールが作成されることがあります。そのため、#18928 で追加された内部チェック (21.2 および 21.3 に影響) が、Incomplete granules are not allowed while blocks are granules size というエラーで失敗することがありました。このエラーにより、パーツをマージできなくなっていました。#21976 (Nikolai Kochetov ) 。
ハッシュ型のexternal dictionariesのloading中にmemory usageが大幅に増加するおそれのある #15454 をrevertしました。これにより #21935 はクローズされます。 #21948 (Maksim Kita ).
ヘッジ接続の重複を防止しました (Unknown packet 9 from server エラー) 。#21941 (Azat Khuzhin ).
一部のケースで、"multipart/form-data" コンテンツタイプの HTTP POST リクエストを正しく読み取れない問題を修正しました。 #21936 (Ivan ).
クエリにウィンドウ関数が含まれており、主キー順での読み取り最適化が適用される場合に ORDER BY の結果が誤る問題を修正しました。 #21828 を修正。 #21915 (Alexander Kuzmenkov ).
catboost モデルの初回実行時に発生するデッドロックを修正しました。#13832 をクローズしました。#21844 (Kruglov Pavel ) 。
WHERE または HAVING 条件が GROUP BY より前にプッシュされた場合に発生する可能性がある、誤ったクエリ結果 (およびクラッシュの可能性) を修正しました。 #21773 。 #21841 (Nikolai Kochetov ).
WriteBufferFromS3 におけるエラー処理とログを改善しました。#21836 (Pavel Kovalenko ) 。
二段階集約の使用時に、combinator Distinct を持つ集約関数で発生する可能性があるクラッシュを修正しました。これは #18365 のフォローアップ修正です。本番環境でのみ再現されます。 #21818 (Amos Bird ).
スカラーサブクエリの索引解析を修正しました。これにより、#18896 で導入された不具合 #21717 が修正されます。#21766 (Amos Bird ) 。
ALTER MODIFY COLUMN クエリで、サイズ (32 bit または 64 bit) が変わらない Decimal カラムの型を変更しても反映されない ReplicatedMerge テーブルエンジンの不具合を修正しました。 #21728 (alesapin ).
ReplicatedMergeTree で OPTIMIZE と DROP を同時に実行した際に、無限に待機する可能性がある問題を修正しました。 #21716 (Azat Khuzhin ).
型 Map に対して、定数整数引数を使用した場合の関数 arrayElement を修正しました。 #21699 (Anton Popov ).
存在しない属性に対して access_to_key_from_attributes を使用した ip_trie で発生する SIGSEGV を修正しました。#21692 (Azat Khuzhin ) 。
サーバーは、DDLWorker と辞書の初期化が完了してからでないと、接続を受け付けないようになりました。#21676 (Azat Khuzhin ).
Join 型のテーブルのキーに対する型変換を追加しました (以前は SIGSEGV の原因となっていました) 。 #21646 (Azat Khuzhin ).
async_socket_for_remote=1 での分散リクエストのキャンセル処理 (たとえば、複数の分片に対する limit 付きの単純な select、つまり select * from remote('127.{2,3}', system.numbers) limit 100) を修正しました。#21643 (Azat Khuzhin ).
水平マージ向けの fsync_part_directory を修正しました。#21642 (Azat Khuzhin ).
外部データベースエンジン (MySQL、PostgreSQL) 向けクエリの WHERE 句で、結合先テーブルの不明なカラムを削除しました。close #14614 、close #19288 (重複) 、close #19645 (重複) 。#21640 (Vladimir ) 。
std::terminate は、データを S3 に書き込む際にエラーが発生すると呼び出されていました。#21624 (Vladimir ).
optimize_skip_unused_shards が有効で、使用される分片が 0 個の場合に発生する可能性がある Cannot find column エラーを修正しました。#21579 (Azat Khuzhin ).
クエリに定数の WHERE 条件があり、かつ設定 optimize_skip_unused_shards が有効な場合、すべての分片がスキップされ、クエリが誤って空の結果を返すことがありました。#21550 (Amos Bird ).
table function clusterAllReplicas が誤った _shard_num を返す不具合を修正しました。#21481 をクローズしました。#21498 (flynn ).
設定更新後もS3テーブルが古い認証情報を保持する問題を修正しました。#21457 (Grigory Pervakov ) 。
Poco の SecureSocket 内の SSL オブジェクトで発生していた競合状態を修正しました。 #21456 (Nikita Mikhaylov ).
Kafka 向けの Avro フォーマットのパースを修正しました。#21437 を修正。#21438 (Ilya Golshtein ) 。
セキュアソケットでの送受信タイムアウトとノンブロッキング読み取りを修正。 #21429 (Kruglov Pavel ).
force_drop_table フラグが MATERIALIZED VIEW で機能しない問題を修正しました。#18943 の修正です。#20626 (tavplubix ).
PredicateRewriteVisitor での名前の衝突を修正しました。これにより、full join 後に WHERE で誤ったフィルタリングが行われる問題が発生していました。#20497 をクローズしました。#20622 (Vladimir ).
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.3 (LTS)
ClickHouse リリース v21.3 (2021-03-12)
後方互換性を持たない変更
以前の構文で table TTL を使って MergeTree テーブルを作成することは、単に無視されてしまうため、現在は許可されていません。古いテーブルの Attach は引き続き可能です。#20282 (alesapin ).
今後、大文字小文字を区別しないすべての関数名は正規の表記に書き換えられます。これはプロジェクションのクエリルーティング (今後追加予定の機能) に必要です。#20174 (Amos Bird ).
TTL の式が関数で、かつそれが ORDER BY キーと同じ場合でも TTL を作成できるように修正しました。これにより、GROUP BY を使う TTL で、主キーのカラムにカスタム集約を設定できるようになりました。後方互換性なし: GROUP BY に含まれず、明示的にも設定されていない主キーのカラムには、TTL の期限切れ時に max ではなく any 関数が適用されるようになりました。また、WHERE または GROUP BY とともに TTL を使用している場合、ローリングアップデート中のマージ時に例外が発生することがあります。#15450 (Anton Popov ).
新機能
file engine の設定 engine_file_empty_if_not_exists および engine_file_truncate_on_insert を追加しました。 #20620 (M0r64n ).
連続する行の差分を合計する aggregate function deltaSum を追加しました。 #20057 (Russ Frank ).
system.part_log table に新しい event_time_microseconds カラムを追加しました。 #20027 (Bharat Nallan ).
UTC からのオフセットを秒単位で返す timezoneOffset(datetime) function を追加しました。これにより #issue:19850 をクローズします。 #19962 (keenwolf ).
分散テーブルから特定の分片にデータを insert できるようにする設定 insert_shard_id を追加しました。 #19961 (flynn ).
big integer をサポートするように function reinterpretAs を更新しました。 #19691 を修正します。 #19858 (Maksim Kita ).
S3 client で Server Side Encryption Customer Keys (x-amz-server-side-encryption-customer-(key/md5) header) をサポートするようになりました。the link を参照してください。 #19428 をクローズします。 #19748 (Vladimir Chebotarev ).
executable Dictionary ソース向けに implicit_key オプションを追加しました。これにより、レコードが入力オプションと同じ順序で到着する場合、各レコードごとに key を出力する必要がなくなります。 #14527 を実装します。 #19677 (Maksim Kita ).
quota type query_selects および query_inserts を追加しました。 #19603 (JackyWoo ).
function extractTextFromHTML を追加しました。 #19600 (zlx19950903 ), (alexey-milovidov ).
MergeTree* engine を使用する table に、クエリの Concurrency 制御のための table レベル設定が 2 つ追加されました。設定 max_concurrent_queries は、この table に関連する同時実行クエリ数を制限します。設定 min_marks_to_honor_max_concurrent_queries は、クエリが少なくともこの数の marks を読み取る場合にのみ前者の設定を適用します。 #19544 (Amos Bird ).
user_files directory から file を String として読み込む file function を追加しました。これは file table function とは異なります。これにより #issue:18851 を実装します。 #19204 (keenwolf ).
実験的機能
実験的な Replicated データベースエンジンを追加しました。これは複数のホスト間で DDL クエリをレプリケートします。#16193 (tavplubix ).
allow_experimental_window_functions = 1 で有効になる、ウィンドウ関数の実験的サポートを導入しました。これは初期段階のアルファ品質の実装であり、本番環境での使用には適しておらず、今後のリリースで後方互換性のない変更が加えられる予定です。サポートされている機能の一覧については、ドキュメント を参照してください。#20337 (Alexander Kuzmenkov ).
DiskS3 のメタデータファイルをバックアップ/リストアできるようになりました。#18377 (Pavel Kovalenko ).
パフォーマンス改善
リモートクエリ向けのヘッジドリクエスト。use_hedged_requests を有効にすると (デフォルトはオフ) 、クエリに対して異なるレプリカへ複数の接続を確立できるようになります。既存のレプリカへの接続が hedged_connection_timeout 以内に確立されなかった場合、または receive_data_timeout 以内にデータを受信できなかった場合は、新しい接続が有効になります。クエリは、最初に空でない Progress パケット (allow_changing_replica_until_first_data_packet の場合は Data パケット) を送信した接続を使用し、他の接続はキャンセルされます。max_parallel_replicas > 1 のクエリをサポートしています。#19291 (Kruglov Pavel )。これにより、非常に大規模なクラスターでテールレイテンシを大幅に低減できます。
テーブルに行レベルセキュリティの式が指定されている場合の PREWHERE サポートを追加し、対応する最適化も有効にしました。#19576 (Denis Glazachev ).
設定 distributed_aggregation_memory_efficient はデフォルトで有効です。これにより、メモリ使用量が削減され、分散クエリのパフォーマンスが向上します。 #20599 (alexey-milovidov ).
複数の固定長キーを用いる GROUP BY の性能を改善しました。 #20472 (alexey-milovidov ).
より厳格なエイリアシングにより、集計関数のパフォーマンスを改善。 #19946 (alexey-milovidov ).
パイプラインを簡素化し、これによりパイプラインのスケジューリングにおけるロック競合を減らすことで、極端なケース (読み取り速度が 50 GB/秒級に達する場合) での Memory テーブルからの読み取りを高速化しました。 #20468 (alexey-milovidov ).
HTTPサーバーを部分的に再実装し、送受信データのコピーを減らしました。これにより、HTTP 経由で長いレコードを INSERT する際のパフォーマンスが最大 1.5 倍向上します。#19516 (Ivan ).
Memoryテーブルにcompress設定を追加しました。これを有効にすると、テーブルが使用するRAMを削減できます。環境やデータセットによっては、SELECT時の処理が高速になることもありますが、常にそうなるとは限りません。これにより#20093 をクローズします。注: MemoryテーブルがMergeTreeより遅くなる理由はいくつかあります。(1) 圧縮がない (2) ブロックサイズが固定である (3) インデックスやprewhereがない… #20168 (alexey-milovidov ).
aggregation のコードを若干改善しました。#20978 (alexey-milovidov ) 。
パフォーマンス向上のため、intDiv/modulo の特殊化を再度追加しました。これにより #21293 を修正しました。このリグレッションは https://github.com/ClickHouse/ClickHouse/pull/18145 で導入されました。#21307 (Amos Bird ).
Memory テーブルに INSERT SELECT で挿入する場合、ブロックを過度にまとめないようにしました。以前のバージョンでは、INSERT SELECT の後、Memory テーブルで非効率なデータ表現が生成されていました。これにより #13052 を修正しました。#20169 (alexey-milovidov )。
DataType パーサーの計算量が指数的になる少なくとも 1 つのケースを修正しました (fuzzer により発見) 。これにより #20096 がクローズされます。#20132 (alexey-milovidov ).
do_not_merge_across_partitions_select_final 設定が 1 の場合、レベルが > 0 の単一の part に対する FINAL 付き SELECT の並列実行に対応しました。#19375 (Kruglov Pavel ) 。
system.parts および system.parts_columns のクエリ時に、要求されたカラムのみを読み込むようにしました。#19570 を解決しました。#21035 (Anmol Arora ).
avg 集約関数内の算術式に対する代数的最適化を行いました。#20092 をクローズ。#20183 (flynn ).
改善
テーブル関数の圧縮方式で、大文字と小文字を区別しないようにしました。あわせて、大文字表記でチェックされていたLZMA圧縮方式も修正しました。#21416 (Vladimir Chebotarev ) 。
非アクティブなパーツが多すぎる場合、挿入時に遅延させるか、エラーを返すための 2 つの設定を追加しました。これは、サーバーがパーツを十分な速さでクリーンアップできない場合に有用です。#20178 (Amos Bird ) 。
mysql クライアントとの互換性を改善。1. mysql jdbc 2. mycli。 #21367 (Amos Bird ).
materialized view で参照されているカラムは削除できないようにしました。#21164 をクローズ。#21303 (flynn ).
MySQL の Dictionary ソースでは、SSL/TLS 接続でときどき発生する予期しない接続失敗 (クエリ実行中に MySQL server への接続が失われた) が起きた場合に、再試行するようになりました。#21237 (Alexander Kazakov ) 。
ユーザビリティの向上: DateTime64 のパースの一貫性を改善し、秒未満の精度を持つ Unix timestamp がスケーリングされた整数 (1111111111.222 ではなく 1111111111222 のような値) として指定された場合も認識できるようになりました。これにより #13194 はクローズされました。 #21053 (alexey-milovidov ).
distributed_group_by_no_merge 使用時、イニシエーターではソート済みブロックのマージだけを行うようにしました。 #20882 (Azat Khuzhin ).
mysql ソースの設定を読み込む際、ClickHouse は、mysql エンドポイントをラウンドロビンで選択するロジックが正しく機能するよう、同じ優先度のレプリカのリストをランダム化するようになりました。これにより #20629 がクローズされます。 #20632 (Alexander Kazakov ).
関数 'reinterpretAs(x, Type)' の名称が 'reinterpret(x, Type)' に変更されました。#20611 (Maksim Kita ) 。
RabbitMQ engine で vhost をサポート #20576 。 #20596 (Kseniia Sumarokova ).
Array と Tuple を組み合わせたデータ型のシリアライゼーションを改善しました。enum データ型と protobuf の enum 型との対応付けを改善しました。Map データ型のシリアライゼーションを修正しました。省略された値にはデフォルト値が設定されるようになりました。#20506 (Vitaly Baranov ).
分散DDLタスクの実行とDDLキューのクリーンアップの間で発生していた競合状態を修正しました。これにより、アクティブなワーカーが存在する場合、DDLタスクはZooKeeperから削除されなくなりました。 #20016 を修正しました。#20448 (tavplubix ).
Alpineイメージで、FQDNやその他のDNS関連関数が正しく動作するようにしました。#20336 (filimonov ) 。
明示的に禁止された関数に対して、早期の定数畳み込みを行わないようにしました。 #20303 (Azat Khuzhin ).
整数値が Decimal 型に収まらない場合でも、整数から Decimal 型への暗黙的な変換が成功してしまうことがありました。現在は ARGUMENT_OUT_OF_BOUND をスローします。 #20232 (tavplubix ).
ロック不要の SYSTEM FLUSH DISTRIBUTED。 #20215 (Azat Khuzhin ).
count(constant) と sum(1) を count() に正規化しました。これは、プロジェクションのクエリルーティングに必要です。#20175 (Amos Bird ) 。
bitmap関数で、すべてのネイティブ整数型をサポート。#20171 (Amos Bird ).
CacheDictionary、ComplexCacheDictionary、SSDCacheDictionary、SSDComplexKeyDictionary が、内部索引として LRUHashMap を使用するよう更新されました。#20164 (Maksim Kita ) 。
設定 access_management は、CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT を指定することで起動時に構成できるようになりました。デフォルトは無効 (0) で、これは従来と同じ値です。#20139 (Marquitos ).
DateTime64 向けの toDateTime64(toDate()/toDateTime()) の修正 - DateTime の挙動に合わせるため、DateTime64 のクランプ処理を実装しました。 #20131 (Azat Khuzhin ).
クォータの改善: SHOW TABLES は、クォータ計算において 2 つのクエリではなく 1 つのクエリとして扱われるようになりました。SYSTEM クエリもクォータを消費するようになりました。クォータ消費における interval の終了時点の計算を修正しました。#20106 (Vitaly Baranov ).
system.zookeeper テーブルでの path IN (set) 式をサポートしました。#20105 (小路 ) 。
system.tables に MaterializeMySQL table の詳細情報をすべて表示するようになりました。 #20051 (Stig Bakken ).
誤った使い方をした場合にのみ発生し得た、実行可能 Dictionary のデータ競合を修正しました (スクリプトが入力を無視してデータを返す場合) 。 #20045 (alexey-milovidov ).
MYSQL_OPT_RECONNECT オプションの値を、mysql レプリカの config セクションにある "opt_reconnect" パラメータで制御できるようになりました。#19998 (Alexander Kazakov ) 。
ユーザーが JSONExtract 関数を呼び出して Float32 型を要求した場合、結果型への不正確な変換を許可するようにしました。たとえば、JSON 内の数値 0.1 は倍精度であり、Float32 では表現できませんが、それでもユーザーはこれを取得したい場合があります。以前のバージョンでは、変換が不正確であることを示すため、非 Nullable 型には 0 を、Nullable 型には NULL を返していました。このロジックは 100% 正しかったものの、ユーザーにとっては意外で、疑問を招いていました。これにより #13962 が解決されました。 #19960 (alexey-milovidov ).
一致しない場合に、分散テーブルへのINSERT向けにブロック構造を変換する処理を追加しました。#19947 (Azat Khuzhin ) 。
system.distributed_ddl_queue テーブルを改善しました。再起動後、MaxDDLEntryID が最後の値で初期化されるようになりました。この PR より前は、新しい DDLTask が処理されるまで MaxDDLEntryID は 0 のままでした。#19924 (Amos Bird ) 。
MaterializeMySQL テーブルを system.parts に表示する。#19770 (Stig Bakken ) 。
Buffer プロファイル用に個別の設定ディレクティブを追加しました。 #19721 (Azat Khuzhin ).
JOIN に関連しない条件を WHERE 句に移動します。#18720 。#19685 (hexiaoting ) 。
非同期送信の保留バイト数に応じて Distributed への INSERT をスロットルできるようになりました (Distributed エンジン向けに bytes_to_delay_insert/max_delay_to_insert および bytes_to_throw_insert 設定が追加されました) 。 #19673 (Azat Khuzhin ).
デストラクタ内で書き込みエラーが無視されることがある、まれなケースをいくつか修正しました。 #19451 (Azat Khuzhin ).
致命的なエラーのスタックトレースでインラインフレームを出力します。 #19317 (Ivan ).
バグ修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.2
ClickHouse リリース v21.2.2.8-stable, 2021-02-07
後方互換性を持たない変更
ビット演算関数 (bitAnd、bitOr など) は、浮動小数点の argument では使用できなくなりました。今後は整数への明示的な CAST が必要です。#19853 (Azat Khuzhin ).
lcm/gcd は浮動小数点数に対して使用できなくなりました。#19532 (Azat Khuzhin ).
OPTIMIZE TABLE/merges のメモリ追跡を修正し、OPTIMIZE TABLE/merges に対してクエリのメモリ制限と sampling が考慮されるようにしました。#18772 (Azat Khuzhin ).
浮動小数点のカラムは partition key として使用できなくなりました。詳しくは #18421 を参照してください。#18464 (hexiaoting ).
型定義内での過剰な括弧はサポートされなくなりました。例: Array((UInt8)).
新機能
PostgreSQL テーブルエンジン (select/insert の両方に対応し、多次元配列をサポート) を追加し、あわせて table function も追加しました。PostgreSQL Dictionary ソースを追加しました。PostgreSQL データベースエンジンを追加しました。#18554 (Kseniia Sumarokova ) 。
データ型 Nested が、任意のレベルのネストをサポートするようになりました。Array の size0、Nullable の null、Tuple の要素名などの複合型サブカラムが導入され、カラム全体を読み込まなくても参照できるようになりました。#17310 (Anton Popov ).
FlatDictionary、HashedDictionary、ComplexKeyHashedDictionary、DirectDictionary、ComplexKeyDirectDictionary、RangeHashedDictionary で Nullable をサポートしました。#18236 (Maksim Kita ) 。
DDLワーカーキュー内のクエリを表示する system.distributed_ddl_queue という新しいテーブルが追加されました。#17656 (Bharat Nallan ) 。
LDAP ユーザーディレクトリ内のユーザーについて、LDAP グループ名や一般的な属性値をローカルロールにマッピングする機能を追加しました。 #17211 (Denis Glazachev ).
テーブル関数 cluster への insert をサポートし、テーブル関数 remote および cluster の両方で、sharding key を指定してデータをノード間に分散できるようになりました。#16752 をクローズしました。#18264 (flynn ).
XMLの文字参照をデコードする関数 decodeXMLComponent を追加しました。例: SELECT decodeXMLComponent('Hello,"world"!') #17659 。#18542 (nauta ) 。
関数 parseDateTimeBestEffortUSOrZero と parseDateTimeBestEffortUSOrNull を追加しました。#19712 (Maksim Kita ) 。
sign 関数を追加しました。#19527 (flynn ).
使用された機能 (関数、テーブルエンジンなど) の情報を system.query_log に追加しました。#18495 。#19371 (Kseniia Sumarokova ) 。
関数 formatDateTime で、日付を四半期形式でフォーマットする %Q 修飾子がサポートされました。#19224 (Jianmei Zhang ).
play UI で MetaKey+Enter のホットキーのキーバインドをサポートしました。 #19012 (sundyli ).
map データ型向けに 3 つの関数が追加されました: 1. mapContains(map, key) は、map.keys に 2 番目のパラメータである key が含まれているかどうかを確認します。 2. mapKeys(map) は、すべてのキーを Array 形式で返します 3. mapValues(map) は、すべての値を Array 形式で返します。 #18788 (hexiaoting ).
#18494 に関連して log_comment 設定を追加しました。#18549 (Zijie Lu ) 。
argMin および argMax 関数で、Tuple 型の引数をサポートしました。#17359 (Ildus Kurbangaliev ).
EXISTS VIEW 構文をサポートしました。#18552 (Du Chuan ) 。
SELECT ALL 構文を追加しました。#18706 を修正しました。#18723 (flynn )。
パフォーマンス改善
stat syscalls の回数を減らすことで、パーツの削除を高速化しました。これは以前存在していた最適化を復活させるものです。また、IDisk のインターフェイスをより安全にしました。これにより #19065 をクローズします。#19086 (alexey-milovidov ).
WITH ステートメントで宣言された別名が、索引解析で正しく使われるようになりました。WITH column AS alias SELECT ... WHERE alias = ... のようなクエリでも、索引を使用できるようになりました。#18896 (Amos Bird ).
optimize_alias_column_prediction (デフォルトで有効) を追加しました。これにより、次のことが可能になります。- パーティションプルーニングおよびセカンダリ索引によるデータスキップで、WHERE 句内の別名付きカラムを考慮します。- optimize_trivial_count の単純な count クエリで、WHERE 句内の別名付きカラムを考慮します。- optimize_aggregation_in_order / optimize_read_in_order で、GROUP BY / ORDER BY 内の別名付きカラムを考慮します。#16995 (sundyli ).
aggregate function sum を高速化しました。この改善は合成 benchmark でのみ確認できるもので、実用面での効果はあまり大きくありません。#19216 (alexey-milovidov ).
より高いパフォーマンスを実現するため、libc++ を更新し、別の ABI を使用するようにしました。#18914 (Danila Kutenin ).
論理的に等価な場合、sumIf() および sum(if()) 関数を countIf() 関数に書き換えるようにしました。#17041 (flynn ).
s3_max_connections 設定で制御される、S3 接続用の接続プールを使用するようにしました。#13405 (Vladimir Chebotarev ).
容量を節約するため、文字列カラムをより高効率に圧縮できる zstd long オプションのサポートを追加しました。#17184 (ygrek ).
接続のたびに設定へアクセスしないようにすることで、サーバーのレイテンシをわずかに改善しました。#19863 (alexey-milovidov ).
Buffer engine の複数レイヤーにおけるロック競合を低減しました。#19379 (Azat Khuzhin ).
クエリプランの Filter step を Expression + Filter のペアに分割できるようにしました。Expression + Expression のマージ最適化 (#17458 ) と組み合わせることで、一部の expression では実行を Filter step の後まで遅らせられる可能性があります。#19253 (Nikolai Kochetov ).
改善
バグ修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.1
ClickHouse リリース v21.1.3.32-stable、2021-02-03
バグ修正
ClickHouse リリース v21.1.2.15-stable 2021-01-18
後方互換性を持たない変更
設定 input_format_null_as_default がデフォルトで有効になりました。#17525 (alexey-milovidov ).
config 内の profile 設定に対して settings の制約をチェックするようになりました。users.xml に対応する制約を満たさない設定が含まれている場合、server は起動に失敗します。#18486 (tavplubix ).
データパーツに影響するストレージ設定 (write_final_mark および enable_mixed_granularity_parts) を変更する ALTER MODIFY SETTING を禁止しました。#18306 (Amos Bird ).
insert_quorum_parallel のデフォルト値を 1 にしました。これは "sequential" な quorum inserts よりも大幅に使いやすいためです。ただし、逐次整合性に依存している場合は、この設定を 0 に戻す必要があります。#17567 (alexey-milovidov ).
sumburConsistentHash 関数を削除しました。これにより #18120 はクローズされます。#18656 (alexey-milovidov ).
集約関数 timeSeriesGroupSum、timeSeriesGroupRateSum を削除しました。知人いわく、これらは一度も正常に動作していなかったためです。これにより #16869 を修正します。もしこれらの関数を問題なく使えていた場合は、feedback@clickhouse.com までメールでお知らせください。#17423 (alexey-milovidov ).
toUnixTimestamp(Date()) を禁止しました (以前は単に Date の UInt16 表現を返していました) 。#17376 (Azat Khuzhin ).
avg および avgWeighted 関数で拡張整数型 (Int128、Int256、UInt256) を使用できるようにしました。また、avgWeighted 関数では値と重みに異なる型 (整数、Decimal、浮動小数点) を使用できるようにしました。これは後方互換性を持たない変更です。avg および avgWeighted 関数は、今後は常に Float64 を返します (ドキュメントどおり) 。この変更以前は、Decimal 引数に対する戻り値の型も Decimal でした。#15419 (Mike ).
式 toUUID(N) は動作しなくなりました。代わりに toUUID('00000000-0000-0000-0000-000000000000') を使用してください。この変更は、N が 0 以外の場合の toUUID(N) の結果が分かりにくいためです。
"key usage" が正しくない SSL 証明書は拒否されるようになりました。以前のバージョンでは使用できていました。#19262 を参照してください。
substitutions file (/etc/metrika.xml) への incl 参照が、デフォルト設定 (<remote_servers>、<zookeeper>、<macros>、<compression>、<networks>) から削除されました。substitutions file を使用していて、これらの暗黙的な参照に依存していた場合は、更新前に、対応するセクションを incl="..." 属性付きで追加し、手動で明示的に元に戻す必要があります。#18740 (alexey-milovidov ).
新機能
ClickHouseで gRPC プロトコルを実装。 #15111 (Vitaly Baranov ).
複数のZooKeeperクラスターを使用できるようになりました。 #17070 (fastio ).
REPLACE TABLE および CREATE OR REPLACE TABLE クエリに対応しました。#18521 (tavplubix ) 。
UNION DISTINCT を実装し、通常の UNION 句はデフォルトで UNION DISTINCT として扱うようにしました。さらに、これを UNION ALL として扱う、またはモードの明示的な指定を必須にできる設定 union_default_mode を追加しました。 #16338 (flynn ).
関数 accurateCastOrNull を追加しました。これにより #10290 が解決されました。x IN (subquery) 式での型変換を追加しました。これにより #10266 が解決されました。#16724 (Maksim Kita ).
IP Dictionary で IPv4 / IPv6 型が直接サポートされるようになりました。#17571 (vdimir ) 。
IP Dictionary がキーのフェッチをサポートしました。#18241 を解決しました。#18480 (vdimir )。
データのインポートおよびエクスポート向けに、*.zst の圧縮/伸張のサポートを追加しました。これにより、file() 関数で *.zst を使用できるほか、HTTP クライアントで Content-encoding: zstd も利用できます。これにより #16791 をクローズします。#17144 (Abi Palagashvili ).
mannWitneyUTest、studentTTest、welchTTest の集約関数を追加しました。rankCorr を少しリファクタリングしました。#16883 (Nikita Mikhaylov ) 。
関数 countMatches/countMatchesCaseInsensitive を追加。 #17459 (Azat Khuzhin ).
countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8() を実装しました (部分文字列の出現数を数えます) 。#17347 (Azat Khuzhin ) 。
system.query_log に、使用されているデータベース、テーブル、カラムの情報を追加しました。query_kind および normalized_query_hash フィールドを追加しました。#17726 (Amos Bird ).
設定 optimize_on_insert を追加しました。有効にすると、INSERT されたデータブロックに対して、そのブロックで merge が実行された場合と同じ変換を行います (例: Replacing、折りたたみ、Aggregating…) 。この設定はデフォルトで有効です。これにより、materialized view および MaterializeMySQL の動作に影響する可能性があります (詳細な説明を参照) 。これにより #10683 がクローズされます。#16954 (Kruglov Pavel ).
HDFS 向けの Kerberos 認証。 #16621 (Ilya Golshtein ).
system.settings のパラメータを表示する SHOW SETTINGS ステートメントに対応しました。SHOW CHANGED SETTINGS および LIKE/ILIKE 句にも対応しています。#18056 (Jianmei Zhang ).
関数 position で、SQL 互換性のために POSITION(needle IN haystack) 構文がサポートされるようになりました。これにより #18701 が解決されます。 … #18779 (Jianmei Zhang ).
MergeTree familyのテーブル向けに、新しいストレージ設定 max_partitions_to_read が追加されました。これにより、1つのクエリでアクセスできるパーティションの最大数が制限されます。この制約を適用するためのユーザー設定 force_max_partition_limit も追加されました。#18712 (Amos Bird ) 。
挿入されたパーツ向けに、system.part_log に query_id カラムを追加しました。#10097 をクローズしました。#18644 (flynn ).
カラム指定付きの CREATE TABLE AS SELECT を許可しました。例: CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;。#18060 (Maksim Kita ).
arrayMin、arrayMax、arrayAvg の集約関数が追加されました。#18032 (Maksim Kita ).
ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ... クエリを実装しました。指定した構造を持つ新しいテーブルを作成し、user_files 内の指定したディレクトリからテーブルデータをアタッチします。#17903 (tavplubix ).
StorageMemory で mutation をサポートしました。これにより #9117 がクローズされます。#15127 (flynn ).
EXISTS DATABASE name 構文のサポートを追加しました。#18458 (Du Chuan ) 。
MySQL と同様に、組み込み関数 isIPv4String && isIPv6String をサポートしました。#18349 (Du Chuan ) 。
新しい設定 insert_distributed_one_random_shard = 1 を追加し、分散キーがなくても複数の分片を持つ分散テーブルに挿入できるようにしました。 #18294 (Amos Bird ).
MergeTreeSettings に min_compress_block_size および max_compress_block_size 設定を追加しました。これらはグローバル設定よりも優先して適用され、設定されている場合に有効になります。close 13890 。#17867 (flynn ) 。
64ビットのroaring bitmapをサポートしました。#17858 (Andy Yang ) 。
重複判定の対象となるカラムを、明示的に (またはアスタリスク/カラム変換子によって暗黙的に) 一覧指定できるよう、OPTIMIZE ... DEDUPLICATE 構文を拡張しました。… #17846 (Vasily Nemkov ).
関数 toModifiedJulianDay、fromModifiedJulianDay、toModifiedJulianDayOrNull、および fromModifiedJulianDayOrNull を追加しました。これらの関数は、プロレプティック・グレゴリオ暦の日付と修正ユリウス日数の間で変換を行います。#17750 (PHO ).
カスタム TLD リストを使用する機能を追加しました。関数 firstSignificantSubdomainCustom と cutToFirstSignificantSubdomainCustom を追加しました。#17748 (Azat Khuzhin ).
PROXYv1 プロトコルのサポートを追加し、ネイティブ TCP インターフェイスをラップできるようにしました。クォータを、プロキシ経由で転送された IP アドレスをキーに設定できるようになりました (PROXYv1 のアドレス、および HTTP インターフェイスの X-Forwarded-For に適用) 。これは、信頼できるプロキシ (たとえば CloudFlare) 経由でのみ ClickHouse へのアクセスを提供しつつ、ユーザーのリソース使用量を元の IP アドレス単位で集計したい場合に便利です。これにより #17268 を修正しました。#17707 (alexey-milovidov ).
clickhouse-client で EDITOR を開いてコマンドを編集できるようになりました。Alt-Shift-E。 #17665 (Amos Bird ).
文字列を XML のテキストノードまたは属性に埋め込めるよう、文字をエスケープする関数 encodeXMLComponent を追加しました。#17659 (nauta ) 。
DETACH TABLE/VIEW ... PERMANENTLY 構文を導入し、再起動してもテーブルが自動的に再表示されないようにしました (明示的に要求した場合のみ再度表示されます) 。テーブルは引き続き、短縮構文の ATTACH TABLE を使って再度アタッチできます。#5555 を実装。#13850 を修正。#17642 (filimonov )。
MergeTree テーブル内の行数、バイト数、パーツ総数に関する非同期メトリクスを追加しました。これにより #11714 の問題を修正しました。#17639 (flynn ).
SQL外のページネーション用に設定 limit と offset を追加: #16176 これらは API の構築に役立ちます。これら 2 つの設定は、select * from (your_original_select_query) t limit xxx offset xxx; を追加した場合と同様に、SELECT クエリに影響します。 #17633 (hexiaoting ).
-SimpleState という新しい集約関数コンビネータを追加し、クエリ経由で SimpleAggregateFunction 型を構築できるようにしました。これは AggregatingMergeTree エンジンのマテリアライズドビューを定義する際に有用で、プロジェクションにも役立ちます。#16853 (Amos Bird ).
clickhouse-client と clickhouse-local に queries-file パラメータが追加されました。#15930 (Maksim Kita ).
clickhouse-benchmark に query パラメーターが追加されました。#17832 (Maksim Kita ).
EXPLAIN AST が SELECT 以外のクエリもサポートするようになりました。 #18136 (taiyang-li ).
実験的機能
テキストのN-gramおよびシングルの minHash と simHash を計算する関数を追加しました。これらは準重複検索を目的としています。あわせて、bitHammingDistance 関数と tupleHammingDistance 関数も追加しました。#7649 (flynn ).
新しいデータ型 Map を追加しました。#1841 を参照してください。Map の最初のバージョンでは、キーと値の型として String のみをサポートします。#15806 (hexiaoting ).
ANTLR4 ランタイムをベースとし、EBNF 文法から生成された代替 SQL パーサーを実装しました。#11298 (Ivan ).
パフォーマンス改善
改善
TinyLog または Log テーブルエンジンを使用するテーブルに対し、そのテーブル自身を対象とする INSERT SELECT の実行時に発生するデッドロックを回避します。これにより #6802 をクローズします。これにより #18691 をクローズします。これにより #16812 をクローズします。これにより #14570 をクローズします。 #15260 (alexey-milovidov ).
MySQL と同様に SHOW CREATE VIEW name 構文をサポートしました。#18095 (Du Chuan ) 。
Decimal * Float 型のすべてのクエリ、またはその逆の組み合わせのクエリが許可されるようになりました。これには集約クエリも含まれます (例: SELECT sum(decimal_field * 1.1) または SELECT dec_col * float_col) 。結果の型は Float32 または Float64 です。#18145 (Mike ).
最小限の Web UI を改善: 履歴を追加し、共有に対応し、異なるリクエスト間での競合状態を回避し、リクエストの処理中および準備完了のインジケーターを追加し、favicon を追加し、textarea にフォーカスがない場合の Ctrl+Enter を検出するようにしました。 #17293 #17770 (alexey-milovidov ).
clickhouse-server が ZooKeeper サーバーに close リクエストを送信していなかった。#16837 (alesapin ) 。
メモリ制限が低すぎる場合 (max_memory_usage = 1 / max_untracked_memory = 1) に、サーバーが異常終了しないようにしました。#17453 (Azat Khuzhin ) 。
異なるイベントで timestamp が同一の場合に、windowFunnel 関数が非決定論的な結果を返す問題を修正しました。#18884 (Fuwang Hu ).
Docker: clickhouse-server の Docker イメージで、clickhouse ユーザーとグループの uid / gid を固定値 (101) に明示的に設定しました。 #19096 (filimonov ).
Distributedテーブルへの非同期 INSERT: 2 つの新しい設定 (MergeTree family と同様) が追加されました: - fsync_after_insert - 挿入のたびに fsync を実行します。INSERT のパフォーマンスは低下します。 - fsync_directories - すべての操作 (書き込み、リネームなど) の後、一時ディレクトリ (非同期 INSERT でのみ使用) に対して fsync を実行します。 #18864 (Azat Khuzhin ).
SYSTEM KILL コマンドが Docker でも動作するようになりました。これにより #18847 がクローズされました。#18848 (alexey-milovidov ).
FETCH PARTITION の実行時に zk パス内のマクロが展開されるようになりました。#18839 (fastio ).
すべてのレプリカに ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ... を適用します。これは、この種の ALTER コマンドはレプリケートされないためです。#18789 (Amos Bird ).
カラム変換子 EXCEPT が、文字列を正規表現マッチャーとして受け付けるようにしました。これにより #18685 が解決されます。 #18699 (Amos Bird ).
SummingMergeTree における SimpleAggregateFunction を修正しました。これで AggregateFunction と同様に動作するようになりました。以前のバージョンでは、集約関数に関係なく値が合計されていました。これにより #18564 が修正されます。#8052 。#18637 (Amos Bird ) 。SummingMergeTree で SimpleAggregateFunction を使用する際の別の修正です。これにより #18676 が修正されます。#18677 (Amos Bird ) 。
関数 bar の最後の引数が NaN の場合にアロケータ内部で発生していた assertion error を修正しました。これにより、通常の ClickHouse の例外がスローされるようになりました。これで #17876 が修正されます。#18520 (Nikita Mikhaylov ).
ユーザビリティの問題を修正: 一部のツールで、例外メッセージの後に改行が入らない問題を修正。 #18444 (alexey-milovidov ).
主キーおよびパーティションキーのカラム型を LowCardinality(Type) から Type に、またその逆にも変更できるようにしました。さらに、主キーのカラム型を EnumX から IntX 型に変更できるようにしました。#5604 を修正しました。#18362 (alesapin )。
untuple のフィールドアクセスに対応しました。#18133 。#18309 (hexiaoting ) 。
CSV で、ネストされた CSV としてシリアライズされた配列を含む文字列として表現されている場合に、Array フィールドをパースできるようにしました。例: "[""Hello"", ""world"", ""42"""" TV""]" は ['Hello', 'world', '42" TV'] としてパースされます。CSV 内の配列については、文字列中で中括弧がなくてもパースできるようにしました。例: "'Hello', 'world', '42"" TV'" は ['Hello', 'world', '42" TV'] としてパースされます。 #18271 (alexey-milovidov ).
MergeTree wide パーツの適応的な粒度計算を改善しました。#18223 (alesapin ) 。
これで clickhouse install が Mac でも動作するようになりました。原因は、このプラットフォームには procfs がないことでした。#18201 (Nikita Mikhaylov ) 。
SHOW ... クエリ構文に関するヒントを改善しました。 #18183 (Du Chuan ).
Array 集約関数 arrayMin, arrayMax, arraySum, arrayAvg が Int128、Int256、UInt256 に対応しました。#18147 (Maksim Kita ).
Set および Join のストレージ設定に disk を追加しました。 #18112 (Grigory Pervakov ).
アクセス制御: テーブル関数 merge() は、現在のユーザーがデータの取得元となる各テーブルに対する SELECT 権限を持っていることを必須とするようになりました。この PR で #16964 を修正します。 #18104 #17983 (Vitaly Baranov ).
一時テーブルは、そのテーブルが作成されたセッションでのみ、システムテーブル system.tables と system.columns に表示されるようになりました。内部データベース _temporary_and_external_tables はこれらのシステムテーブルでは非表示となり、代わりに一時テーブルは、is_temporary フラグが設定されたデータベース名が空のテーブルとして表示されます。#18014 (Vitaly Baranov ).
ターミナルウィンドウのサイズ変更時に発生する clickhouse-client の描画の問題を修正しました。#18009 (Amos Bird ) 。
クライアントが接続を切断した際のイベントログの詳細度を、Warning から Information に下げました。 #18005 (filimonov ).
DiskS3 向けに、ファイルシステム上の空または不正なメタデータファイルを強制的に削除するようにしました。S3 は実験的機能です。#17935 (Pavel Kovalenko ).
アクセス制御: allow_introspection_functions=0 はイントロスペクション関数の使用を禁止しますが、それらに対する権限の付与自体は、今後は禁止されません (その権限を付与されたユーザーが実際に使用するには、自身で allow_introspection_functions=1 を設定する必要があります) 。同様に、allow_ddl=0 は DDL コマンドの使用を禁止しますが、それらに対する権限の付与自体は、今後は禁止されません。#17908 (Vitaly Baranov ).
ユーザビリティの改善: カラム名のヒント表示。 #17112 。 #17857 (fastio )。
2 つの merge テーブルが互いのデータを読み込もうとした場合の診断情報を追加しました。 #17854 (徐炘 ).
ClickHouseのDockerイメージを使用して実行するスクリプトで、タイムアウト値を上書きできるようにしました。 #17818 (Guillaume Tassery ).
一部の設定エラーを防ぐため、システムログテーブルのエンジン定義の文法をチェックするようにしました。なお、この文法チェックは意味的な検証ではないため、存在しないカラムや式関数といった誤りは、テーブルが作成されるまで検出されません。#17739 (Du Chuan ).
接続がない場合でも、RabbitMQ テーブルの初期化時に例外をスローしないようにしました (バックグラウンドで再接続します) 。 #17709 (Kseniia Sumarokova ).
Buffer のフラッシュ時にサーバーのメモリ制限を無視しないようにしました。 #17646 (Azat Khuzhin ).
use-after-freeエラーを修正するため、RocksDB をパッチ適用済みバージョン (ClickHouse-Extras 提供) に切り替えました。#17643 (Nikita Mikhaylov ).
並列パース時の例外メッセージにオフセットを追加しました。これにより #17457 を修正しました。 #17641 (Nikita Mikhaylov ).
INSERT クエリの途中で「パーツが多すぎる」エラーを返さないようにしました。 #17566 (alexey-milovidov ).
ALTER クエリの UPDATE ステートメントでクエリパラメータを使用できるようになりました。#10976 を修正しました。#17563 (alexey-milovidov ).
クエリ難読化機能: 識別子名として一部のSQLキーワードを使用しないようにしました。 #17526 (alexey-milovidov ).
DDLWorker が実行した現在の最大 DDL エントリを、サーバーのメトリクスとして公開しました。これにより、DDLWorker がどこかでハングしていないかを確認できます。#17464 (Amos Bird ).
すべてのサーバーの現在のスレッドに関する非同期メトリクスをエクスポートするようになりました。このような 問題の追跡や原因特定に役立ちます。#17463 (Amos Bird ) 。
設定 asterisk_include_materialized_columns と asterisk_include_alias_columns を有効にすると、ワイルドカードクエリに MATERIALIZED / ALIAS などの動的カラムが含まれるようになりました。 #17462 (Ken Chen ) 。
config.xml の <ttl> 属性を使って、システムログテーブル から古いエントリを削除するための 有効期限 (TTL) を指定できるようになりました。 #17438 (Du Chuan ).
現在、MySQL および PostgreSQL プロトコル経由でサーバーに送られるクエリには、それぞれ固有のインターフェイス種別があります (これはテーブルsystem.query_logのinterfaceカラムで確認できます) 。MySQL は 4、PostgreSQL は 5 で、以前使われていた 1 ではありません。現在、1 はネイティブプロトコル専用に使用されます。 #17437 (Vitaly Baranov ).
INSERT ... SELECT ... SETTINGS クエリの SETTINGS 句のパースを修正。#17414 (Azat Khuzhin ) 。
RadixSort のメモリ使用量を正しく計上するようにしました。 #17412 (Nikita Mikhaylov ).
server 内の receiveHello に eof チェックを追加し、Attempt to read after eof 例外の発生を防止しました。#17365 (Kruglov Pavel ).
bigint 変換で発生する可能性があるスタックオーバーフローを回避しました。Big integers は実験的な機能です。 #17269 (flynn ).
これで set インデックスが GLOBAL IN でも動作するようになりました。これにより #17232 、#5576 が修正されました。#17253 (Amos Bird ).
S3ストレージへのリクエストにおける HTTP リダイレクト数の上限を追加しました (s3_max_redirects) 。#17220 (ianton-ru ) 。
-OrNull コンビネータを -If、-Merge、-MergeState、-State コンビネータと組み合わせる場合、-OrNull は先頭に置く必要があります。#16935 (flynn ).
HTTPプロキシおよびHTTPS S3エンドポイントの設定をサポートしました。 #16861 (Pavel Kovalenko ).
S3クライアント向けに、環境変数、~/.aws、および AssumeRole を使用した適切な認証を追加しました。#16856 (Vladimir Chebotarev ) 。
OpenTelemetryのスパンをさらに追加。スパンデータをZipkinにエクスポートする方法の例を追加。#16535 (Alexander Kuzmenkov ) 。
cache 辞書: 取得時のコールバックとロックを完全に排除しました。キーは "not found" と "expired" に分けず、クエリ中は同じマップに格納されます。#14958 (Nikita Mikhaylov ) 。
fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync がこれまで一度も動作していなかった問題を修正しました (Experimental機能) 。#18845 (Azat Khuzhin ) 。
MaterializeMySQL エンジンのネストされたデータベースで Atomic エンジンを使用できるようにしました。#14849 (tavplubix ) 。
バグ修正
ビルド/テスト/パッケージングの改善