ClickHouse リリース v21.12, 2021-12-15
後方互換性のない変更
以前、望ましくない動作をしていた機能に対する修正。 Kafka/RabbitMQ/FileLog に対する直接 SELECT は許可されなくなりました。stream_like_engine_allow_direct_select を設定することで有効化できます。マテリアライズドビューがアタッチされている場合は、設定で有効化されていても直接 SELECT は許可されません。Kafka および RabbitMQ では、直接 SELECT が許可されている場合でも、デフォルトではメッセージをコミットしません。直接 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 )。
すでに未使用となっているコードのさらなる廃止。 これは、20.6 より古いバージョンの ClickHouse を使用しているユーザーのみに影響します。「リーダー選出」メカニズムは、20.6 以降は複数のリーダーがサポートされているため、ReplicatedMergeTree から削除されました。より古いバージョンからアップグレードしており、旧バージョンのレプリカの一部がリーダーである場合、アップグレード後にサーバーは起動に失敗します。新しいバージョンを起動できるようにするには、旧バージョンのレプリカを停止してください。その後は、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 は機能的に一通り揃い、feature complete な状態になりました。
Bool データ型のサポート。#31072 (kevin wan )。
File、URL、HDFS ストレージおよび INSERT INTO テーブル関数での PARTITION BY 対応を追加。 #30273 をクローズ。 #30690 (Kseniia Sumarokova )。
INSERT 時にはチェックを行わない CONSTRAINT ... ASSUME ... を追加しました。より便利に最適化できるよう、クエリを 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 )。
要約: テキストフォーマットの網羅性と一貫性が大きく改善されました。 フォーマット 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 フォーマットでカラムのマッピングと型チェックをサポートしました。input_format_with_types_use_header 設定を追加し、<format_name>WIthNamesAndTypes フォーマットに書かれている型がテーブル構造と一致しているかどうかをチェックするかどうかを指定できるようにしました。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 設定値が 1 行分のバイト数より小さい場合に、-WithNames フォーマットの並列パースで発生するバグを修正しました。#30178 (Kruglov Pavel )。CustomSeparated 入出力フォーマットでカラムの名前と型を出力/パースできるようにしました。TSVWithNames/WithNamesAndTypes と同様の CustomSeparatedWithNames/WithNamesAndTypes フォーマットを追加しました。#31434 (Kruglov Pavel )。
Aliyun OSS Storage をサポート。 #31286 (cfcz48 ).
設定ファイルでグローバルスレッドプールのすべての設定を行えるようにしました。 #31285 (Tomáš Hromada ).
ウィンドウ関数 exponentialTimeDecayedSum、exponentialTimeDecayedMax、exponentialTimeDecayedCount、exponentialTimeDecayedAvg が導入されました。これらは大きなウィンドウに対しては exponentialMovingAverage よりも効果的です。また、さらに多くのユースケースをカバーできるようになりました。 #29799 (Vladimir Chebotarev )。
LZ4 を使用してログをファイルに書き込む前に圧縮するオプションを追加しました。#23860 をクローズしました。#29219 (Nikolay Degterinsky )。
CROSS JOIN と同等の意味を持つ JOIN ON 1 = 1 をサポートしました。これにより #25578 がクローズされました。#25894 (Vladimir C )。
Map 型用の Map コンビネータを追加。既存のマップされた配列用の sum-, min-, max- Map を sum-, min-, max- MappedArrays に名称変更。 #24539 (Ildus Kurbangaliev ).
HTTP からの読み取りを再試行可能にしました。#29696 をクローズしました。#29894 (Kseniia Sumarokova )。
実験的機能
不具合修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース v21.11, 2021-11-09
後方互換性のない変更
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 ブロック圧縮ではなく、デフォルトで ZSTD コーデックを使って圧縮されるようになりました。この挙動は、compress_snapshots_with_zstd_format コーディネーション設定(すべてのクォーラムレプリカで同じ値である必要があります)で無効化できます。後方互換性の問題が発生する可能性はかなり低く、新しいノードが(復旧時などに)ZSTD 形式のスナップショットを、ZSTD 形式のスナップショットを読み取れない古いノードに送信した場合にのみ発生し得ます。 #29417 (alesapin )。
新機能
新しい非同期 INSERT モードでは、挿入されたデータを蓄積し、バックグラウンドで単一のバッチとして書き込むことができます。クライアント側では、クエリ内にインラインでデータを含める INSERT クエリ、または別のバッファに格納されたデータを用いる INSERT クエリ(例:HTTP プロトコル経由の INSERT クエリ)に対して async_insert を設定することで有効化できます。wait_for_async_insert が true(デフォルト)の場合、クライアントはデータがテーブルにフラッシュされるまで待機します。サーバー側では、async_insert_threads、async_insert_max_data_size、async_insert_busy_timeout_ms の各設定によって制御されます。#18282 を実装しています。#27537 (Anton Popov )。#20557 (Ivan )。パフォーマンスに関する注意点:非同期 INSERT を使用すると、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 (subquery) をサポート。 #6852 を解決。 #29731 (Kseniia Sumarokova )。
監査用のセッションログ。成功および失敗したすべてのログイン/ログアウトイベントを新しい system.session_log テーブルに記録します。 #22415 (Vasily Nemkov ) (Vitaly Baranov ).
多次元コサイン距離およびユークリッド距離関数、L1・L2・Lp・Linf 距離およびノルムをサポート。タプルに対するスカラー積および各種算術演算子もサポート。これにより #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 )。
ClickHouse で FileLog テーブルエンジンを用いたアプリケーションログファイルのストリーミング消費をサポート。ローカルファイルシステム上の追記専用かつローテーションされるログ向けの、Kafka や RabbitMQ エンジンに相当するエンジンです。#6953 をクローズ。#25969 (flynn )(Kseniia Sumarokova )。
CapnProto 出力フォーマットを追加し、CapnProto 入力フォーマットをリファクタリングしました。 #29291 (Kruglov Pavel )。
クエリ内で数値をバイナリリテラルとして記述できるようにしました。例: SELECT 0b001;。 #29304 (Maksim Kita )。
hashed_array 辞書型を追加しました。この型は、複数の属性を持つ辞書を使用する際のメモリ使用量を削減します。 #30236 をクローズしました。 #30242 (Maksim Kita )。
JSONExtractKeys 関数を追加しました。#30056 (Vitaly )。
関数 getOSKernelVersion を追加しました。OS カーネルバージョンを表す文字列を返します。 #29755 (Memo )。
MD4 と SHA384 関数を追加しました。MD4 は時代遅れで安全でないハッシュ関数であり、既存のレガシーシステムで MD4 がすでに使用されていて、まったく同じ結果を得る必要があるといった、稀なケースでのみ使用できます。 #29602 (Nikita Tikhomirov ).
ClickHouse HTTP サーバーに対して HSTS を有効にするには、設定ファイルで hsts_max_age を正の値に設定します。 #29516 (凌涛 )。
Huawei OBS Storage のサポートを追加。#24294 をクローズ。#29511 (kevin wan )。
新しい関数 mapContainsKeyLike は、キーが単純な正規表現にマッチするかどうかを判定します。 #29471 (凌涛 )。新しい関数 mapExtractKeyLike は、指定したパターンにマッチする要素のみを保持したマップを取得します。 #30793 (凌涛 )。
ALTER TABLE x MODIFY COMMENT が実装されました。 #29264 (Vasily Nemkov ).
ClickHouse には存在せず、H3 API では提供されている H3 の検査関数を追加します: https://h3geo.org/docs/api/inspection 。#29209 (Bharat Nallan )。
レプリケートデータベースで、レプリケートされていない ALTER TABLE FETCH および ATTACH 操作を許可します。 #29202 (Kevin Michel ).
output_format_csv_null_representation 設定を追加しました。これは output_format_tsv_null_representation と同様の設定ですが、CSV出力用です。 #29123 (PHO )。
現在の ZooKeeper セッションの稼働時間(秒)を返す 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 の場合、チャンクの前に、そのチャンクの行数(rows_count)と改行がクライアントへ送信されます。 #28833 (Maksim Kita ).
tokenbf_v1 と ngram は、キーが String または FixedString 型である Map をサポートします。これにより、map のキーに対するフィルタを使用したクエリでのデータスキップが向上します。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_tokenbf where map['K']='V' は、キー A を含まないグラニュールをスキップします。もちろん、スキップされる行数は、設定した granularity と index_granularity に依存します。#28511 (凌涛 ).
サーバーからクライアントへプロフィールイベントを送信できるようにしました。新しいパケットタイプ ProfileEvents を導入しました。#26177 をクローズ。#28364 (Dmitry Novik )。
FixedString および String データ型向けのビットシフト演算を実装。これにより #27763 がクローズされました。 #28325 (小路 )。
データベースエンジン MaterializedPostgreSQL において、PostgreSQL からのレプリケーション対象テーブルを動的に追加・削除できるようにしました。ALTER 文によるデータベース設定の変更をサポートしました。Closes #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 ).
バックグラウンドマージは互いに割り込み可能となり、適切な優先度でスケジュールされるようになりました。これにより、長時間実行されるマージが短時間のマージの実行を妨げることがなくなります。これは、マージの実行をより適切にスケジューリングおよび制御するために必要な変更です。また、「too many parts」エラーが発生する可能性を減らします。 #22381 。#25165 (Nikita Mikhaylov )。バックグラウンドプール内のスレッド数よりも多くのマージおよびミューテーションを実行できる機能が追加されました。マージおよびミューテーションはサイズに応じて順次実行されます(サイズが小さいものがより高い優先度となります)。同時に実行されるタスク数とスレッド数の比率は、設定 background_merges_mutations_concurrency_ratio(デフォルトは 2)によって制御されます。 #29140 (Nikita Mikhaylov )。
リモートファイルシステムでの非同期読み取りを可能にし、リモートファイルシステムから読み取る際のシーク回数を減らしました。これによりパフォーマンスが飛躍的に向上し、特定の条件下では、実験的だった web および s3 ディスクが EBS よりも高速に動作するようになりました。 #29205 (Kseniia Sumarokova )。あわせて、web ディスクタイプ(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 キャッシュを使用するようになりました。#29999 (alesapin )。
外部データベース(例:MySQL)への IS NULL/IS NOT NULL のプッシュダウンのサポートを追加しました。#29463 (Azat Khuzhin )。外部データベース向け(例:MySQL)に isNull/isNotNull を IS NULL/IS NOT NULL に変換するようにしました。#29446 (Azat Khuzhin )。
Dictionary テーブルに対する SELECT クエリでは複数スレッドが使用されます。 #30500 (Maksim Kita ).
Decimal 列のフィルタリング(WHERE 句)のパフォーマンスを改善しました。 #30431 (Jun Jin ).
より高性能な popcnt/ctz 実装を用いることで、filter 演算における分岐の多いコードを削除し、パフォーマンスを向上させた。 #29881 (Jun Jin ).
WHERE 演算子で使用されるフィルター用 bytemask 生成関数を、SSE/AVX2/AVX512 の各命令セットを統合的に利用する形で改善しました。デフォルトでは ClickHouse は SSE のみを使用しているため、これはカスタムビルドでのみ有効です。 #30014 (jasperzhu ). #30670 (jasperzhu ).
Nullable 浮動小数点数に対する SUM 集約関数のパフォーマンスを改善しました。 #28906 (Raúl Marín ).
複数ディスク使用時のパート読み込み処理を高速化しました。発想は https://github.com/ClickHouse/ClickHouse/pull/16423 と同様です。本番環境では 24 分から 16 分に短縮されました。 #28363 (Amos Bird )。
S3 マルチパートアップロードのパートサイズのデフォルト設定を小さくし、メモリ使用量を削減しました。 #28679 (ianton-ru ).
bitmapAnd 関数を高速化。 #28332 (dddounaiking )。
マージ処理がまだ進行中の場合に StorageMergeTree で発生していた、非最適なミューテーション通知を削除しました。 #27552 (Vladimir Chebotarev ).
文字列比較のパフォーマンス向上を試みました。 #28767 (alexey-milovidov )。
主キーインデックスとパーティションフィルタがタプルとしても機能するようになりました。 #29281 (凌涛 ).
クエリに、同じ引数を持つが level パラメータが異なる複数の quantile 集約関数が含まれている場合、設定 optimize_syntax_fuse_functions が有効になっていれば、それらはまとめて 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 への変換対象となる OR 条件(disjunction)の連鎖(設定 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 ).
オペランドが 2 つを超える AND/OR 式で set インデックスが使用されていなかった問題を修正します。これにより #30416 が修正されます。#30887 (Amos Bird )。
ハッシュ関数を用いた projection がマテリアライズされた際に発生するクラッシュを修正しました。これにより #30861 が解決されます。この問題は https://github.com/ClickHouse/ClickHouse/pull/28560 と類似しており、header の空状態に関する不変条件を正しく理解していなかったことが原因です。#30877 (Amos Bird )。
ReplicatedMergeTree において、ZooKeeper パスから補助 ZooKeeper 名を抽出する際の曖昧さを解消しました。以前は、ZooKeeper パスにコロンが含まれている場合、サーバーが Unknown auxiliary ZooKeeper name というエラーとともに起動に失敗することがありました。#29052 を修正します。また、以前はスラッシュで始まらない ZooKeeper パスを指定することが許可されていましたが、現在は非推奨となっており、そのようなパスを用いた新しいテーブルの作成は許可されません。補助 ZooKeeper 名にスラッシュおよびコロンを含めることも許可されません。#30822 (tavplubix )。
何らかの理由により localBackup が失敗した場合に、一時ディレクトリをクリーンアップするようにしました。 #30797 (ianton-ru ).
レプリケーションなしの MergeTree において、REPLACE/MOVE PARTITION とバックグラウンドでのマージ処理との間に発生するレースコンディションを修正しました。この問題が原因で、移動/置換されたデータの一部がパーティション内に残ってしまう可能性がありました。#29327 の問題を修正します。#30717 (tavplubix )。
常に真となる PREWHERE の場合に PREWHERE を WHERE に置き換えるよう修正しました。 #30668 (Azat Khuzhin ).
Limit push down 最適化により 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 ).
プロジェクションが有効な場合の JOIN クエリにおけるカラムエイリアス解決の不具合を修正。これにより #30146 が解消されます。 #30293 (Amos Bird )。
replaceRegexpAll 関数の一部不具合を修正。 #30292 (Memo ).
ComplexKeyHashedDictionary、ComplexKeySparseHashedDictionary がレイアウト設定から preallocate オプションを解釈する処理を修正。 #30246 (Maksim Kita ).
[I]LIKE 関数を修正し、#28661 をクローズ。 #30244 (Nikolay Degterinsky ).
multiIf 関数でショートサーキット評価と 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 データベースがサーバー再起動後に再び現れることがあった問題を修正しました(#29795 )。また、クラウド環境では残ったデータを手動で削除できないため、Ordinary データベース削除時に発生する Directory not empty エラーへのワークアラウンドとして、force_remove_data_recursively_on_drop 設定が追加されました(#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 というエラーを回避しました。#29154 を修正しました。#29811 (tavplubix )。
ATTACH TABLE ... FROM '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 )。
フィルタ述語内の条件がプッシュダウン最適化により失われる可能性がありました。 #29625 (Nikolai Kochetov ).
エイリアスおよびショートサーキット評価を使用する JIT 式コンパイルの不具合を修正しました。 #29403 をクローズ。 #29574 (Maksim Kita )。
DEFAULT 式内で x.y.z... のように誤ったテーブル識別子を使用した場合に、ALTER MODIFY クエリでまれにセグメンテーションフォルトが発生する問題を修正。 #29184 を修正。 #29573 (alesapin )。
HAVING で使用されているカラムが SELECT されていない場合に発生する、GROUP BY WITH TOTALS HAVING における nullptr デリファレンスを修正。 #29553 (Azat Khuzhin ).
Join テーブルエンジンのテーブルの同時読み取り・書き込み時に発生するデッドロックを回避します。 #29544 (Raúl Marín ).
std::mismatch の仕様(The behavior is undefined if the second range is shorter than the first range.)を誤って使用していたため、チェック pathStartsWith のバグを修正しました。 #29531 (Kseniia Sumarokova ).
ODBC ブリッジで 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 access storage が正常にシャットダウンしない問題を修正。 #29388 (Kevin Michel ).
メモリ安全性に問題があるため、ウィンドウ関数 nth_value を削除しました。これにより #29347 がクローズされます。#29348 (alexey-milovidov )。
projection パーツの垂直マージを修正しました。これにより #29253 が解決します。この PR は、https://github.com/ClickHouse/ClickHouse/pull/25165 で導入された projection のマージ/ミューテーションに関する複数の問題も修正します。#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 ).
クライアント(TCP 経由)には Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF) ではなく、通常の Database doesn't exist エラー(UNKNOWN_DATABASE)を送信するようにしました。 #29229 (Azat Khuzhin ).
Avro 入力フォーマットで LowCardinality(Nullable) 型のカラムに挿入する際に発生していたセグメンテーションフォルトを修正。 #29132 (Kruglov Pavel )。
サーバ間シークレット使用時に、以前の認証情報が再利用されないようにしました(そのクラスタに対してサーバ間シークレットが設定された Distributed テーブルへ Buffer/Kafka 経由で INSERT を行う前に、その接続で以前に設定されたユーザーが再利用される可能性がありました)。 #29060 (Azat Khuzhin ).
辞書との JOIN 時に any_join_distinct_right_table_keys を処理し、#29007 をクローズ。#29014 (Vladimir C )。
エイリアス列を対象に JOIN を行う際に発生する「Not found column ... in 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 ).
外部データベース(例: MySQL)に対して、複数列を含む IN 句(例: (k,v) IN ((1, 2)) )を使用するクエリを修正しました。 #28888 (Azat Khuzhin ).
短絡評価される関数における LowCardinality のバグを修正。 #28884 をクローズ。 #28887 (Kruglov Pavel )。
コンパクトパーツからサブカラムを読み取る処理を修正。 #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 ).
分散テーブル作成時に、渡されたパラメータが誤っている場合に発生していたコアダンプを修正しました。 #28686 (Zhiyong Wang ).
system.processes テーブルに Settings.Names と Settings.Values のエイリアスを追加しました。#28685 (Vitaly )。
S2 Geometry ライブラリのサポート: s2RectAdd と s2RectContains 関数に必要な引数の数を修正。 #28663 (Bharat Nallan ).
Nullable または LowCardinality の主キーが使用されている場合に発生する無効な定数の型変換を修正しました。 #28636 (Amos Bird ).
PREWHERE を使用して "Column is not under aggregate function and not in GROUP BY" エラーを修正 (Fixes: #28461 ). #28502 (Azat Khuzhin ).
ClickHouse リリース v21.10, 2021-10-16
後方互換性のない変更
次の 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 タイプのディスクにより、静的ファイルとして Web サーバー上に読み取り専用テーブルを保存できます。#23982 、#25251 (Kseniia Sumarokova )。これは主に、共有ストレージ上での動作テストを容易にし、データセットのインポートを簡単に行うためのものです。リリース 21.11 より前での使用は推奨されません。
新しいコマンド BACKUP と RESTORE を追加しました。#21945 (Vitaly Baranov )。これは現在開発中であり、現行バージョンでの使用は想定されていません。
集約関数 sumIf および countIf を高速化しました。#28272 (Raúl Marín )。
minmax インデックスに対して仮想プロジェクションを作成しました。これにより、allow_experimental_projection_optimization が有効な場合、可能であればデータを読み込む代わりに minmax インデックスがクエリで使用されます。#26286 (Amos Bird )。
sequenceMatch と sequenceCount に 2 つのチェックを導入し、シーケンスパターンの決定的な一部がイベントリストに存在しない場合に早期終了できるようにしました。この変更により、以前は操作数の上限に達して失敗していた多くのクエリが実行可能になり、パイプライン全体の高速化にもつながります。#27729 (Jakub Kuklis )。
主キー解析を強化し、とくにゼロでない定数による除算などのバイナリ関数について、常に単調であるという情報を利用するようにしました。#28302 (Amos Bird )。
hasAll フィルター条件が Bloom filter ベースのデータスキップインデックスを活用できるようにしました。#27984 (Braulio Valdivielso Martínez )。
テーブルの起動プロセスを遅延させることで、データパートのロードを高速化しました。#28313 (Amos Bird )。
WHERE から PREWHERE へ移動される条件の数が過剰になる可能性があった問題を修正しました(設定 optimize_move_to_prewhere で制御される最適化)。#28139 (lthaooo )。
optimize_distributed_group_by_sharding_key をデフォルトで有効化しました。#28105 (Azat Khuzhin )。
Distributed テーブルを作成する前にクラスター名をチェックし、誤ったクラスター名でテーブルを作成できないようにしました。 #27832 を修正しました。 #27927 (tavplubix )。
集約関数 quantileBFloat16Weighted を、他の quantile...Weighted 関数と同様に追加しました。これにより #27745 がクローズされました。 #27758 (Ivan Novitskiy )。
空の属性リストを持つ辞書を作成できるようにしました。 #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 )。
縦方向マージでは、事前に定義された "rows_sources" ではなく、実際の tmp ファイルを使用します。これにより、tmp ディスク上に不要なディレクトリが生成されることを防ぎます。 #28299 (Amos Bird ).
clickhouse-server.service 内で環境変数 LIBHDFS3_CONF を export する代わりに、サーバーの設定に libhdfs3_conf を追加しました。これは HDFS との連携設定を行うためのものです。 #28268 (Zhichang Yu ).
Temporary 状態にあるパーツの削除処理を修正し、Part %name% doesn't exist という予期しない例外が発生する可能性があった問題を解消しました。#23661 を修正。#28221 #28221 )(Azat Khuzhin )。
zookeeper_log.address を修正します(この PR の最初のパッチが入る前は、アドレスは常に :: でした)、またこのカラムに対する getpeername(2) の呼び出し回数を減らします(zookeeper_log にエントリが追加されるたびに getpeername() が呼び出されるため、これを避けるためにアドレスを ZooKeeper クライアント内にキャッシュします)。 #28212 (Azat Khuzhin ).
インデックス指定演算子 [] でのインデックスと Map 型のキーとの間の暗黙的な型変換をサポートしました(例: Int 系の異なる型、String と FixedString など)。 #28096 (Anton Popov ).
PostgreSQL テーブルエンジンまたはテーブル関数への挿入時に、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 オブジェクトに対して multipart copy upload を使用するようにしました。 #27858 (ianton-ru ).
ライブラリ辞書パスでのシンボリックリンクの辿りを許可。 #27815 (Kseniia Sumarokova ).
これにより、ALTER MODIFY COLUM T を Nullable(T) に変更する際に mutation を伴う必要がなくなりました。#27787 (victorgao ).
ReadBufferFromS3 でエラーを黙って無視せず、遅延もカウントしないようにしました。 #27484 (Vladimir Chebotarev ).
ALTER ... MATERIALIZE TTL において、実際の TTL 処理を行わずにメタデータのみを再計算するようにして、動作を改善しました。 #27019 (lthaooo ).
ファイル終端 (EOF) に改行がなくてもカスタムトップレベルドメイン一覧を読み取れるようにしました。 #28213 (Azat Khuzhin ).
バグ修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース v21.9, 2021-09-09
後方互換性のない変更
Decimal 型のテキスト表現では末尾のゼロを出力しないようにしました。例: スケール 6 の Decimal については、1.230000 ではなく 1.23 が出力されます。これにより #15794 がクローズされます。アプリケーションが末尾のゼロに依存していた場合、ごくわずかな非互換性が生じる可能性があります。出力フォーマットでのシリアライゼーションは、設定 output_format_decimal_trailing_zeros で制御できます。toString の実装および String へのキャストは無条件に変更されます。#27680 (alexey-milovidov )。
パラメータ付き集約関数に対して、異なるパラメータで生成された集約関数状態に -Merge コンビネータを適用することを禁止しました。例えば、fooState(42)(x) の状態は fooMerge(s) や fooMerge(123)(s) でファイナライズできず、fooMerge(42)(s) のようにパラメータを明示し、かつ一致させる必要があります。quantile や sequence* のように、パラメータをファイナライズにのみ使用する一部の特殊な集約関数には影響しません。#26847 (tavplubix )。
clickhouse-local では、ポート付きのローカルアドレスは常にリモートとして扱うようにしました。#26736 (Raúl Marín )。
列エイリアスが式名と同一であるような複雑なクエリにおいて、不正なキャストが発生する可能性があった問題を修正しました。これにより #25447 が修正されます。また #26914 も修正されます。この修正により後方互換性が失われる場合があります。同一名だが異なる式が存在する場合、例外がスローされます。enable_optimize_predicate_expression が設定されているまれなケースでは動作が壊れる可能性があります。#26639 (alexey-milovidov )。
スカラーサブクエリの型が Nullable になり得る場合、常に Nullable な結果を返すようになりました。これは、サブクエリが空の場合、その結果が Null であるべきだからです。以前は、型推論がスカラーサブクエリを実行せず非 Nullable 型を用いることがあり、その結果として非互換な型に関するエラーが発生する可能性がありました。結果を Nullable に変換できない(Array や Tuple のような)スカラーサブクエリで結果が空の場合、現在はエラーがスローされます。#25411 を修正します。#26423 (Nikolai Kochetov )。
here document 用の構文を導入しました。例: SELECT $doc$ VALUE $doc$。#26671 (Maksim Kita )。クエリ内に $ を含む識別子がある場合、この変更は後方互換性がなくなります #28768 。
インデックスが Nullable 型を扱えるようになりました。isNull および isNotNull を含みます。#12433 および #12455 (Amos Bird )、さらに #27250 (Azat Khuzhin )。ただし、これはオンディスクのフォーマット変更を伴っており、新しいサーバーは古いデータを読み取れますが、古いサーバーは読み取れません。加えて、MINMAX データスキップインデックスを使用している場合、新しいインデックスでは拡張子が .idx から .idx2 に変わるため、Data after mutation/merge is not byte-identical エラーが発生する可能性があります。したがって、このような場合には既存のすべてのレプリカの更新を遅らせるべきではありません。そうしないと、古いレプリカ(< 21.9)が 21.9+ の新しいレプリカからデータをダウンロードした場合、ダウンロードしたパートに対してインデックスを適用できなくなります。
新機能
実験的機能
圧縮の代わりにカラムを暗号化する圧縮コーデック AES_128_GCM_SIV を追加。 #19896 (PHO )。今後書き換え予定のため、使用しないでください。
MaterializeMySQL を MaterializedMySQL に名称変更。 #26822 (tavplubix )。
ウィンドウ関数を一般利用可能(GA)として扱うようにし、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 関数を追加しました。この関数は型の NULL 許容性を保持しませんが、内部用ではない通常の CAST は、設定 cast_keep_nullable に従って型の NULL 許容性を保持します。#12636 をクローズ。#27382 (Kseniia Sumarokova )。
system.query_log に整形済みクエリを追加で記録するための設定 log_formatted_queries を追加しました。normalizeQuery や normalizeQueryKeepNames のような関数は、より高いパフォーマンスを実現するためにクエリのパース/整形を行わないため、これは正規化クエリの分析に役立ちます。 #27380 (Amos Bird )。
multiMatchAny などの hyperscan 関連の関数で巨大な正規表現が使用されるのを防ぐため、max_hyperscan_regexp_length と max_hyperscan_regexp_total_length の 2 つの設定項目を追加しました。 #27378 (Amos Bird )。
ビットマップ集約関数によって消費されるメモリが、メモリ制限に含めて計上されるようになりました。これにより #26555 が解決されました。#27252 (alexey-milovidov )。
S3 プロキシリゾルバ向けに 10 秒間のキャッシュを追加。 #27216 (ianton-ru ).
グローバルな mutex を廃止し、正規表現の構築ごとに個別の mutex を用いるようにしました。これにより、巨大な正規表現の構築処理が他の関連スレッドをブロックすることを防ぎます。 #27211 (Amos Bird )。
PostgreSQL データベースエンジン用スキーマのサポートを追加。 #27166 をクローズ。 #27198 (Kseniia Sumarokova )。
clickhouse-client でメモリ使用量を追跡できるようにしました。 #27191 (Filatenkov Artur ).
クエリの開始に失敗した場合でも system.query_log に query_kind を記録するようにしました。 #27182 (Amos Bird )。
テーブル system.replicas に、レプリカ名ごとのアクティブ状態を示す列 replica_is_active を追加しました。#27138 をクローズしました。#27180 (Maksim Kita ).
Web UI でサーバー URI を介してクエリ設定を渡せるようにしました。 #27177 (kolsys ).
MaxPushedDDLEntryID という新しいメトリクスを追加。これは、現在のノードが ZooKeeper にプッシュした DDL エントリ ID の最大値を示します。 #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 )。
system.rocksdb テーブル経由で RocksDB の統計情報を公開します。ClickHouse の設定ファイル内の rocksdb... キーから RocksDB のオプションを読み取ります。注記: ClickHouse は RocksDB に依存しておらず、追加の統合用ストレージエンジンの 1 つに過ぎません。 #26821 (Azat Khuzhin ).
RocksDB の内部ログをより冗長でないものにしました。注記: ClickHouse は 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 使用時の過剰な(2 回の)接続試行を修正。 #26658 (Azat Khuzhin ).
接続に失敗した場合(例: EMFILE 発生時)に clickhouse-benchmark がハングしないようにしました。 #26656 (Azat Khuzhin ).
Kafka エンジンでより多くのスレッドを使用できるようにしました。 #26642 (feihengye ).
clickhouse-benchmark にラウンドロビンのサポートを追加しました(統計レポートの出力を除き、通常のマルチホスト/マルチポート実行と違いはありません)。 #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 のオリジンと異なる場合、サーバーアドレスを Web UI の履歴 URL に保存するようにしました。これにより #26044 が解決されました。#26322 (alexey-milovidov )。
sleep / sleepEachRow 呼び出しのプロファイル用イベントを追加。 #26320 (Raúl Marín )。
シャードの接続を異なるクラスタ間で再利用できるようにしました。また、cluster テーブル関数を使用する際に新しい接続を作成しないようにもしました。 #26318 (Amos Bird )。
古い一時ディレクトリをクリーンアップする処理の実行間隔を、デフォルト値を持つパラメータで制御できるようにしました。 #26212 . #26313 (fastio ).
関数 range によって生成されるデータ量の安全性を確保するためのしきい値を調整できるように、設定項目 function_range_max_elements_in_block を追加しました。これにより #26303 が解決されます。 #26305 (alexey-milovidov )。
サンプリング時ではなくテーブル作成時にハッシュ関数をチェックするようにしました。MergeTree 用の設定を追加し、不正なサンプリング列でテーブルが作成されていても、サンプリングが一度も使用されない場合にはこの設定を無効化することで、例外を発生させずにサーバーを起動できるようにしました。 #26256 (zhaoyu ).
output_format_avro_string_column_pattern 設定を追加し、指定した String 列を、デフォルトの bytes ではなく Avro の string 型として出力するようにしました。 #22414 を実装しています。 #26245 (Ilya Golshtein )。
Log および TinyLog テーブル向けに、system.columns テーブルへカラムサイズ情報を追加しました。これにより #9001 が解決しました。#26241 (Nikolay Degterinsky )。
カスタムディスク構成を使用していて、いくつかのディスクに detached ディレクトリが存在しない場合でも、system.detached_parts テーブルをクエリしても例外をスローしないようにしました。これにより #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 ).
1 ブロック単位の readahead を行う複雑な Linux AIO の使用を廃止し、代わりに O_DIRECT を用いたシンプルな同期 I/O に置き換えました。以前のバージョンでは、max_threads が 1 より大きい場合、設定 min_bytes_to_use_direct_io が正しく動作しない可能性がありました。ダイレクト I/O(クエリに対してはデフォルトで無効、大きなマージに対してはデフォルトで有効)は、これまでよりも効率の低い方法で動作することになります。これにより #25997 が解決されました。#26003 (alexey-milovidov )。
REPLACE TABLE クエリの実行時に Distributed テーブルをフラッシュする。#24566 を解決。新しいテーブルへの挿入に失敗した場合、[CREATE OR] REPLACE TABLE ... AS SELECT クエリでテーブルを置き換え(または作成)しないようにする。#23175 を解決。#25895 (tavplubix )。
system.query_log に views カラムを追加し、クエリによって実行された(マテリアライズドビューまたはライブビューの)名前を記録するようにしました。クエリの実行中に実行された各ビューに関する情報を含む新しいログテーブル(system.query_views_log)を追加しました。ビューの実行を変更しました: ビューの実行中に例外がスローされた場合、すでに開始されているビューは、完了するまで実行を継続します。これは以前は parallel_view_processing=true のときの挙動でしたが、現在は常にこの挙動になりました。- 依存ビューは、コンテキストに対して読み取り進捗を報告するようになりました。 #25714 (Raúl Marín ).
分散クエリの実行完了後に、コネクションのドレインを非同期で行うようにしました。新しいサーバー設定 max_threads_for_connection_collector が追加され、バックグラウンドでコネクションを回収するワーカー数を指定できるようになりました。プールが一杯になっている場合、コネクションは同期的にドレインされますが、以前とは少し挙動が異なります。クライアントへ EOS を送信した後にドレインされ、十分なデータを受信した時点でクエリは即座に成功となり、発生した例外はクライアントへ投げられるのではなくログに記録されます。drain_timeout 設定(デフォルト 3 秒)を追加しました。ドレイン処理中のコネクションは、タイムアウトに達すると切断されます。 #25674 (Amos Bird )。
設定で複数の include がサポートされました。ユーザー設定やリモートサーバー設定を複数のソースからインクルードできるようになりました。from_zk、from_env、または incl 属性を持つ <include /> 要素を配置するだけで、対応する内容に置き換えられます。#24404 (nvartolomei )。
insert_distributed_one_random_shard = 1 使用時に、複数ブロックが分散テーブルへ挿入されてしまう問題を修正しました。これはマイナーな機能です。改善としてマークしました。 #23140 (Amos Bird ).
Map 型において LowCardinality および FixedString のキーおよび値をサポートしました。#21543 (hexiaoting )。
ローカルディスク設定のリロードを有効にしました。 #19526 (taiyang-li ).
不具合修正
ビルド/テスト/パッケージングの改善
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 から以前のバージョンに ダウングレード したい場合は、ログを含む system テーブルを手動で削除する必要があります。/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 )。
バグ修正
ClickHouse リリース v21.7, 2021-07-09
後方互換性のない変更
明示的に定義された大きな集合を使用するクエリのパフォーマンスを改善しました。互換性設定 legacy_column_name_of_tuple_literal を追加しました。バージョン 21.7 未満からそれ以降の任意のバージョンへクラスタをローリングアップデートする際には、これを true に設定することを推奨します。そうしないと、更新中に IN 句で明示的に定義された集合を含む分散クエリが失敗する可能性があります。 #25371 (Anton Popov )。
clickhouse-keeper(ZooKeeper の実験的な代替)の最大バッファサイズに前方/後方互換性のない変更を行いました。本番環境での稼働前、今のうちに行うことを推奨します。 #25421 (alesapin )。
新機能
XML の代替として YAML 形式での設定をサポートしました。これにより #3607 がクローズされました。#21858 (BoloniniD )。
データは(おそらく)存在しているものの ZooKeeper のメタデータが失われた場合に、レプリケートテーブルを復元する方法を提供しました。#13458 を解決します。#13652 (Mike Kot )。
Arrow/Parquet/ORC 形式における struct および map、ならびに Arrow 入出力形式における dictionary をサポートしました。新しい設定 output_format_arrow_low_cardinality_as_dictionary を追加しました。#24341 (Kruglov Pavel )。
dictionary において 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 として扱う、新しいブール型設定 prefer_global_in_and_join を追加しました。#23434 (Amos Bird )。
Join テーブルエンジンに対する ALTER DELETE クエリをサポートしました。#23260 (foolchi )。
集約関数 quantileBFloat16 と、それに対応する quantilesBFloat16 および medianBFloat16 を追加しました。これは非常にシンプルかつ高速な分位数推定器で、相対誤差は 0.390625% 以下です。これにより #16641 がクローズされました。#23204 (Ivan Novitskiy )。
flow analysis に有用な関数 sequenceNextNode() を実装しました。#19766 (achimbab )。
Experimental Feature
一部の関数をサブカラムの読み取りに変換して、読み取るデータ量を削減する最適化を追加しました。例えば、ステートメント col IS NULL はサブカラム col.null の読み取りに変換されます。この最適化は現在デフォルトでは無効ですが、optimize_functions_to_subcolumns を設定することで有効化できます。#24406 (Anton Popov ).
より多くのカラムを、可能な場合にはエイリアス式に書き換えるようにしました。これにより、プロジェクションなどの、より高度な最適化が有効になる場合があります。#24405 (Amos Bird ).
bloom_filter 型のインデックスを、定数配列を用いた hasAny 関数の式に対して使用できるようにしました。これにより次の Issue が解決されます: #24291 。#24900 (Vasily Nemkov ).
RabbitMQ キューが空の場合に、読み取り試行を再スケジュールするための指数バックオフを追加しました(ClickHouse は RabbitMQ からのデータインポートをサポートしています)。#24340 をクローズ。#24415 (Kseniia Sumarokova ).
レプリケーションの帯域幅を制限できるようにしました。2つの Replicated*MergeTree 設定 max_replicated_fetches_network_bandwidth と max_replicated_sends_network_bandwidth を追加し、テーブルごとのレプリケーションのフェッチ/送信の最大速度を制限できるようにしました。さらに、サーバー全体に適用される 2 つの設定(default ユーザープロファイル内) max_replicated_fetches_network_bandwidth_for_server と max_replicated_sends_network_bandwidth_for_server を追加し、すべてのテーブルに対するレプリケーションの最大速度を制限できるようにしました。これらの設定値は厳密に守られるわけではありません。デフォルトでは無効になっています。#1821 を修正します。 #24573 (alesapin )。
ODBC および Library ブリッジ向けのリソース制約と分離。ブリッジプロセス用に専用の clickhouse-bridge グループとユーザーを使用する。ブリッジが OOM キラーの最初の対象になるように、oom_score_adj を設定する。RSS の上限を 1 GiB に設定する。#23861 をクローズ。#25280 (Kseniia Sumarokova )。
スタンドアロンの clickhouse-keeper シンボリックリンクをメインの clickhouse バイナリに追加しました。これにより、メインの clickhouse サーバーなしでコーディネーションを実行できるようになりました。 #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 エンジンの起動時間を短縮。 #25663 (Azat Khuzhin ).
Distributed テーブルの改善。internal_replication=true の場合、ディレクトリ名 (dirname) からレプリカ情報を削除しました(これにより、任意の数のレプリカを持つクラスタから Distributed テーブルへの INSERT が可能になります。以前は最大 15 レプリカのみサポートされており、それ以上では非同期ブロック用のディレクトリ作成時に 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 カーネルのバージョンを実行時に検出するようにした(async_socket_for_remote / use_hedged_requests に必須となる、ネストした epoll が正しく動作するバージョンを判定するため。これがない場合、リモートクエリがハングする可能性がある)。#25067 (Azat Khuzhin )。
分散クエリで optimize_skip_unused_shards=1 のとき、(sharding key) IN (one-element-tuple) のような条件によってシャードをスキップできるようにしました(複数要素を持つタプルは既にサポートされていましたが、1 要素のタプルはリテラルとしてパースされていたため動作していませんでした)。#24930 (Amos Bird )。
S3 エラーのログメッセージを改善し、キーやバケットが空の場合でも二重の空白が発生しないようにしました。 #24897 (Vladimir Chebotarev ).
一部のクエリでは、複数パスのセマンティック解析が必要になります。この場合は、IN 用に構築済みの集合を再利用してください。 #24874 (Amos Bird )。
insert_distributed_sync で max_distributed_connections の制限を遵守するようにしました(そうしないと、大規模クラスタで同期挿入を行う際に 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 )。
PostgreSQL において INSERT クエリでデフォルト以外のスキーマを指定するためのサポート。Closes #24149 . #24413 (Kseniia Sumarokova ).
IPv6 アドレス解決の問題を修正します(select * from remote('[::1]', system.one) が正しく動作するように修正)。#24319 (Azat Khuzhin )。
複数行モードでサブクエリを含む FROM 句内の末尾空白を修正し、クエリ結果の出力形式も人間にとってより読みやすいようにわずかに変更しました。 #24151 (Azat Khuzhin ).
Distributed テーブルの改善。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 と Data Skipping Indices をサポート。内部の Distributed テーブルを作成する際には、それらを単純に削除する(基になるテーブルには TTL と skipping indices が保持される)。#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 テーブルへの INSERT において、insert_allow_materialized_columns(マテリアライズドカラムを許可する設定)を反映するようにしました。 #23349 (Azat Khuzhin ).
分散クエリに対して LIMIT 句のプッシュダウンを行えるようにする機能を追加しました。 #23027 (Azat Khuzhin ).
複数の S3 ボリュームでのゼロコピー レプリケーションの不具合を修正 (Fixes #22679 ). #22864 (ianton-ru ).
ユーザーがオペレーティングシステムに空きポートの割り当てを任せた場合に、実際にバインドされたポート番号を特定してログメッセージに表示するようにしました。 #25569 (bnaecker ).
PostgreSQL の配列を変換する際に、attndims が一部のケースで正しく動作しないため、n 次元配列ではなく String 型に変換されてしまうことがある問題を修正しました。関連する issue #24804 をクローズしました。 #25538 (Kseniia Sumarokova )。
MySQL、PostgreSQL、ODBC 向けのタイムゾーン付き DateTime 型の変換を修正。#5057 をクローズ。#25528 (Kseniia Sumarokova )。
異なるテーブルごとに KILL MUTATION を区別するようにし、予期しない Cancelled mutating parts エラーを修正。#25025 (Azat Khuzhin )。
バケットのルート直下に S3 ディスクを宣言できるようにしました(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 )。
他の集約関数の状態を集約して集約関数状態を計算する際に発生しうるクラッシュを修正しました(実用的なユースケースではありません)。#24523 を参照してください。#25015 (alexey-milovidov )。
SYSTEM RESTART REPLICA または SYSTEM SYNC REPLICA クエリが完了しない場合の動作を修正しました。これは、RAM の容量が極端に少ないサーバーで発生することが確認されました。 #24457 (Nikita Mikhaylov )。
ZooKeeper クライアントが clickhouse-server 内でハングする可能性のあるバグを修正しました。 #24721 (alesapin ).
ZooKeeper への接続が失われ、その後接続が復旧したあとでレプリカがクローンされた場合、そのレプリケーションキューに古いエントリが含まれている可能性がありました。レプリケーションキューに互いに交差する仮想パーツが含まれている場合に発生していたアサーション失敗を修正しました。これは、一部のデータパーツが失われた場合に、まれに発生することがあります。プロセスを終了する代わりに、ログにエラーを出力するようにしました。 #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 で誤った合計値が返される問題を修正。 #20872 を修正。 #25539 (Anton Popov )。
クラスタ構成を再読み込みしている最中に system.clusters をクエリすると発生するデータレースを修正しました。 #25737 (Amos Bird ).
データベース間で Distributed テーブルを移動する際に発生していた No such file or directory エラーを修正しました。 この修正により #24971 が解決されます。 #25667 (tavplubix )。
REPLACE PARTITION は、まれなケースとしてソースパーティションが空の場合に無視されることがありました。これは修正されました。#24869 を解決します。#25665 (tavplubix )。
Replicated データベースエンジンで、まれに一部のレプリカがキューに入れられた DDL クエリをスキップしてしまう可能性のある不具合を修正しました。 #24805 (tavplubix ).
クエリなしで EXPLAIN AST を実行した場合のヌルポインタの逆参照を修正。 #25631 (Nikolai Kochetov ).
空のパーツが自動削除されるのを待つ処理を修正しました。これが原因でバックグラウンドプールが完全に埋まり、レプリケーションが停止してしまう可能性がありました。 #23315 (Anton Popov ).
S3 仮想ファイルシステム上に保存されたテーブルの復元機能を修正しました(この機能は実験的なものであり、本番環境での利用にはまだ適していません)。 #25601 (ianton-ru ).
Decimal256 を使用する際の Arrow フォーマットにおけるヌルポインタデリファレンスを修正。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 )。
NULL 非許容カラムに対する joinGetOrNull の誤った動作を修正しました。これにより #24261 が修正されました。#25288 (Amos Bird )。
大きな整数での誤った動作と UBSan レポートを修正しました。以前のバージョンでは CAST(1e19 AS UInt128) はゼロを返していました。#25279 (alexey-milovidov ).
CSVWithNames フォーマットを使用して列のサブセットを挿入する際に発生していたエラーを修正しました。 #25129 を修正。 #25169 (Nikita Mikhaylov ).
FINAL 付きの SELECT ではテーブルのプロジェクションを使用しないでください。まだサポートされていません。 #25163 (Amos Bird ).
パーティションキーに UUID を使用しているテーブルで、バージョン 21.5 へアップグレードした際にパーツが失われる可能性がある問題を修正しました(パーティションキーに UUID を使用することは推奨されません)。#25070 を修正。#25127 (Nikolai Kochetov )。
joined_subquery_requires_alias = 0 の場合に cross join を含むクエリがクラッシュする問題を修正。#24011 を修正。#25082 (Nikolai Kochetov )。
empty column was returned by function mapContains というエラーを引き起こしていた、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 フォーマットにおけるヒープバッファーオーバーフローが発生しうる問題を修正しました。 #24922 (Kruglov Pavel ).
DiskS3 からファイルを読み込む際に発生する可能性があったエラー 'Cannot read from istream at offset 0' を修正しました(S3 仮想ファイルシステムは開発中の実験的機能であり、本番環境では使用しないでください)。 #24885 (Pavel Kovalenko ).
分散マテリアライズドビューを結合に使用する際に発生する「Missing columns」例外を修正。 #24870 (Azat Khuzhin ).
PostgreSQL互換プロトコルで NULL 値を許可できるようにしました。#22622 を解決しました。#24857 (Kseniia Sumarokova )。
ミューテーションがまだメモリにロードされていないにもかかわらず、ミューテーション待機中のクライアント側に例外 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 バージョンでは、バッファのフラッシュ中に total_writes.bytes カウンタが過度に減少していました。その結果、カウンタがオーバーフローし、フラッシュ後しばらくすると 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" メッセージでは、境界の直前にある CRLF も境界の一部として扱うようにしました。#23905 を修正。#24399 (Ivan )。
偽のパーツと交差してしまう DROP PARTITION の問題を修正しました。まれに、mutation version が現在の block number より大きいパーツが存在する可能性がありました。 #24321 (Amos Bird ).
Ordinary データベースから Atomic データベースへのマテリアライズドビューの移動(RENAME TABLE クエリ)に関するバグを修正しました。これにより、マテリアライズドビューとともに内部テーブルも新しいデータベースに移動されるようになりました。#23926 を修正。#24309 (tavplubix )。
空の HTTP ヘッダーを許可するようにしました。#23901 を修正。#24285 (Ivan )。
Memory テーブルにおけるミューテーション(ALTER UPDATE/DELETE)の処理を正しく行えるよう修正。#24274 をクローズ。#24275 (flynn )。
JOIN 出力におけるカラムの LowCardinality プロパティを入力と同じになるようにし、#23351 および #20315 をクローズしました。 #24061 (Vladimir )。
Kafka テーブルに対する修正。Engine = Kafka のとき、同じコンシューマーが以前に空のアサインメントだった場合に、フェイルオーバー時の動作のバグによりコンシュームを開始できなかった不具合を修正。#21118 をクローズ。#21267 (filimonov )。
ビルド/テスト/パッケージングの改善
CI に darwin-aarch64 (Mac M1 / Apple Silicon) ビルドを追加し、ドキュメントおよびウェブサイトへのリンクを追加しました。 #25560 (Ivan )(リンク追加: alexey-milovidov )。
バイナリリソースを実行ファイルに埋め込むクロスプラットフォームな仕組みを追加しました。Illumos 上で動作します。 #25146 (bnaecker ).
ファジングを改善するため、join 関連のオプションをストレステストに追加しました。 #25200 (Vladimir ).
osx で s3 モジュール付きビルドを有効化しました。 #25217 、#25218 (kevin wan ).
JDBC bridge をカバーするインテグレーションテストケースを追加しました。 #25047 (Zhichun Wu ).
インテグレーションテストの設定において dictionaries を特別扱いするようになりました。残っていた dictionaries の手動セットアップを削除しました。 #24728 (Ilya Yatsishin ).
YAMLParser クラス向けの libfuzzer テストを追加しました。 #24480 (BoloniniD ).
インテグレーションテストの実行には Ubuntu 20.04 を使用するようにし、インテグレーションテスト実行に用いる docker-compose のバージョンを 1.28.2 に更新しました。環境変数が docker-compose に反映されるようになりました。test_dictionaries_all_layouts_separate_sources を並列実行が可能となるよう作り直しました。 #20393 (Ilya Yatsishin ).
インストールスクリプト内の TOCTOU エラーを修正しました。 #25277 (alexey-milovidov ).
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' のように記述してください。
新機能
PostgreSQL 風のキャスト演算子(::)を追加しました。例:[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 クエリを使用した辞書の作成をサポートしました。 #22354 をクローズ。DETACH DICTIONARY PERMANENTLY のサポートを追加しました。Atomic データベースエンジン向けに EXCHANGE DICTIONARIES のサポートを追加しました。RENAME DICTIONARY を使用してデータベース間で辞書を移動する機能を追加しました。 #23436 (Maksim Kita )。
集約関数 uniqTheta を追加して、ClickHouse で Theta Sketch をサポートしました。#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 辞書ソースで、Content-Encoding HTTP ヘッダーで指定された HTTP 圧縮のサポートを追加しました。これにより #8912 が解決されました。 #23946 (FArthur-cmd )。
SYSTEM QUERY RELOAD MODEL、SYSTEM QUERY RELOAD MODELS を追加しました。 #18722 をクローズしました。 #23182 (Maksim Kita ).
EXPLAIN PLAN クエリに対して、json(boolean 型、デフォルトは 0)設定を追加しました。有効にすると、クエリの出力は 1 行の JSON になります。不要なエスケープを避けるため、TSVRaw フォーマットの使用を推奨します。#23082 (Nikolai Kochetov )。
EXPLAIN PIPELINE クエリに設定 indexes(真偽値、デフォルトは無効)を追加しました。有効にすると、使用されたインデックスと、適用された各インデックスごとのフィルターされたパーツ数およびグラニュール数を表示します。MergeTree* テーブルでサポートされています。 #22352 (Nikolai Kochetov )。
LDAP: Active Directory グループを ClickHouse ロールにマッピングする際に使用するユーザー DN の検出機能を実装しました。 #22228 (Denis Glazachev ).
連続する行同士の差分を合計しつつ、タイムスタンプを保存することでマージ時にも順序を維持する新しい集約関数 deltaSumTimestamp。 #21888 (Russ Frank )。
Docker 環境でも正しく動作する、よりセキュリティレベルの低い IMDS 資格情報プロバイダを S3 向けに追加しました。 #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 入力形式で、ファイルサイズが巨大な場合にメモリコストが高くなるテーブル全体の一括読み込みではなく、stripe 単位で読み込むようにしました。 #23102 (Chao Ma )。
クエリ内の集約関数 sum、count、avg を 1 つの集約関数へ融合しました。この最適化は optimize_fuse_sum_count_avg 設定で制御できます。これは新しい集約関数 sumCount によって実装されています。この関数は 2 つのフィールド sum と count からなるタプルを返します。 #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 をデフォルトで有効化しました(大きなファンアウトを持つ Distributed テーブルをクエリする際のスレッド数を削減します)。 #23683 (Nikolai Kochetov )。
MergeTree テーブルファミリーに _partition_value 仮想カラムを追加しました。このカラムは、パーティションを決定論的にプルーニングするために使用できます。ミューテーション用のパーティションマッチャーを実装するために必要です。 #23673 (Amos Bird )。
S3 ストレージおよびディスク向けに region パラメータを追加しました。 #23846 (Vladimir Chebotarev ).
異なるログチャネルごとに別々のログレベルを設定できるようにしました。 #19569 をクローズしました。 #23857 (filimonov )。
DateTime の操作でタイムゾーンが明示的に指定されていない場合、そのデフォルトのタイムゾーン設定を変更しないようにしました。たとえば、タイムゾーンなしの DateTime 型の値に 1 秒を加算しても、引き続きタイムゾーンなしの DateTime のままです。以前のバージョンでは、返されるデータ型にデフォルトのタイムゾーンの値が明示的に設定されていたため、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 )。
Function now64 はオプションのタイムゾーン引数をサポートするようになりました。 #24091 (Vasily Nemkov ).
clickhouse-client のインタラクティブモードで、データの途中に表示されるプログレスバーが、ターミナル上の表示中のデータの一部を上書きしてしまうケースを修正しました。これにより、#19283 がクローズされました。 #23050 (alexey-milovidov )。
メモリ割り当てに失敗した場合に発生する simdjson のクラッシュを修正。 https://github.com/simdjson/simdjson/pull/1567 。非常にまれなバグであるため、改善として扱う。 #24147 (Amos Bird )。
ストレージのシャットダウンまで辞書を保持するようにしました(これにより、Buffer エンジンの最終フラッシュ時にサーバーシャットダウン時に発生する可能性のある external dictionary 'DICT' not found エラーを回避できます)。 #24068 (Azat Khuzhin ).
同一データベース内でテーブルを停止する前に Buffer テーブルをフラッシュし、下位のテーブルがすでにデタッチされていることが原因でブロックが破棄されるのを防ぎます(ログには Destination table default.a_data_01870 doesn't exist. Block of data is discarded エラーが出力されます)。 #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 辞書ソースでテーブルスキーマを指定できるようにしました。 #23958 をクローズしました。 #23980 (Kseniia Sumarokova )。
Enum 要素名に対するヒントを追加(タイプミスがある場合に名前候補を提示)。#17112 をクローズ。#23919 (flynn )。
辞書に対して値が見つかった割合(found rate、値が見つかった件数のパーセンテージ)を測定します(system.dictionaries の found_rate を参照)。 #23916 (Azat Khuzhin )。
テーブル設定 rabbitmq_queue_settings_list を介して、特定のキュー設定を追加できるようにしました(#23737 および #23918 をクローズ)。ユーザーが RabbitMQ のセットアップ全体を制御できるようにしました。テーブル設定 rabbitmq_queue_consume が 1 に設定されている場合、RabbitMQ テーブルエンジンは指定されたキューへの接続のみを行い、exchange・queue・binding の宣言といった RabbitMQ のコンシューマ側のセットアップは一切実行しません(#21757 をクローズ)。RabbitMQ テーブルが削除された際の適切なクリーンアップ処理を追加しました。テーブルが宣言したキューおよび、テーブルによって作成された場合にはそれらにバインドされているすべての exchange を削除します。#23887 (Kseniia Sumarokova )。
system.distribution_queue に broken_data_files / broken_data_compressed_bytes を追加しました。Distributed テーブルへの非同期挿入用で、破損としてマークされたファイル数を表すメトリクス (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 をゼロに設定した場合、Distributed テーブルへのすべてのクエリは、メッセージに「logical error」を含む例外をスローします。しかし、実際にはこれは想定どおりの動作であり論理エラーではないため、例外メッセージはやや不正確でした。また、このメッセージにより、論理エラーが一切発生しないことを確認する CI 環境でのチェックがトリガーされていました。その代わりに、max_distributed_connections がゼロに誤設定されている場合は、取り得る最小値(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 テーブルエンジン、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 )。
DROP PARTITION が交差するフェイクパーツと関わる場合の問題を修正しました。まれに、現在のブロック番号より大きいミューテーションバージョンを持つパーツが存在することがあります。 #24321 (Amos Bird ).
Ordinary データベースから Atomic データベースへ RENAME TABLE クエリでマテリアライズドビューを移動する際のバグを修正しました。これにより、マテリアライズドビューとともに内部テーブルも新しいデータベースに移動されるようになりました。 #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 カラムを const 条件で更新する際に発生するクラッシュを修正。#24183 (hexiaoting )。
高負荷時に RBAC で発生する可能性のあるレースコンディションを修正しました。この PR では #24090 、#24134 、#24176 を修正します(Vitaly Baranov )。
まれに発生する可能性のあるバグを修正しました。このバグにより、書き込みリクエスト(insert / alter など)を受け付けてしまう、部分的に初期化されたテーブルが作成されることがありました。現在は、そのようなテーブルは読み取り専用モードになります。 #24122 (alesapin ).
問題の修正: SELECT xxx FINAL を含む EXPLAIN PIPELINE で誤ったパイプラインが表示される不具合を修正しました。(hexiaoting )
WHERE 句で定数の 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 とオーバーフロー行で発生する SIGSEGV を修正しました(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' のようなクエリ)。 #23962 (Azat Khuzhin ).
ソースに重複が存在する CACHE 辞書に対するキー関連メトリクスの集計処理を修正します(DictCacheKeysRequestedMiss のオーバーフローが発生していた問題)。 #23929 (Azat Khuzhin ).
PostgreSQL エンジンのコネクションプール実装を修正し、#23897 をクローズ。 #23909 (Kseniia Sumarokova )。
GROUP BY と集約関数を通常の関数でラップした場合における distributed_group_by_no_merge = 2 の挙動を修正しました(#23546 で不具合が生じていました)。distributed_group_by_no_merge = 2 をウィンドウ関数と併用しようとした場合には例外をスローします。ウィンドウ関数を含むクエリでは 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 )。
CLEAR COLUMN がマテリアライズドビューにより参照されている場合に動作しない問題を修正。#23764 をクローズ。#23781 (flynn )。
Values フォーマットが使用されている場合に HDFS から読み込む際の、解放済みメモリの使用(heap use after free)を修正。 #23761 (Kseniia Sumarokova )。
Distributed への INSERT 時に(一部の例外が発生した場合に)発生する可能性のある「Cannot schedule a task」エラーを回避。 #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 は、すべての子要素をインデックスの配列として返します。これは dictGetHierarchy の逆変換です。関数 dictGetDescendants は、dictGetChildren を level 回再帰的に適用した場合と同様に、すべての子孫を返します。level に 0 を指定した場合は無限大とみなされます。dictGetHierarchy、dictIsIn 関数のパフォーマンスも向上しました。 #14656 をクローズ。 #22096 (Maksim Kita ).
関数 dictGetOrNull を追加しました。これは dictGet と同様に動作しますが、辞書内にキーが存在しない場合は Null を返します。 #22375 をクローズ。 #22413 (Maksim Kita ).
テーブル関数 s3Cluster を追加しました。これにより、指定されたクラスタの各ノード上で s3 内のファイルを並列処理できます。 #22012 (Nikita Mikhaylov ).
MySQL/PostgreSQL テーブルエンジン / テーブル関数に、レプリカおよびシャードのサポートを追加しました。SELECT * FROM mysql('host{1,2}-{1|2}', ...) のように記述できます。 #20969 をクローズ。 #22217 (Kseniia Sumarokova ).
ALTER TABLE ... FETCH PART ... クエリを追加しました。これは FETCH PARTITION に似ていますが、単一のパーツのみをフェッチします。 #22706 (turbo jason ).
再帰クエリが Distributed テーブルに対して到達できる深さを制限する設定 max_distributed_depth を追加しました。 #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-like テーブルエンジンおよび Parquet、Arrow、ORC などのカラム指向フォーマットで、一部のカラムのみを読み込む場合のパフォーマンスを改善しました。これにより #issue:20129 がクローズされました。#21302 (keenwolf )。
バージョン 21.1 以前と同様に、より多くの条件を PREWHERE に移動できるようにしました(内部ヒューリスティクスの調整)。移動される条件が少なすぎる場合、パフォーマンスの低下につながる可能性があります。#23397 (Anton Popov )。
ODBC 接続のパフォーマンスを改善し、バックログにあった未解決の問題をすべて修正しました。Poco::ODBC の代わりに nanodbc ライブラリを使用しています。#9678 をクローズしました。ODBC テーブルエンジンに対して DateTime64 および Decimal* のサポートを追加しました。#21961 をクローズしました。キリル文字テキストが切り詰められる問題を修正しました。#16246 をクローズしました。ODBC ブリッジ向けにコネクションプールを追加しました。#21972 (Kseniia Sumarokova )。
不具合修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.4
ClickHouse リリース 21.4.1 2021-04-12
後方互換性のない変更
toStartOfIntervalFunction は、時間間隔を真夜中に揃えるようになります(以前のバージョンでは Unix epoch の開始に揃えていました)。たとえば、toStartOfInterval(x, INTERVAL 11 HOUR) は 1 日を次の 3 つの区間に分割します: 00:00:00..10:59:59、11:00:00..21:59:59、22:00:00..23:59:59。この動作は実務上のニーズにより適しています。この変更により #9510 がクローズされました。 #22060 (alexey-milovidov )。
graphite のロールアップ設定における Age と Precision は、保持期間ごとに単調増加している必要があります。現在はこれが検証され、不正な設定は例外をスローします。 #21496 (Mikhail f. Shiryaev )。
カスタムのトップレベルドメインリストに含まれる 3 階層以上のドメインに対して、cutToFirstSignificantSubdomainCustom() / firstSignificantSubdomainCustom() が誤った結果を返す問題を修正しました。これらのカスタム TLD にマッチする入力ドメインに対して、第 3 階層のドメインが最初の重要なサブドメインとみなされていました。これは修正済みです。この変更により、たとえばシャーディングキーなどでこの関数を使用している場合には非互換が発生する可能性があります。 #21946 (Azat Khuzhin )。
テーブル system.dictionaries のカラム keys は、カラム key.names と key.types に置き換えられました。テーブル system.dictionaries のカラム key.names、key.types、attribute.names、attribute.types は、辞書がロードされていることを必要としません。 #21884 (Maksim Kita )。
このバージョンでは、ALTER TABLE ATTACH PART[ITION] コマンドを処理しているレプリカは、他のレプリカからデータをフェッチする前に、自身の detached/ フォルダを検索します。実装の詳細として、複製ログに新しいコマンド ATTACH_PART が導入されました。パーツはチェックサムによって検索および比較されます。 #18978 (Mike Kot )。注意 :
クラスタのアップグレード中は ATTACH PART[ITION] クエリが動作しない場合があります。
新しいバージョンで ALTER ... ATTACH クエリを実行した後は、古い ClickHouse バージョンにロールバックすることはできません。古いサーバーは複製ログ内の 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 リクエスト向けの Kerberos 認証(GSS-SPNEGO)のサポートを追加しました。#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 辞書ソースを追加しました。 #14528 をクローズしました。 #21321 (Maksim Kita )。
テーブル関数 dictionary を追加しました。Dictionary エンジンと同様に動作します。#21560 をクローズしました。#21910 (Maksim Kita )。
PolygonDictionary 属性で Nullable 型をサポートしました。 #21890 (Maksim Kita ).
DDL で作成されたディクショナリに対して、dictGet、dictHas 関数は、データベース名が指定されていない場合に現在のデータベース名を使用するようになりました。 #21632 をクローズ。 #21859 (Maksim Kita )。
関数 dictGetOrNull を追加しました。dictGet と同様に動作しますが、辞書内にキーが見つからなかった場合は 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 データ型のタイムゾーン名を返す関数 timezoneOf を追加しました。これは #9959 をクローズするものではありません。関数名の不整合を修正するため、エイリアスとして timezone および timeZone、さらに toTimezone と toTimeZone、timezoneOf と timeZoneOf を追加しました。 #22001 (alexey-milovidov ).
CREATE/ALTER USER コマンドに、新しいオプション句 GRANTEES を追加しました。これは、このユーザーが GRANT オプション付きで必要なすべてのアクセス権を持っていることを条件として、このユーザーから権限を付与されることが許可されているユーザーまたはロールを指定します。デフォルトでは GRANTEES ANY が使用され、これは GRANT オプションを持つユーザーが任意の相手に権限を付与できることを意味します。構文: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]。#21641 (Vitaly Baranov )。
system.clusters に新しいカラム slowdowns_count を追加しました。ヘッジ付きリクエストを使用する場合、このカラムには、そのレプリカの応答が遅かったために別のレプリカへ切り替えた回数が表示されます。また、system.clusters で errors_count の実際の値も表示するようにしました。 #21480 (Kruglov Pavel ).
MergeTree* エンジン向けに _partition_id 仮想カラムを追加しました。_partition_id によるパーティションのプルーニングが可能になりました。パーティションID文字列を計算するための partitionID() 関数を追加しました。 #21401 (Amos Bird )。
IPv4 または IPv6 アドレスが指定された CIDR ネットワークプレフィックスに含まれているかどうかをテストする関数 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 の場合は同一です。これにより #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 設定で読み取られるファイル用のキャッシュを追加しました。設定値が小さい場合に、頻繁な mmap/munmap 呼び出しとそれに伴うページフォルトを回避することで、顕著な(2 倍以上の)パフォーマンス向上が得られます。なお、mmap IO には本番環境での信頼性を下げる大きな欠点があります(例: 不良ディスクでのハングや SIGBUS の発生、メモリ使用量の制御性の低さ)。とはいえ、ベンチマーク用途では有効です。 #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 を含むクエリでは、ソートキーに含まれるカラムを PREWHERE に移動できるようになりました。 #21830 (foolchi ).
memcpy を別の実装に置き換えることでパフォーマンスを向上しました。これにより #18583 がクローズされました。 #21520 (alexey-milovidov ).
並び替えキー順での集約処理(設定 optimize_aggregation_in_order 有効時)のパフォーマンスを改善しました。 #19401 (Anton Popov ).
PostgreSQL のテーブル/データベースエンジンおよび辞書ソース向けにコネクションプールを追加しました。#21444 が解消されるはずです。#21839 (Kseniia Sumarokova )。
postgres ストレージおよびテーブル関数でデフォルト以外のテーブルスキーマをサポートしました。 #21701 をクローズしました。 #21711 (Kseniia Sumarokova ).
Postgres 辞書ソースにおいてレプリカの優先順位をサポートしました。 #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 エラーを修正。既に存在する場合は一時フェッチディレクトリを削除するようにした。#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 を返します。このような式は、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 )。
windowFunnel 関数にオプション strict_increase を追加し、各イベントを一度だけカウントできるようにしました(#21835 を解決)。#22025 (Vladimir )。
MergeTree テーブルのパーティションキーに Date または DateTime 列が含まれておらず、ちょうど 1 つの DateTime64 列のみが含まれている場合、その値を 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 を追加し、データ読み取りタイムアウトの単位を秒からミリ秒に変更しました。 #21886 (Kruglov Pavel )。
DiskS3(開発中の実験的機能)。キャッシュディスクを使用している場合に、移動先が空でないとディレクトリを移動できない不具合を修正。 #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 で扱うシャーディングキー値の数を制限するための設定 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 ).
これにより、すでに対象範囲に含まれている部分を変更しようとしても、ClickHouse は LOGICAL_ERROR 例外をスローしなくなりました。#22013 を修正しました。#22291 (alesapin )。
バグ修正
HedgedConnections でパケットレシーバーをキャンセルする前にソケットを epoll から削除し、潜在的なレースコンディションを防止します。#22161 を修正。#22443 (Kruglov Pavel )。
並列パース用ルーチンに(不足していた)メモリ使用量の計測を追加しました。これまでのバージョンでは、結果セットに非常に大きなデータブロックが含まれている場合に OOM(Out Of Memory)が発生する可能性がありました。これにより #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 ).
TOTALS と arrayJoin を伴う JOIN で発生するエラー Invalid number of rows in Chunk が発生する問題を修正。#19303 をクローズ。#22129 (Vladimir )。
Kafka からメッセージをポーリングするために使われていたバックグラウンドスレッドプール名の不具合を修正しました。スレッドプールが壊れている Kafka エンジンは、メッセージキューからメッセージを消費できません。#22122 (fastio )。
ReplicatedMergeTree テーブルエンジンに対する OPTIMIZE および ALTER クエリが待ち状態のままになる問題を修正しました。これにより、テーブルがデタッチまたは再起動された場合でも、クエリがハングしなくなりました。 #22118 (alesapin ).
不具合のある Linux カーネルでは async_socket_for_remote / use_hedged_requests を無効化しました。#22109 (Azat Khuzhin )。
Docker エントリポイント: LOG_PATH が空の場合に . を chown しないようにしました。 #22100 をクローズしました。 #22102 (filimonov )。
関数 decrypt には、AEAD モードで暗号化されたデータの最小サイズを検証するチェックが不足していました。これにより #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 )。
ハッシュ型の外部ディクショナリをロードする際にメモリ使用量が大幅に増加する可能性があった変更 #15454 をリバートしました。これにより #21935 が解決されます。 #21948 (Maksim Kita )。
ヘッジド接続の重複発生(Unknown packet 9 from server エラー)を防止しました。 #21941 (Azat Khuzhin ).
一部のケースで、Content-Type が "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 )。
二段階集約を使用している場合に、Distinct コンビネータ付きの集約関数で発生し得るクラッシュを修正しました。これは #18365 のフォローアップ修正です。本番環境でのみ再現可能な問題です。 #21818 (Amos Bird )。
スカラーサブクエリに対するインデックス解析を修正。これは、#18896 で導入された不具合である #21717 を解消します。 #21766 (Amos Bird )。
ReplicatedMerge テーブルエンジンにおいて、ALTER MODIFY COLUMN クエリで Decimal 列のサイズ(32ビットまたは64ビット)が変わらない場合に、その型が変更されない不具合を修正。 #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 )。
S3 にデータを書き込む際にエラーが発生すると、std::terminate が呼び出されていました。 #21624 (Vladimir ).
optimize_skip_unused_shards が有効で、かつ使用されるシャードが 0 の場合に発生する可能性のある Cannot find column エラーを修正。 #21579 (Azat Khuzhin ).
クエリに定数の WHERE 句があり、optimize_skip_unused_shards 設定が有効な場合、すべてのシャードがスキップされてしまい、クエリが誤って空の結果を返す可能性があります。 #21550 (Amos Bird )。
テーブル関数 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
後方互換性のない変更
古い構文でテーブル TTL を指定した MergeTree テーブルを作成することはできなくなりました。この場合、その TTL は単に無視されてしまうためです。既存の古いテーブルの 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 ).
新機能
ファイルエンジン設定 engine_file_empty_if_not_exists と engine_file_truncate_on_insert を追加しました。#20620 (M0r64n ).
連続する行間の差分を合計する集約関数 deltaSum を追加しました。#20057 (Russ Frank ).
system.part_log テーブルに新しい event_time_microseconds カラムを追加しました。#20027 (Bharat Nallan ).
UTC からのオフセットを秒単位で返す timezoneOffset(datetime) 関数を追加しました。この変更により #issue:19850 が解決されました。#19962 (keenwolf ).
分散テーブルから特定のシャードにデータを挿入するための設定 insert_shard_id を追加しました。#19961 (flynn ).
関数 reinterpretAs を更新し、大きな整数型(big integer)をサポートしました。#19691 を修正しました。#19858 (Maksim Kita ).
S3 クライアントで Server Side Encryption Customer Keys(x-amz-server-side-encryption-customer-(key/md5) ヘッダー)のサポートを追加しました。詳細はこちら を参照してください。#19428 をクローズしました。#19748 (Vladimir Chebotarev ).
executable 辞書ソースに implicit_key オプションを追加しました。入力キーと同じ順序でレコードが来る場合に、各レコードごとにキーを出力する必要がなくなります。#14527 を実装しました。#19677 (Maksim Kita ).
クォータ種別 query_selects および query_inserts を追加しました。#19603 (JackyWoo ).
関数 extractTextFromHTML を追加しました。#19600 (zlx19950903 ), (alexey-milovidov ).
MergeTree* エンジンを持つテーブルに、クエリの同時実行制御用の新しいテーブルレベル設定を 2 つ追加しました。設定 max_concurrent_queries は、このテーブルに関連する同時実行クエリ数の上限を設定します。設定 min_marks_to_honor_max_concurrent_queries は、クエリが少なくともこの数のマークを読み取る場合にのみ前の設定を適用するよう指定します。#19544 (Amos Bird ).
user_files ディレクトリからファイルを String として読み込む file 関数を追加しました。これは file テーブル関数とは異なります。これにより #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 が有効な場合はデータパケット)を最初に送信した接続を使用し、他の接続はキャンセルされます。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 経由で大きなレコードを挿入する際のパフォーマンスが最大 1.5 倍向上します。 #19516 (Ivan ).
Memory テーブルに compress 設定を追加しました。これを有効にすると、テーブルの RAM 使用量が少なくなります。マシン構成やデータセットによっては、SELECT 時に高速に動作することもありますが、常にそうなるとは限りません。これにより #20093 が解決されます。注意: Memory テーブルが MergeTree より遅く動作し得る理由としては、(1) 圧縮がないこと (2) ブロックサイズが固定であること (3) インデックスおよび PREWHERE がないこと、などがあります… #20168 (alexey-milovidov )。
集約処理のコードをわずかに改善。 #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 つ修正しました。これにより #20096 がクローズされました。#20132 (alexey-milovidov )。
do_not_merge_across_partitions_select_final 設定が 1 のとき、レベル > 0 の単一パートに対する 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 )。
マテリアライズドビューから参照されている列を DROP できないようにしました。#21164 をクローズ。#21303 (flynn )。
MySQL 辞書ソースは、SSL/TLS 接続時にときどき発生する予期しない接続障害(クエリ中に MySQL サーバーへの接続が失われました)を再試行するようになりました。 #21237 (Alexander Kazakov ).
ユーザビリティの改善: DateTime64 の解析の一貫性を高めました。サブ秒精度付き Unix タイムスタンプがスケールされた整数値(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 エンジンに vhost のサポートを追加 #20576 。 #20596 (Kseniia Sumarokova )。
Array と Tuple を組み合わせたデータ型のシリアル化を改善しました。enum データ型と protobuf の enum 型とのマッチングを改善しました。Map データ型のシリアル化を修正しました。省略された値にはデフォルト値が自動的に設定されるようになりました。 #20506 (Vitaly Baranov ).
分散 DDL タスクの実行と DDL キューのクリーンアップの間に発生していたレースコンディションを修正しました。これにより、アクティブなワーカーが存在する場合は ZooKeeper から DDL タスクが削除されないようになりました。 #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 クエリもクオータを消費するようになりました。クオータ消費におけるインターバルの終了時刻の計算を修正しました。 #20106 (Vitaly Baranov ).
system.zookeeper テーブルで path IN (set) 式がサポートされるようになりました。 #20105 (小路 )。
system.tables 内に MaterializeMySQL テーブルのすべての詳細を表示できるようにしました。 #20051 (Stig Bakken ).
スクリプトが入力を無視してデータを返すという誤用をした場合にのみ発生し得た、実行可能ディクショナリにおけるデータレースを修正しました。 #20045 (alexey-milovidov ).
MYSQL_OPT_RECONNECT オプションの値は、mysql replica の config セクション内にある "opt_reconnect" パラメータで制御できるようになりました。#19998 (Alexander Kazakov )。
ユーザーが JSONExtract 関数を Float32 型を指定して呼び出した場合、結果型への近似的な変換を許可します。たとえば、JSON 内の数値 0.1 は倍精度浮動小数点数であり、Float32 では正確に表現できませんが、それでもユーザーはその値を取得したい場合があります。以前のバージョンでは、変換が不正確であることを示すために、非 Nullable 型に対しては 0 を、Nullable 型に対しては NULL を返していました。このロジックは完全に正しかったものの、ユーザーにとっては意外であり、質問につながっていました。この変更により #13962 が解決されました。#19960 (alexey-milovidov )。
Distributed テーブルへの 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 など)は浮動小数点型の引数に対しては使用できなくなりました。今後は明示的に整数へ cast する必要があります。#19853 (Azat Khuzhin ).
浮動小数点型に対する lcm/gcd を禁止しました。#19532 (Azat Khuzhin ).
OPTIMIZE TABLE/マージ処理におけるメモリトラッキングを修正し、OPTIMIZE TABLE/マージ処理に対してクエリのメモリ制限およびサンプリングを考慮するようにしました。#18772 (Azat Khuzhin ).
パーティションキーとしての浮動小数点型カラムを禁止しました。詳細は #18421 を参照してください。#18464 (hexiaoting ).
型定義における過剰な括弧はサポートされなくなりました。例: Array((UInt8))。
新機能
PostgreSQL テーブルエンジンを追加(select/insert の両方に対応し、多次元配列もサポート)。テーブル関数としても利用可能。PostgreSQL ディクショナリソースを追加。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 の両方で、シャーディングキーを指定してノード間にデータを分散させることをサポートしました。#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 で Meta+Enter ホットキーの割り当てをサポート。 #19012 (sundyli ).
map データ型向けに 3 つの関数を追加: 1. mapContains(map, key) は、map のキーに 2 番目の引数 key が含まれているかどうかを確認する。2. mapKeys(map) はすべてのキーを配列形式で返す。3. mapValues(map) はすべての値を配列形式で返す。#18788 (hexiaoting )。
log_comment 設定を #18494 に関連して追加。#18549 (Zijie Lu )。
argMin および argMax 関数にタプル引数のサポートを追加しました。 #17359 (Ildus Kurbangaliev ).
EXISTS VIEW 構文をサポートしました。 #18552 (Du Chuan ).
SELECT ALL 構文を追加し、#18706 をクローズ。 #18723 (flynn )。
stat システムコールの回数を減らすことで、パーツの削除を高速化しました。これにより、以前行われていた最適化を復元しました。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 )。
集約関数 sum を高速化しました。この改善は人工的なベンチマーク上でのみ顕著で、実用上の影響はそれほど大きくありません。#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 エンジンの複数レイヤーにおけるロック競合を削減しました。#19379 (Azat Khuzhin )。
クエリプランの Filter ステップを Expression + Filter のペアに分割することをサポートしました。Expression + Expression のマージ最適化(#17458 )とあわせて、一部の式の実行を Filter ステップの後まで遅延できる場合があります。#19253 (Nikolai Kochetov )。
バグ修正
ビルド/テスト/パッケージングの改善
ClickHouse リリース 21.1
ClickHouse リリース v21.1.3.32-stable, 2021-02-03
バグ修正
ClickHouse release v21.1.2.15-stable 2021-01-18
後方互換性のない変更
設定 input_format_null_as_default がデフォルトで有効になりました。 #17525 (alexey-milovidov ).
設定ファイル内のプロファイル設定に対して、設定制約のチェックを行うようになりました。users.xml に対応する制約を満たさない設定が含まれている場合、サーバーは起動に失敗します。 #18486 (tavplubix ).
データパーツに影響するストレージ設定(write_final_mark および enable_mixed_granularity_parts)を ALTER MODIFY SETTING で変更できないように制限しました。 #18306 (Amos Bird ).
insert_quorum_parallel のデフォルト値を 1 に設定しました。「逐次的」なクォーラム挿入よりも、はるかに使い勝手が良いです。ただし、逐次一貫性に依存している場合は、この設定値を 0 に戻す必要があります。 #17567 (alexey-milovidov ).
sumburConsistentHash 関数を削除しました。これにより #18120 がクローズされます。 #18656 (alexey-milovidov ).
集約関数 timeSeriesGroupSum と timeSeriesGroupRateSum を削除しました。理由は、私の友人が「これらは一度も動作しなかった」と言ったためです。これにより #16869 が修正されます。もしこれらの関数を問題なく使えていた場合は、[email protected] までメールを送ってください。 #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 がゼロ以外の場合の toUUID(N) の結果が直感的でないために行われました。
「key usage」が正しくない SSL 証明書は拒否されます。以前のバージョンでは、これらも使用できていました。 #19262 を参照してください。
置換ファイル(/etc/metrika.xml)への incl 参照が、デフォルトの設定 (<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>) から削除されました。もし置換ファイルを使用しており、これらの暗黙の参照に依存していた場合は、アップデート前に 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 を追加しました。有効にすると、マージ処理がこのブロックに対して実行された場合と同じ変換(例: Replacing、Collapsing、Aggregating...)を、INSERT されたデータブロックに対して行います。この設定はデフォルトで有効になっています。これはマテリアライズドビューおよび 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 ファミリーのテーブル向けに、新しいストレージ設定 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 にミューテーションのサポートを追加します。これにより #9117 がクローズされます。 #15127 (flynn )。
構文 EXISTS DATABASE name をサポート。#18458 (Du Chuan ).
MySQL と同様に、組み込み関数 isIPv4String および isIPv6String をサポートしました。 #18349 (Du Chuan )。
マルチシャード構成の分散テーブルに対して、分散キーを指定せずに挿入できるようにする新しい設定 insert_distributed_one_random_shard = 1 を追加しました。 #18294 (Amos Bird ).
min_compress_block_size と max_compress_block_size の設定を MergeTreeSettings に追加しました。これらはグローバル設定よりも優先して適用され、設定されている場合にのみ有効になります。 13890 をクローズしました。 #17867 (flynn )。
64ビット Roaring ビットマップのサポートを追加しました。 #17858 (Andy Yang ).
重複の判定に使用する列のリストを明示的(またはアスタリスク/カラムトランスフォーマーによる暗黙的)に指定できるように、OPTIMIZE ... DEDUPLICATE 構文を拡張しました。... #17846 (Vasily Nemkov )。
関数 toModifiedJulianDay、fromModifiedJulianDay、toModifiedJulianDayOrNull、fromModifiedJulianDayOrNull を追加しました。これらの関数は、プロレプティックグレゴリオ暦の日付と修正ユリウス日(Modified Julian Day)番号との間の変換を行います。 #17750 (PHO )
カスタム TLD リストの利用に対応: 関数 firstSignificantSubdomainCustom、cutToFirstSignificantSubdomainCustom を追加。 #17748 (Azat Khuzhin )。
ネイティブな TCP インターフェイスをラップするために PROXYv1 プロトコルのサポートを追加しました。クォータをプロキシから転送された IP アドレスをキーとして使用できるようにしました(PROXYv1 アドレスおよび HTTP インターフェイスからの X-Forwarded-For に適用されます)。これは、(CloudFlare などの)信頼できるプロキシ経由でのみ ClickHouse へのアクセスを提供しつつ、ユーザーの利用量や制限を元の IP アドレスごとに管理したい場合に有用です。これにより #17268 が修正されました。#17707 (alexey-milovidov )。
clickhouse-client で、Alt-Shift-E によってコマンド編集用に EDITOR を開けるようになりました。 #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 )。
クエリから SimpleAggregateFunction 型を構築するための新しい集約コンビネータ -SimpleState を追加しました。これは 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 および shingle の 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 ).
異なるイベントに同一のタイムスタンプが発生する場合における windowFunnel 関数の非決定的な結果が出る問題を修正。 #18884 (Fuwang Hu ).
Docker: clickhouse-server Docker イメージにおいて、clickhouse ユーザーおよびグループの uid/gid を固定値 101 に明示的に設定しました。 #19096 (filimonov ).
Distributed テーブルへの非同期 INSERT:MergeTree ファミリーと同様に、2 つの新しい設定が追加されました。- fsync_after_insert - 挿入ごとに fsync を実行します。これにより INSERT のパフォーマンスが低下します。- fsync_directories - すべての操作(書き込み、リネームなど)の完了後に、一時ディレクトリ(非同期 INSERT のみで使用される)に対して fsync を実行します。#18864 (Azat Khuzhin ).
SYSTEM KILL コマンドが Docker で利用できるようになりました。これにより #18847 が解決されました。 #18848 (alexey-milovidov )。
FETCH PARTITION 実行時に ZooKeeper パス内のマクロを展開するようにしました。 #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 の場合に、アロケータ内部で発生していたアサーションエラーを修正しました。現在は通常の 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 part に対するアダプティブな粒度計算を改善しました。 #18223 (alesapin ).
これで clickhouse install が Mac でも動作するようになりました。このプラットフォームでは procfs が利用できないことが原因でした。#18201 (Nikita Mikhaylov )。
SHOW ... クエリ構文に関するヒントを改善。 #18183 (Du Chuan ).
配列集約関数 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つのマージテーブルが互いのデータを読み取ろうとする場合に診断情報を追加しました。 #17854 (徐炘 )
ClickHouse の Docker イメージを使用する際に、実行中のスクリプトのタイムアウト値を上書きできるようにしました。 #17818 (Guillaume Tassery ).
システムログテーブルの ENGINE 定義の構文を検査し、一部の設定エラーを防ぐようにしました。この構文チェックはセマンティックなものではないため、存在しないカラムや式・関数といった種類の誤りは、テーブルが実際に作成されるまで検出されません。 #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 クエリの途中で "Too many parts" エラーが発生しないようにしました。 #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> 属性を使用して、system log tables から古いレコードを削除するための TTL を指定できるようにしました。#17438 (Du Chuan )。
これにより、MySQL および PostgreSQL プロトコル経由でサーバーに送信されるクエリには、それぞれ固有のインターフェース種別が割り当てられます(テーブル system.query_log の interface 列で確認できます)。MySQL には 4、PostgreSQL には 5 が使用され、一方で、以前使用されていた 1 は現在はネイティブプロトコル専用となりました。#17437 (Vitaly Baranov )。
INSERT ... SELECT ... SETTINGS クエリの SETTINGS 句のパースを修正しました。 #17414 (Azat Khuzhin ).
RadixSort でのメモリ使用量を正しく計測するようにしました。 #17412 (Nikita Mikhaylov ).
サーバーの receiveHello に eof チェックを追加して、Attempt to read after eof 例外の発生を防ぎます。 #17365 (Kruglov Pavel ).
bigint 変換時にスタックオーバーフローが発生しうる問題を回避しました。BigInt は実験的な機能です。 #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 の span をさらに追加。span データを Zipkin にエクスポートする例を追加。#16535 (Alexander Kuzmenkov ).
Cache dictionaries: 取得時のコールバックやロックを完全に排除しました。キーは「not found」と「expired」に分けず、クエリ中は同じマップで管理されます。 #14958 (Nikita Mikhaylov )。
fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync(実験的な機能)がこれまで正しく動作していなかった問題を修正。 #18845 (Azat Khuzhin ).
MaterializeMySQL エンジンのネストされたデータベースとして Atomic エンジンを使用できるようにしました。 #14849 (tavplubix )。
不具合修正
ビルド/テスト/パッケージングの改善