後方互換性を持たない変更
- これまで望ましくない挙動があった機能の修正。 Kafka/RabbitMQ/FileLog に対する direct select は許可されなくなりました。これは
stream_like_engine_allow_direct_selectを設定することで有効にできます。さらに、attached な materialized view が存在する場合は、設定で有効にしていても direct select は許可されません。Kafka と RabbitMQ では、direct select が許可されていても、デフォルトではメッセージはコミットされません。direct select でコミットを有効にするには、ストレージレベルの設定kafka{rabbitmq}_commit_on_select=1(デフォルトは0) を使用する必要があります。 #31053 (Kseniia Sumarokova). - 新しい関数の挙動の軽微な変更。 JSON_VALUE が引用符なしの文字列を返すようになりました。 #27965 をクローズします。 #31008 (Kseniia Sumarokova).
- 設定名の変更。 TSV/CSV 入力フォーマットでカスタム NULL 表現をサポートしました。TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow 入力フォーマットでの Nullable(String) のデシリアライズを修正しました。これに伴い、
output_format_csv_null_representationとoutput_format_tsv_null_representationは、それぞれformat_csv_null_representationとformat_tsv_null_representationに名前変更されました。 #30497 (Kruglov Pavel). - すでに使われていないコードのさらなる非推奨化。 これは ClickHouse 20.6 より前のバージョンを使用している場合にのみ関係します。20.6 以降は複数の leader がサポートされているため、
ReplicatedMergeTreeから「leader election」メカニズムが削除されました。古いバージョンからアップグレードする際に、古いバージョンのレプリカが leader になっている場合、アップグレード後に server は起動に失敗します。新しいバージョンを起動するには、古いバージョンのレプリカを停止してください。その後は 20.6 より前のバージョンへダウングレードできなくなります。 #32140 (tavplubix).
新機能
- clickhouse-keeper に ZooKeeper の Four Letter Words コマンドをさらに実装しました: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands. #28981 (JackyWoo). これで
clickhouse-keeperは機能面でひととおり完成しました。 Boolデータ型をサポートしました。 #31072 (kevin wan).- File、URL、HDFS ストレージおよび
INSERT INTOテーブル関数でPARTITION BYをサポートしました。#30273 をクローズしました。#30690 (Kseniia Sumarokova). CONSTRAINT ... ASSUME ...を追加しました (INSERT時のチェックは行いません) 。最適化しやすくするため、CNF へのクエリ変換を追加しました (https://github.com/ClickHouse/ClickHouse/issues/11749) 。制約を利用したシンプルなクエリ書き換えを追加しました (現時点では単純なマッチングのみに対応しており、今後は <,=,>… にも対応するよう改善予定です) 。可能な場合に、重いカラムを軽いカラムで置き換える機能を追加しました。#18787 (Nikita Vasilev).- http/url 関数での Basic 認証によるアクセス。 #31648 (michael1589).
WITH FILL修飾子のSTEP句でINTERVAL型に対応しました。 #30927 (Anton Popov).- 複数ファイルからの並列読み取りと、
FROM INFILE句でのグロブのサポートを追加しました。#30135 (Filatenkov Artur) 。 Identifierテーブルおよびデータベース向けのクエリパラメータのサポートを追加しました。#27226 をクローズしました。#28668 (Nikolay Degterinsky).- TLDR: テキストフォーマットの完全性と一貫性を大幅に改善。
TSV、TSVRaw、CSV、JSONCompactEachRow、JSONCompactStringsEachRowの各フォーマットをリファクタリングし、コードの重複を削除するとともに、-WithNamesおよび-WithNamesAndTypes接尾辞付きフォーマット向けの基本インターフェイスを追加しました。CSVWithNamesAndTypes、TSVRawWithNames、TSVRawWithNamesAndTypes、JSONCompactEachRowWIthNames、JSONCompactStringsEachRowWIthNames、RowBinaryWithNamesの各フォーマットを追加しました。TSVWithNamesAndTypes、TSVRaw(WithNames/WIthNamesAndTypes)、CSVWithNamesAndTypes、JSONCompactEachRow(WithNames/WIthNamesAndTypes)、JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes)の各フォーマットで並列パースをサポートしました。RowBinaryWithNamesAndTypesフォーマットでカラムマッピングと型チェックをサポートしました。<format_name>WIthNamesAndTypesフォーマットに記述された型がテーブル構造と一致するかどうかを確認する設定input_format_with_types_use_headerを追加しました。設定input_format_csv_empty_as_defaultを追加し、CSV フォーマットではinput_format_defaults_for_omitted_fieldsの代わりにこれを使用するようにしました (この設定はcsv_empty_as_defaultを制御すべきではないためです) 。設定input_format_defaults_for_omitted_fieldsの使い方を修正しました (以前はcsv_empty_as_defaultとしてしか使われていませんでしたが、本来は省略されたフィールドに対するデフォルト式の計算を制御すべきものです) 。TSVRawフォーマットにおける Nullable の入力/出力を修正し、このフォーマットを TSV への挿入と完全互換にしました。input_format_null_as_defaultが有効な場合のLowCardinality(Nullable)での NULL の挿入を修正しました (以前は実際の NULL ではなくデフォルト値が挿入されていました) 。JSONStringsEachRow/JSONCompactStringsEachRowフォーマットで文字列のデシリアライゼーションを修正しました (文字列は最初の ‘\n’ または ‘\t’ までしかパースされていませんでした) 。Template 入力フォーマットでRawエスケープ規則を使用できるようにしました。JSONCompactEachRow(WithNames/WIthNamesAndTypes) 入力フォーマットに診断情報を追加しました。設定min_chunk_bytes_for_parallel_parsingが単一行のバイト数より小さい場合に-WithNamesフォーマットの並列パースで発生していたバグを修正しました。#30178 (Kruglov Pavel)。CustomSeparated入出力フォーマットでカラム名と型の出力/パースを可能にしました。TSVWithNames/WithNamesAndTypesと同様のCustomSeparatedWithNames/WithNamesAndTypesフォーマットを追加しました。#31434 (Kruglov Pavel)。 - Aliyun OSS Storage のサポート。 #31286 (cfcz48).
- 設定ファイルでグローバルスレッドプールのすべての設定を行えるようになりました。#31285 (Tomáš Hromada) 。
exponentialMovingAverageと比べて、より大きなウィンドウで効果を発揮するウィンドウ関数exponentialTimeDecayedSum、exponentialTimeDecayedMax、exponentialTimeDecayedCount、exponentialTimeDecayedAvgが導入されました。あわせて、対応するユースケースも拡充されました。#29799 (Vladimir Chebotarev).- LZ4 を使用して、ファイルに書き込む前にログを圧縮するオプションを追加しました。#23860 をクローズしました。#29219 (Nikolay Degterinsky) 。
- CROSS JOIN と同じ意味を持つ
JOIN ON 1 = 1をサポートしました。これにより #25578 がクローズされます。#25894 (Vladimir C). Map型向けに Map combinator を追加。- Map 化された配列向けの従来のsum-, min-, max- Mapをsum-, min-, max- MappedArraysに名称変更。#24539 (Ildus Kurbangaliev).- HTTP からの読み取りを再試行可能にしました。#29696 をクローズします。#29894 (Kseniia Sumarokova).
実験的機能
- ClickHouse でストリーム処理を有効にするための
WINDOW VIEWを追加。 #8331 (vxider). MaterializedMySQLでOrdinaryデータベースを使用するサポートを廃止。 #31292 (Stig Bakken).- Logファミリー向けに BACKUP および RESTORE コマンドを実装。この機能は開発中です。 #30688 (Vitaly Baranov).
パフォーマンス改善
s3/url/hdfsフォーマットのParquet、ORC、Arrowの読み取り時のメモリ使用量を削減しました (設定input_format_allow_seeksで制御され、デフォルトで有効です) 。あわせて、seek を制御する設定remote_read_min_bytes_for_seekも追加しました。#10461 および #16857 をクローズしました。#30936 (Kseniia Sumarokova).- JOIN ON 内の定数条件に対する最適化を追加しました。参考: #26928。#27021 (Vladimir C).
JSONEachRowWithProgressとPrettyCompactMonoBlockを除くすべてのテキストフォーマットで、並列フォーマットをサポートしました。#31489 (Kruglov Pavel).- nullable カラムに対する count を高速化しました。#31806 (Raúl Marín).
avgおよびsumCount集約関数を高速化しました。#31694 (Raúl Marín).- JSON および XML の出力フォーマットのパフォーマンスを改善しました。#31673 (alexey-milovidov).
- データのブロックデバイスへの同期処理のパフォーマンスを改善しました。これにより #31181 をクローズしました。#31229 (zhanglistar).
LiveViewテーブルにおけるクエリのパフォーマンス問題を修正しました。#30831 を修正しました。#31006 (vzakaznikov).- クエリのパースを高速化しました。#31949 (Raúl Marín).
GraphiteMergeTreeのロールアップルールを、プレーンメトリクス用とタグ付きメトリクス用に分割できるようにしました (オプションのrule_typeフィールド) 。#25122 (Michail Safronov).remote()に対する余分なDESC TABLEリクエストを削除しました (remote('127.1', system.one)のように、db.table を文字列ではなく識別子として指定した場合、不要なDESC TABLEリクエストが発生していました) 。#32019 (Azat Khuzhin).- 設定
optimize_functions_to_subcolumnsが有効な場合、関数tupleElementがサブカラムの読み取りに最適化されるようにしました。#31261 (Anton Popov). - 設定
optimize_functions_to_subcolumnsが有効な場合、関数mapContainsがサブカラムkeyの読み取りに最適化されるようにしました。#31218 (Anton Popov). - 設定
merge_tree_min_rows_for_concurrent_read_for_remote_filesystemおよびmerge_tree_min_bytes_for_concurrent_read_for_remote_filesystemを追加しました。#30970 (Kseniia Sumarokova). StorageMergeTreeで、異なるパーティションの mutations をスキップするようにしました。#21326 (Vladimir Chebotarev).
改善
- 他のテーブルまたはDictionaryが依存している場合は、テーブルまたはDictionaryを削除できないようにしました。#30977 (tavplubix).
- 集約関数の状態のバージョン管理に対応しました。これにより、集約関数の状態のシリアライゼーションフォーマットに後方互換性を保ったまま変更を導入できるようになりました。#12552 をクローズしました。#24820 (Kseniia Sumarokova) 。
- PostgreSQL 形式の
ALTER MODIFY COLUMN構文をサポートしました。#32003 (SuperDJY) 。 RangeHashedDictionary、ComplexKeyRangeHashedDictionaryでupdate_fieldのサポートが追加されました。 #32185 (Maksim Kita).murmurHash3_128およびsipHash128関数で、任意の数の引数を受け取れるようになりました。これにより、#28774 が解決されました。#28965 (小路).HDFSストレージでデフォルト式をサポートし、ソースがカラム指向の場合のフェッチを最適化しました。 #32256 (李扬).- OpenTelemetry span のオペレーション名を改善しました。#32234 (Frank Chen) 。
- 出力フォーマット
JSONEachRowでは、Content-Type: application/x-ndjson(http://ndjson.org/) を使用してください。 #32223 (Dmitriy Dorofeev). - Template/CustomSeparated フォーマットの quoted escaping rule における不明なフィールドのスキップを改善しました。以前は引用符付き文字列しかスキップできませんでしたが、現在は任意の型の値をスキップできるようになりました。#32204 (Kruglov Pavel).
- これ以降、
clickhouse-keeperは、重複した ID やエンドポイントを含む場合、起動や設定変更の適用を拒否するようになりました。#31339 を修正しました。#32121 (alesapin) 。 - URL engine から送信される HTTP パケットの Content-Type を設定。 #32113 (Frank Chen).
output_format_json_array_of_rowsが有効な場合、JSONEachRowフォーマットでは Content-Type に ‘application/json’ を返すようにしました。 #32112 (Frank Chen).Float32/Float64の値の前にある+をパースできるようにしました。#32079 (Kruglov Pavel) 。DiskHDFSおよびStorageHDFSで、ユーザーが設定したhdfs_replicationパラメーターを使用できるようにしました。#32039 をクローズしました。#32049 (leosunli).- OpenTelemetry の span ログに ClickHouse の
exceptionフィールドとexception_codeフィールドを追加しました。#32040 (Frank Chen) 。 - OpenTelemetry の span ログの Duration を改善しました。クエリ実行時に例外が発生した場合、クエリレベルでは 0 になっていた問題を修正しました。#32038 (Frank Chen) 。
Int256のLowCardinalityを作成できない不具合を修正しました。#31832 (alexey-milovidov) 。- エンジンやpartition_by が異なる場合に、
system.*_logテーブルを再作成するようにしました。#31824 (Azat Khuzhin) 。 MaterializedMySQL: ‘table’ という名前のテーブルで発生していた問題を修正しました。#31781 (Håvard Kvålen).- ClickHouse Dictionary ソース: 事前定義済みの接続をサポート。#31705 をクローズ。#31749 (Kseniia Sumarokova).
- Kafka および RabbitMQ エンジンで、事前定義済みの接続設定を使用できるようにしました (他のインテグレーション用テーブルエンジンと同様) 。 #31691 (Kseniia Sumarokova).
- clickhouse-client で履歴をたどる際、常にプロンプトを再描画するようになりました。これにより、画面に収まりきらない非常に長いクエリの操作性が向上します。 #31675 (alexey-milovidov) (著者: Amos Bird)。
- 行/履歴単位ではなく、履歴内を移動するためのキーバインドを追加。#31641 (Azat Khuzhin) 。
max_execution_timeのチェックを改善しました。タイムアウトのチェックが行われず、クエリが長時間実行されてしまう可能性があった一部のケースを修正しました。#31636 (Raúl Marín).- 不正なパスワードハッシュが原因で
users.xmlを読み込めない場合の例外メッセージを改善しました。これにより #24126 がクローズされます。#31557 (Vitaly Baranov). - 設定でこれらのマクロが定義されていない場合、
ReplicatedMergeTreeの引数でマクロを展開する際に、Replicatedデータベースの引数にある分片名とレプリカ名を使用するようにしました。#31471 をクローズしました。#31488 (tavplubix). min/max/countプロジェクションの解析が改善されました。allow_experimental_projection_optimizationを有効にすると、仮想min/max/countプロジェクションをパーティションキーのカラムと組み合わせて使用できるようになりました。#31474 (Amos Bird) 。clickhouse-localで--pagerがサポートされるようになりました。#31457 (Azat Khuzhin) 。- 対話的なクエリ編集時のエディタ待機の問題を修正しました (
waitpid()はSIGWINCHで -1 を返し、EDITORとclickhouse-local/clickhouse-clientは同時実行されます) 。#31456 (Azat Khuzhin) 。 JSONCompactStrings(EachRow)フォーマットで、フィールドの後ろにゴミデータがある場合は例外を発生させる。#31455 (Kruglov Pavel).http_send_timeoutとhttp_receive_timeout設定のデフォルト値が、1800 (30 分) から 180 (3 分) に変更されました。#31450 (tavplubix) 。MaterializedMySQLが、CREATE TABLE ... LIKE ...DDLクエリを処理するようになりました。#31410 (Stig Bakken).- system テーブルに対して
show create tableを実行した際に、擬似的な create クエリを返すようにしました。 #31391 (SuperDJY). - これまでは、進行状況は
numbersテーブル関数でのみ表示されていましたが、numbers_mtでも表示されるようになりました。#31318 (Kseniia Sumarokova). - 行ポリシーの判定に、初期ユーザーのロールが使用されるようになりました。#31080 を参照してください。#31262 (Vitaly Baranov) 。
- 廃止された設定が変更されると、
system.warningsに警告を表示します。 #31252 (tavplubix). MergeTreeのバックグラウンドクリーンアップタスクにおけるバックオフが改善されました。設定merge_tree_clear_old_temporary_directories_interval_secondsとmerge_tree_clear_old_parts_interval_secondsは、ユーザー設定から MergeTree 設定に移動しました。#31180 (tavplubix).- これにより、各レプリカは profile events のカウンターに関する増分情報のみをクライアントに送信するようになりました。#31155 (Dmitry Novik) 。その結果、
clickhouse-clientの--hardware_utilizationオプションが利用可能になりました。 - clickhouse-client で複数行編集がデフォルトで有効になるようにしました。これにより #31121 に対応します。 #31123 (Amos Bird).
ALTERクエリにおける関数名の正規化。これにより、インデックス/プロジェクション付きでテーブルを作成する場合と、ALTER コマンドでインデックス/プロジェクションを追加する場合との間で発生するメタデータの不一致を回避できます。これは https://github.com/ClickHouse/ClickHouse/pull/20174 のフォローアップ PR です。バグ報告はなく、このケースは比較的まれであるため、改善として扱います。#31095 (Amos Bird).RENAME DATABASE/TABLE/DICTIONARYクエリでIF EXISTS修飾子をサポートしました。これを使用すると、名前変更対象の DATABASE/TABLE/DICTIONARY が存在しない場合でもエラーは発生しません。#31081 (victorgao).- パーティションが削除された際に、垂直マージをキャンセルするようにしました。これは https://github.com/ClickHouse/ClickHouse/pull/25684 および https://github.com/ClickHouse/ClickHouse/pull/30996 の後続対応です。#31057 (Amos Bird).
- ClickHouse の Dictionary ソース内のローカル session は、以後そのイベントを session log に送信しなくなりました。これにより、シャットダウン時に発生する可能性のあるデッドロック (tsan alert) が修正されます。あわせて、この PR では不安定だった
test_dictionaries_dependency_xml/も修正されています。#31013 (Vitaly Baranov) 。 - ALTERコマンドでのロックを削減。 #31010 (Amos Bird).
- clickhouse-local の対話型モードにおける
--verboseオプションを修正し、ログをファイルに出力できるようにしました。#30881 (Kseniia Sumarokova) 。 - MySQL や PostgreSQL と同様の
\l、\d、\cコマンドをclickhouse-clientに追加しました。#30876 (Pavel Medvedev) 。 clickhouse-localまたはclickhouse-clientで、--queryまたは--queries-fileとともに--interactiveオプションが指定されている場合は、まずそれらを非対話型と同様に実行し、その後で対話型モードを開始するようにしました。#30851 (Kseniia Sumarokova).- “X のローカルのパーツセットが ZooKeeper 内のパーツセットと一致しない” というエラーが発生する可能性がある問題を修正 (zookeeper から znode を削除する際に DROP が失敗した場合) 。 #30826 (Azat Khuzhin).
- Avro フォーマットが Kafka で利用できるようになりました。
output_format_avro_rows_in_file設定を追加しました。#30351 (Ilya Golshtein). - 1 つの
MaterializedPostgreSQLデータベースに対して、1 つまたは複数の PostgreSQL スキーマを指定できるようにしました。#28901 をクローズしました。#29324 をクローズしました。#28933 (Kseniia Sumarokova) 。 - clickhouse-keeper の内部通信用デフォルトポートを 44444 から 9234 に変更しました。#30879 を修正します。#31799 (alesapin).
- Decimal 型の引数を持つ関数 transform を実装しました。#31839 (李帅).
- hdfs URL 構造の追加チェックを行うことで、不正な hdfs URL の場合に debug server で abort が発生し、release server で
DB::Exception: std::out_of_range: basic_stringエラーが発生する問題を修正しました。#31042 (Kruglov Pavel). hdfsテーブル関数/エンジンで発生する可能性のあるアサーションを修正し、テストを追加しました。#31036 (Kruglov Pavel) 。
不具合修正
- positional arguments が有効な場合の group by / order by / limit by の別名に関する不具合を修正しました。#31173 をクローズしました。#31741 (Kseniia Sumarokova).
Map型でのBufferテーブルエンジンの使用に関する不具合を修正しました。#30546。#31742 (Anton Popov).use_uncompressed_cacheが有効になっているMergeTreeテーブルの読み取りを修正しました。#31826 (Anton Popov).- 処理すべき内容がない mutation が停止状態のままになる挙動を修正しました (設定
empty_result_for_aggregation_by_empty_setが有効な場合) 。 #32358 (Nikita Mikhaylov). - protobuf の書き込み時にカラムがスキップされる問題を修正しました。この PR で #31160 を修正し、コメント #31160#issuecomment-980595318 を参照してください。#31988 (Vitaly Baranov) 。
- サブクエリ内で不要なカラムを削除する際の不具合を修正しました。
group byのないクエリに集約関数がある場合は、不要であっても削除しないようにしました。#32289 (dongyifeng). - Quota の上限には達していないのに、上限超過と判定されていました。この PR で #31174 を修正しました。#31337 (sunny) 。
- partial revoke 使用時の SHOW GRANTS を修正しました。この PR で #31138 を修正しました。#31249 (Vitaly Baranov) 。
- cgroup 制限があるコンテナー内で ClickHouse を実行した際、メモリ使用量が誤って見積もられていました。#31157 (Pavel Medvedev) 。
- デフォルト式のデータ型がカラムのデータ型と異なる場合の
ALTER ... MATERIALIZE COLUMN ...クエリを修正しました。#32348 (Anton Popov) 。 Decimal引数を持つ集約関数avgWeightedで、SIGFPE によるクラッシュが発生する問題を修正しました。#32053 を修正。#32303 (tavplubix).Dictionaryテーブルが同名の XML-dictionary を参照している場合、Cannot attach 1 tables due to cyclic dependenciesエラーによりサーバーが起動できないことがありましたが、この問題を修正しました。 #31315。 #32288 (tavplubix).Quotedエスケープ規則で、Nullable(Float)の NaN のデシリアライズ時に発生するパースエラーを修正しました。 #32190 (Kruglov Pavel).- XML辞書: table の CREATE クエリで使用される識別子を、新しいバージョンへのアップグレード時に
default_databaseで修飾できるようになりました。#31963 をクローズしました。#32187 (Maksim Kita). - 一部のレプリカで設定
replicated_can_become_leaderが無効になっている場合、クォーラム付きでinsertする際にアクティブなレプリカ数が誤って判定される可能性がありました。これは修正されました。 #32157 (tavplubix). - Dictionaries: カスタムデータベースクエリで
{condition}が機能しないケースを修正しました。#32117 (Maksim Kita) 。 cast_keep_nullableを使用した、NullableからのCASTを修正しました (以前は、たとえばtoUInt32OrDefault(toNullable(toUInt32(1)))でPARAMETER_OUT_OF_BOUNDエラーが発生していました) 。#32080 (Azat Khuzhin) 。- 一部のまれなケースにおける Join Storage の CREATE TABLE を修正しました。#31680 をクローズしました。#32066 (SuperDJY).
- パートのデタッチ時に発生する
Directory ... already exists and is not emptyエラーを修正しました。#32063 (tavplubix). MaterializedMySQL(実験的機能) : MySQL のDECIMALデータの誤解釈を修正しました。#31990 (Håvard Kvålen) 。FileLog(実験的機能) engine で、table の作成に失敗した際に不要なメタデータ directory が作成される問題を修正しました。修正 #31962。 #31967 (flynn).- 一部の
GET_PARTエントリは、すべてのレプリカでパーツが失われ、同じパーティション内に他のパーツが存在しない場合、レプリケーションキュー内でハングすることがありました。この問題は、パーティションキーに整数型のカラムまたはDate[Time]のみが含まれる場合に修正されています。#31485。#31887 (tavplubix)。 UUID型の引数を持つempty関数とnotEmpty関数を修正しました。#31819 を修正。 #31883 (Anton Popov).KeeperTCPHandlerの構築時に、設定パスをkeeper_server.session_timeout_msからkeeper_server.coordination_settings.session_timeout_msへ変更しました。operation_timeoutも同様です。#31859 (JackyWoo).- Nullable の主キーが使用されている場合に発生する、Nullable 型への無効な CAST を修正しました。 (Nullable の主キーは非推奨の機能です。使用しないでください) 。これにより #31075 を修正しました。 #31823 (Amos Bird).
- SQL の再帰 UDF で発生するクラッシュを修正。 #30856 をクローズ。 #31820 (Maksim Kita) 。
- 型指定付きの関数
dictGetを Dictionary の属性に使用した際、その型がNullableの場合に発生していたクラッシュを修正しました。#30980。#31800 (Maksim Kita) 。 - ODBC クエリの結果が空の場合にクラッシュする問題を修正しました (一部の ODBC ドライバで発生) 。#31465 をクローズしました。#31766 (Kseniia Sumarokova).
- クエリプロファイラの無効化に関する不具合を修正 (
query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0の場合、クエリの終了後もクエリプロファイラが有効のままになることがありました) 。#31740 (Azat Khuzhin). - 同時に実行される
ATTACH PARTITIONクエリで、まれに発生していたセグメンテーション違反を修正しました。#31738 (tavplubix) 。 - 出力内でデータと進捗情報付きの行が混在する場合に発生する、JSONEachRowWithProgress 出力フォーマットの競合状態を修正しました。#31736 (Kruglov Pavel) 。
- 指定したクラスター名が
Replicatedデータベースの名前である場合に、ON CLUSTERクエリの実行時に発生するthere are no such cluster hereエラーを修正しました。#31723 (tavplubix). - Nullable カラムに対する
decrypt関数の一部の適用時に発生していた例外を修正しました。これにより #31662 をクローズします。これにより #31426 をクローズします。#31707 (alexey-milovidov). - 文字列にUTF-8文字が含まれている場合の
ngrams関数を修正しました。 #31706 (yandd). - 設定
input_format_allow_errors_numとinput_format_allow_errors_ratioは、IPv4などの domain types のパースでは機能していませんでしたが、修正されました。#31686 を修正。#31697 (tavplubix). MATERIALIZE COLUMNで発生するヌルポインタ例外を修正しました。#31679 (Nikolai Kochetov) 。RENAME TABLEクエリは、Ordinaryデータベース内の DDL Dictionary の名前を変更しようとした際に正しく動作していませんでしたが、修正されました。#31638 (tavplubix).sparkbar集約関数を、意図どおりに実装しました。参照: #26175#issuecomment-960353867, コメント。 #31624 (小路).- 無効な UTF-8 シーケンスを含むのがカラム名だけの場合に、不正な JSON が生成される問題を修正しました。#31534 (Kevin Michel).
- この最適化のバグが修正されるまで、
partial_merge_join_left_table_buffer_bytesを無効にしてください。詳細は #31009) を参照してください。不要なオプションpartial_merge_join_optimizationsを削除しました。#31528 (Vladimir C). - 短い
INSERT SELECTクエリでの進捗表示を修正しました。#31510 (Azat Khuzhin) 。 - GROUP BY と位置引数に関する誤動作を修正しました。#31280#issuecomment-968696186 をクローズしました。#31420 (Kseniia Sumarokova).
- S3 用の STS 認証情報プロバイダーにおける
nullptrを修正しました。#31409 (Vladimir Chebotarev) 。 - 誤りだったため、索引解析から
notLike関数を除外しました。 #31169 (sundyli). - 一部の協調ログが失われており、かつ最新のログより新しいスナップショットが存在する場合に起動できなくなることがあるKeeperのバグを修正しました。#31150 (alesapin).
- ローカルJOINにおいて右側の分散テーブルを書き換えるようにしました。#25809 を解決しました。#31105 (abel-cheng).
- 別名およびWHERE句を含む
Mergeテーブルを修正しました (以前はまったく動作していませんでした) 。 #28802 をクローズしました。 #31044 (Kseniia Sumarokova). - 引用符付き識別子における JSON_VALUE/JSON_QUERY を修正しました。これにより、json path にスペースを含められるようになりました。#30971 をクローズしました。#31003 (Kseniia Sumarokova).
- 行指向ではないフォーマットで
formatRow関数を使用すると、セグメンテーションフォルトが発生していました。そのため、このようなフォーマットではこの関数を使用できないようにしました (意味がないためです) 。#31001 (Kruglov Pavel) 。 - materialized view を drop した後の select クエリが壊れる不具合を修正しました。この問題は #30691 で報告されました。#30997 (Kseniia Sumarokova).
- ATTACH PARTITION … FROM および MOVE PARTITION … の場合、
max_partition_size_to_dropチェックをスキップする。#30995 (Amr Alaa). INTERSECTおよびEXCEPT演算子に関するいくつかのコーナーケースを修正しました。#30803 をクローズしました。#30965 (Kseniia Sumarokova).
ビルド/テスト/パッケージングの改善
- non-x86 build における誤ったフィルタリング結果を修正しました。これにより #31417 をクローズします。これにより #31524 をクローズします。#31574 (alexey-milovidov)。
- ClickHouse のビルドを完全に再現可能にしました (異なるマシンでもバイト単位で同一) 。これにより #22113 をクローズします。#31899 (alexey-milovidov)。再現可能なビルドを実現するため、binaries からビルドディレクトリへの filesystem path を削除しました。これは #22113 のために必要でした。#31838 (alexey-milovidov)。
zlib-ng、cassandra、mariadb-connector-c、xz、re2、sentry、gsasl、arrow、protobufに独自の CMakeLists を使用するようにしました。これは #20151 のために必要です。#9226 の一部です。ビルドシステムから厄介なごみを取り除くための小さな一歩です。#30599 (alexey-milovidov)。- Hermetic builds: libc の固定バージョンを使用し、ビルド中にホスト OS のソースファイルや binary file が使われないことを保証するようにしました。これにより #27133 をクローズします。これにより #21435 をクローズします。これにより #30462 をクローズします。#30011 (alexey-milovidov)。
- 特定の関数を簡単に fuzz できるよう、関数
getFuzzerData()を追加しました。これにより #23227 をクローズします。#27526 (Alexey Boykov)。 - Docker 内での capabilities の設定をより適切にしました。#31802 (Constantine Peresypkin)。
- clang の
-fstrict-vtable-pointers、-fwhole-program-vtablesコンパイルオプションを有効にしました。#20151 (Maksim Kita)。 - FreeBSD 向けクロスコンパイル時の toolchain tarball のダウンロードを回避するようにしました。#31672 (alexey-milovidov)。
- risc-v の初期サポート。注意点とテスト済みのビルドコマンドについては、development/build-cross-riscv を参照してください。#31309 (Vladimir Smirnov)。
- arm マシンで、パラメータ “-DENABLE_TESTS=OFF” を指定したコンパイルをサポートしました。#31007 (zhanghuajie)。
後方互換性を持たない変更
- SQL/JSON 関数における
json_path引数とjson引数の順序を変更しました (標準に合わせるため) 。これにより #30449 をクローズします。#30474 (Kseniia Sumarokova). MergeTreeテーブル設定write_final_markを削除しました。今後は常にtrueになります。#30455 (Kseniia Sumarokova). 対応は不要で、すべてのテーブルは新しいバージョンとの互換性があります。- 関数
bayesABは削除されました。更新したうえでこの関数を復活させるため、ご協力をお願いします。これにより #26233 をクローズします。#29934 (alexey-milovidov). - これは、実験的な
clickhouse-keeperサポートをすでに使い始めている場合にのみ関係します。ClickHouse Keeper のスナップショットは、独自の ClickHouse LZ4 block 圧縮ではなく、デフォルトでZSTDcodec によって圧縮されるようになりました。この動作は、協調設定compress_snapshots_with_zstd_formatで無効にできます (すべてのクォーラム レプリカで同じ値である必要があります) 。後方互換性の問題はかなりまれで、新しいノードが古いノードにスナップショットを送信した場合にのみ発生する可能性があります (復旧時に発生します) 。古いノードは ZSTD フォーマットのスナップショットを読み取れません。#29417 (alesapin).
新機能
- 新しい非同期
INSERTモードでは、挿入されたデータを蓄積し、バックグラウンドで 1 つのバッチとして保存できます。クライアント側では、クエリ内にデータが埋め込まれたINSERTクエリや、別のバッファ内のデータを使用するINSERTクエリ (たとえば HTTP protocol 経由のINSERTクエリ) でasync_insertを設定することで有効にできます。wait_for_async_insertが true の場合 (デフォルト) 、クライアントはデータがテーブルに flush されるまで待機します。サーバー側では、設定async_insert_threads、async_insert_max_data_size、async_insert_busy_timeout_msによって制御されます。#18282 を実装しました。#27537 (Anton Popov). #20557 (Ivan). パフォーマンスに関する注記: 非同期挿入では、1 秒あたり最大約 10,000 件の個別のINSERTクエリを実行できます。そのため、1 秒あたり数百万行の挿入性能を実現したい場合は、引き続きバッチで挿入することを推奨します。 clickhouse-localに対話型モードを追加しました。これにより、clickhouse-localを実行するだけで、サーバーに接続せずに ClickHouse のコマンドラインインターフェイスを利用し、ファイルや外部データソースのデータを処理できます。あわせて、clickhouse-clientとclickhouse-localのコードを統合しました。#7203 をクローズ。#25516 をクローズ。#22401 をクローズ。#26231 (Kseniia Sumarokova).- 実行可能 (スクリプト化可能) なユーザー定義関数のサポートが追加されました。これらは、任意のプログラミング言語で記述できるUDFです。#28803 (Maksim Kita).
- 外部データソースへの定義済み接続を許可しました。これにより、外部データソースの利用時に認証情報やアドレスを指定する必要がなくなり、代わりに名前で参照できるようになります。#28367 をクローズしました。#28577 (Kseniia Sumarokova).
systemデータベース内の対応するテーブルに対応するSCHEMATA、TABLES、VIEWS、COLUMNSビューを持つINFORMATION_SCHEMAデータベースを追加しました。#9770 をクローズしました。#28691 (tavplubix).EXISTS (サブクエリ)をサポートしました。#6852 をクローズしました。#29731 (Kseniia Sumarokova).- 監査向けのセッションロギング。成功したものと失敗したものを含む、すべてのログイン・ログアウトイベントを新しい
system.session_logテーブルに記録します。#22415 (Vasily Nemkov) (Vitaly Baranov). - 多次元のコサイン距離関数およびユークリッド距離関数、L1、L2、Lp、Linf 距離とノルムをサポート。Tuple に対するスカラー積と、Tuple に対するさまざまな算術演算子にも対応。これにより、#4509 が完全に解決され、さらにそれ以上の改善も含まれています。#27933 (Alexey Boykov) 。
INTO OUTFILEおよびFROM INFILEでの圧縮・解凍のサポートを追加しました (自動検出、または追加のオプションパラメータを使用) 。#27135 (Filatenkov Artur).- HTTP
OPTIONSリクエストによる CORS (Cross Origin Resource Sharing) のサポートを追加。これにより、Grafana は小細工なしでサーバーレスリクエストで動作するようになりました。#18693 をクローズ。#29155 (Filatenkov Artur)。 - JOIN ON を含むクエリで、論理和 (OR) がサポートされるようになりました。#21320 (Ilya Golshtein) 。
- 関数
tokensを追加しました。これにより、英数字以外の ASCII 文字を区切り文字として使って、文字列をトークンに分割できるようになりました。#29981 (Maksim Kita)。テキストから N-gram を抽出する関数ngramsを追加しました。#29699 をクローズしました。#29738 (Maksim Kita). - Unicode正規化関数
normalizeUTF8NFC、normalizeUTF8NFD、normalizeUTF8NFKC、normalizeUTF8NFKDを追加しました。#28633 (darkkeks). FileLogtable engine を使用した、ClickHouse におけるアプリケーションのログファイルのストリーミング消費。KafkaやRabbitMQengine に似ていますが、ローカルファイルシステム上の追記専用ログやローテーションされるログを対象としています。#6953 をクローズ。#25969 (flynn) (Kseniia Sumarokova).CapnProto出力フォーマットを追加し、CapnProto入力フォーマットをリファクタリングしました。 #29291 (Kruglov Pavel).- クエリ内で数値を2進数リテラルとして記述できるようになりました。例:
SELECT 0b001;。#29304 (Maksim Kita). hashed_arrayDictionary 型を追加しました。複数の属性を持つ Dictionary で使用した場合のメモリ使用量を削減します。#30236 をクローズしました。#30242 (Maksim Kita).JSONExtractKeys関数が追加されました。#30056 (Vitaly) 。- 関数
getOSKernelVersionを追加しました。OS カーネルのバージョンを含む文字列を返します。#29755 (Memo) 。 MD4およびSHA384関数を追加しました。MD4 は廃止された安全でないハッシュ関数であり、すでに一部のレガシーシステムで MD4 が使用されていて、まったく同じ結果を得る必要があるまれな場合にのみ使用できます。#29602 (Nikita Tikhomirov).- 設定ファイルで
hsts_max_ageに正の値を設定すると、ClickHouse HTTPサーバーで HSTS を有効にできます。#29516 (凌涛) 。 - Huawei OBS Storage のサポートを追加しました。 #24294 をクローズしました。 #29511 (kevin wan).
- キーが単純な正規表現に一致する要素を含むかどうかを調べる新しい関数
mapContainsKeyLike。#29471 (凌涛). 指定したパターンに一致する要素だけを保持したmapを取得する新しい関数mapExtractKeyLike。#30793 (凌涛). ALTER TABLE x MODIFY COMMENTに対応しました。#29264 (Vasily Nemkov) 。- ClickHouse にはないものの H3 API では利用できる、H3 の情報取得関数を追加しました: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
- Replicated データベースで、非レプリケートの ALTER TABLE FETCH および ATTACH を許可。 #29202 (Kevin Michel).
- 設定
output_format_csv_null_representationを追加しました。output_format_tsv_null_representationと同様の設定ですが、CSV 出力向けです。#29123 (PHO). - 現在のZooKeeperセッションのuptimeを秒単位で返す関数
zookeeperSessionUptime()を追加しました。#28983 (tavplubix). h3ToGeoBoundary関数を実装。#28952 (Ivan Veselov) 。- ウィンドウ関数として使用できる集約関数
exponentialMovingAverageを追加しました。これにより #27511 が解決されます。#28914 (alexey-milovidov)。 - テーブルのカラムのサブカラムを
DESCRIBEクエリの結果に含められるようになりました (describe_include_subcolumns設定で有効化できます) 。 #28905 (Anton Popov). Executable,ExecutablePoolにオプションsend_chunk_headerが追加されました。このオプションが true の場合、chunk の前に、改行付きの chunk の行数rows_countがクライアントに送信されます。#28833 (Maksim Kita).tokenbf_v1とngramは、FixedSring 型の String をキーに持つ Map をサポートします。これにより、map キーの filter を使うクエリで、データの skipping 性能が向上します。sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by id上記のテーブルでは、クエリselect * from map_tokebf where map['K']='V'により、キーAを含まない granule がスキップされます。もちろん、スキップされる行数は、設定したgranularityとindex_granularityに依存します。#28511 (凌涛).- サーバーからクライアントに profile events を送信できるようになりました。新しいパケットタイプ
ProfileEventsを導入しました。#26177 を解決しました。#28364 (Dmitry Novik). FixedStringおよびStringデータ型のビットシフト演算。これにより #27763 が解決されます。#28325 (小路).- データベースエンジン MaterializedPostgreSQL で、PostgreSQL からのレプリケーション対象テーブルの動的な追加 / 削除をサポートしました。データベース設定に対する ALTER をサポートしました。#27573 をクローズしました。#28301 (Kseniia Sumarokova).
- 関数 accurateCastOrDefault(x, T) を追加しました。#21330 を修正しました。著者は @taiyang-li です。 #23028 (Maksim Kita)。
- 関数
toUUIDOrDefault、toUInt8/16/32/64/256OrDefault、toInt8/16/32/64/128/256OrDefaultを追加しました。これにより、文字列のパースに失敗した場合に、ユーザーがデフォルト値 (NULL 以外) を指定できるようになりました。#21330 (taiyang-li) 。
パフォーマンス改善
- バックグラウンドマージは相互にプリエンプト可能になり、適切な優先度でスケジュールされるようになりました。これにより、長時間実行されるマージが短時間のマージの進行を妨げることがなくなります。これは、マージ実行のスケジューリングと制御を改善するために必要です。これにより、「パーツが多すぎる」error が発生する可能性が低くなります。#22381。#25165 (Nikita Mikhaylov) 。background pool 内のスレッド数を超える数の merge と mutation を実行できるようになりました。merge と mutation はサイズに応じて段階的に実行されます (小さいものほど優先度が高くなります) 。実行する task 数とスレッド数の比率は、設定
background_merges_mutations_concurrency_ratioで制御され、デフォルト値は 2 です。#29140 (Nikita Mikhaylov) 。 - リモートファイルシステムで非同期読み取りを利用できるようにしました。リモートファイルシステムから読み取る際のシーク回数も減らします。これによりパフォーマンスが大幅に向上し、特定の条件下では実験的な
webおよびs3ディスクが EBS より高速に動作するようになります。#29205 (Kseniia Sumarokova)。あわせて、webディスクタイプ (ウェブサーバーでホストされる静的データセット) は実験段階を脱し、本番利用可能となりました。 clickhouse-clientでINTO OUTFILEを使用するクエリで、複数スレッドが使われるようになりました。INTO OUTFILE使用時に進捗バーがちらつく問題を修正しました。これにより #30873 をクローズします。これにより #30872 をクローズします。#30886 (alexey-milovidov).- 一部の
SELECTクエリで、ディスクから読み取る冗長な圧縮データ量を削減 (MergeTreeエンジンファミリーのみ) 。 #30111 (alesapin). - MergeTree テーブルエンジンファミリーで圧縮ブロックを読み取る際の冗長な
seek呼び出しをいくつか削減しました。#29766 (alesapin) 。 urlテーブル関数で複数の URL を並列に処理できるようにしました。これにより #29670 と #29671 をクローズしました。#29673 (alexey-milovidov).- 設定
optimize_aggregation_in_orderが有効な場合、主キー順での集約のパフォーマンスを向上。 #30266 (Anton Popov). - 現在、ClickHouse は外部 S3 との通信時に DNS cache を使用するようになりました。#29999 (alesapin) 。
- 外部データベース (MySQL など) に対する
IS NULL/IS NOT NULLのプッシュダウンをサポートしました。#29463 (Azat Khuzhin)。isNull/isNotNullをIS NULL/IS NOT NULLに変換するようにしました (外部データベース、たとえば MySQL 向け) 。#29446 (Azat Khuzhin)。 - Dictionary テーブルに対するSELECTクエリで複数スレッドが使用されるようになりました。 #30500 (Maksim Kita) 。
Decimalカラムに対するフィルタリング (WHERE 操作) のパフォーマンスを改善しました。#30431 (Jun Jin) 。popcnt/ctzを用いた、より高性能な実装に置き換えることで、filter 処理内の分岐の多いコードを削除しました。#29881 (Jun Jin) 。- SSE/AVX2/AVX512 命令をまとめて利用し、filter のバイトマスク生成関数 (WHERE 演算子で使用) を改善しました。なお、デフォルトでは ClickHouse は SSE のみを使用するため、これはカスタムビルドでのみ relevant です。#30014 (jasperzhu). #30670 (jasperzhu).
- Nullableな浮動小数点数に対するSUM集約関数のパフォーマンスを改善しました。#28906 (Raúl Marín) 。
- 複数のdiskを使用している場合のpartのloading処理を高速化しました。考え方は https://github.com/ClickHouse/ClickHouse/pull/16423 と似ています。本番環境では、24分 → 16分に改善しました。#28363 (Amos Bird).
- メモリ使用量を削減するため、S3 multipart upload の part サイズのデフォルト設定を縮小。 #28679 (ianton-ru).
bitmapAnd関数を高速化しました。#28332 (dddounaiking) 。StorageMergeTreeで、マージがまだ進行中のときに表示される不要な mutation 通知を削除しました。#27552 (Vladimir Chebotarev).- 文字列比較のパフォーマンス改善を試行。 #28767 (alexey-milovidov).
- 主キー索引とパーティションフィルターが Tuple でも機能するようになりました。 #29281 (凌涛).
- クエリに、引数は同じで level パラメータだけが異なる複数の
quantile集計関数がある場合、設定optimize_syntax_fuse_functionsが有効であれば、それらは 1 つにまとめられ、1 回のパスで実行されます。#26657 (hexiaoting) 。 - 主キーの最初の式に対する min-max 集約が、プロジェクションによって最適化されるようになりました。これは #329 に対応するものです。#29918 (Amos Bird) 。
実験的機能
- ClickHouse Keeper のノード設定 (
.xmlファイル) を変更できるようになりました。#30372 (alesapin). sparkbar集約関数を追加しました。これにより #26175 を解決します。#27481 (小路). 注: この関数には 1 つ問題があり、動作は今後のリリースで変更される予定です。
改善
- 再起動せずにログレベルを変更できるようになりました。 #29586 (Nikolay Degterinsky).
- SQL UDF に複数の改善が加えられました。SQL ユーザー定義関数を操作するクエリで ON CLUSTER 句がサポートされるようになりました。例:
CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;。#30666 をクローズしました。#30734 (Maksim Kita)。CREATE OR REPLACE、CREATE IF NOT EXISTS構文をサポートしました。#30454 (Maksim Kita)。DROP IF EXISTSのサポートを追加しました。例:DROP FUNCTION IF EXISTS test_function。#30437 (Maksim Kita)。ラムダをサポートしました。例:CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);。#30435 (Maksim Kita)。clickhouse-localで SQL ユーザー定義関数をサポートしました。#30179 (Maksim Kita). - クエリごとのメモリプロファイラをグローバルに有効化しました (
memory_profiler_step= 4MiB に設定) 。#29455 (Azat Khuzhin) 。 system.data_skipping_indicesにdata_compressed_bytes、data_uncompressed_bytes、marks_bytesの各カラムを追加しました。system.partsにsecondary_indices_compressed_bytes、secondary_indices_uncompressed_bytes、secondary_indices_marks_bytesの各カラムを追加しました。#29697 をクローズしました。#29896 (Maksim Kita)。- system.tables に
tableエイリアスを、system.databases にdatabaseエイリアスを追加 #29677。#29882 (kevin wan)。 - serverの起動時に、table間の相互依存関係を正しく解決するようにしました。#8004 と #15170 をクローズしました。#28373 (tavplubix) 。
- 関数
divide、intDiv、moduloで、分母が Nullable の場合に発生するエラー “Division by zero” を回避します。#22621 をクローズしました。#28352 (Kruglov Pavel). YYYY-MM-DDに加え、テキストフォーマットでDateデータ型の値をYYYYMMDDとしてパースできるようにしました。これにより #30870 がクローズされます。#30871 (alexey-milovidov).- Web UI: テーブルのセル内にバーを表示。 #29792 (alexey-milovidov).
- ユーザーはコメント付きのDictionaryを作成できるようになりました:
CREATE DICTIONARY ... COMMENT 'vaue'… #29899 (Vasily Nemkov). また、CREATE DATABASEステートメントでデータベースにコメントを設定できるようになりました … #29429 (Vasily Nemkov). compiled_expression_cache_elements_size設定を導入しました。この設定を使う必要があるなら、それが何をするものかはすでに分かっているはずです。#30667 (Maksim Kita).- clickhouse-format が
--queryオプションをサポートするようになりました。以前のバージョンでは、クエリを stdin 経由で渡す必要がありました。#29325 (凌涛). Memoryデータベース内のテーブルでALTER TABLEが使えるようになりました。Memory データベースはclickhouse-localで使用されます。#30866 (tavplubix).arrayStringConcatが、すべてのシリアライズ可能な型の配列をサポートするようになりました。 #30840 (Nickita Taranov) 。- ClickHouse は、システムメモリ量の取得時に docker/cgroups の制限を考慮するようになりました。 #25662 を参照してください。 #30574 (Pavel Medvedev)。
- PostgreSQL データベースから取得するテーブル構造の信頼性が向上しました。 #30477 (Kseniia Sumarokova).
- GROUP BY と ORDER BY で位置引数が完全にサポートされました。#30433 (Kseniia Sumarokova) 。
- JSONExtractString を使って、文字列以外の要素も文字列として抽出できるようにしました。これは pull/25452#issuecomment-927123287 に対応するものです。#30426 (Amos Bird).
GraphiteMergeTreeに対するSELECTクエリで、FINAL句を使用できるようになりました。#30360 (Nikita Mikhaylov) 。- レプリカのクローン作成と、破損したパーツに対する fetch のキュー投入に軽微な改善が加えられ、レプリケーションキュー内の
GET_PARTエントリがごくまれにハングする問題を回避できるようになりました。#30346 (tavplubix). - file table function で、
user_filesディレクトリ内のファイルへのシンボリックリンクが許可されるようになりました。 #30309 (Kseniia Sumarokova). Date32とDate、DateTime、DateTime64、Stringの比較に関する不具合を修正しました。#30219 (liang.huang) 。MergeTreeテーブルからSAMPLE BY式を削除できるようになりました (ALTER TABLE <table> REMOVE SAMPLE BY) 。#30180 (Anton Popov).- これにより、
Keeperは、いずれかの他ノードに接続できる場合、clickhouse-serverの一部として非同期に起動するようになります。 #30170 (alesapin). - 現在、
clickhouse-clientが標準で複数行編集をサポートするようになりました。#30143 (Amos Bird) 。 polygondictionaries (逆ジオコーディング) : 設定store_polygon_key_column= true の場合に、SELECTクエリで辞書の内容を読み取れるようサポートを追加しました。#30090 をクローズしました。#30142 (Maksim Kita) 。- Play UI に ClickHouse のロゴを追加。 #29674 (alexey-milovidov).
Arrow、ArrowStream、Parquet、ORCなどの Arrow 対応フォーマットからカラムを読み取る際の例外メッセージが改善されました。これにより #29926 をクローズしました。#29927 (alexey-milovidov).Bufferテーブルにおけるフラッシュと起動時の間のデータ競合を修正しました。これはテストで発生することがあります。#29930 (Azat Khuzhin) 。DatabaseMemoryとLiveViewに対するDROP TABLE間のlock-order-inversionを修正しました。Live View は実験的機能です。Memory データベースは clickhouse-local で使用されています。#29929 (Azat Khuzhin).- 定期的なDictionaryの再読み込みと設定の再読み込みの間で発生していたロック順序の逆転を修正しました。#29928 (Azat Khuzhin).
- zoneinfo ファイルを 2021c に更新しました。 #29925 (alexey-milovidov).
clickhouse-copierで再試行と再試行の間の遅延を設定できるようにしました。#29921 (Azat Khuzhin).- 実行中のクエリについて、
shutdown_wait_unfinishedの時間まで待機できるようにするshutdown_wait_unfinished_queriesserver setting を追加しました。これは #24451 に対応するものです。#29914 (Amos Bird). - ピークメモリ使用量を追跡する機能を追加 (
system.trace_logに新しい trace_typeMemoryPeakを追加) 。#29858 (Azat Khuzhin). - PostgreSQL外部テーブル: replica identity 索引を取得するクエリに、パーティション化されたテーブル用のプレフィックス ‘p’ を追加しました。#29828 (Shoh Jahon).
- mutate/merge 中に
max_untracked_memory/memory_profiler_step/memory_profiler_sample_probabilityを適用し、マージ中のメモリ使用量をプロファイリングできるようにしました。#29681 (Azat Khuzhin) 。 - クエリ難読化:
clickhouse-format --obfuscateが、より多くの種類のクエリに対応しました。#29672 (alexey-milovidov). clickhouse-format --obfuscateが埋め込み辞書 (関数regionTo...) を含むクエリを処理できない問題を修正しました。#29667 (alexey-milovidov).- JSON関数における Nullable の誤った処理を修正しました。これにより #29615 が修正されます。https://github.com/ClickHouse/ClickHouse/pull/28012 はまだリリースされていないため、改善として扱いました。 #29659 (Amos Bird).
- デフォルトの
listen_backlogを増やしました (新しい Linux カーネルのデフォルトに合わせるため) 。 #29643 (Azat Khuzhin). - server の設定
dictionaries_config、models_config、user_defined_executable_functions_configが変更された場合に、Dictionaries、モデル、ユーザー定義の実行可能関数を再読み込みするようにしました。#28142 をクローズ。#29529 (Maksim Kita). - プロジェクション名に対する不要な制限を撤廃しました。これにより、プロジェクション名を
tmp_で始められるようになりました。#29520 (Amos Bird) 。 - ネストしたサブクエリを含むミューテーションで発生する
There is no query or query context has expiredエラーを修正しました。テーブルがレプリケートされており、allow_nondeterministic_mutations設定が無効になっている場合、ミューテーションでのサブクエリを許可しないようにしました。 #29495 (tavplubix). - 実行中に
max_concurrent_queriesの設定変更を適用できるようになりました (再起動は不要です) 。#29414 (Raúl Marín) 。 - 設定
use_skip_indexesが追加されました。#29405 (Maksim Kita) 。 - インメモリのパーツの
FREEZE(バックアップ用) をサポートしました。#29376 (Mo Xuan). clickhouse-benchmarkで初期query_idをinitial_query_idとして引き継ぐようにしました (従来は、clickhouse-benchmark経由でリモートクエリを実行すると、分片上のクエリはinitial_query_idによって初期クエリに関連付けられませんでした) 。#29364 (Azat Khuzhin).- スキップ索引
tokenbf_v1およびngrambf_v1:キーがStringまたはFixedString型のArrayデータ型のサポートが追加されました。#29280 (Maksim Kita)。スキップ索引tokenbf_v1およびngrambf_v1に、キーがStringまたはFixedString型のMapデータ型のサポートが追加されました。著者 @lingtaolf。#29220 (Maksim Kita). - 関数
hasにMapデータ型のサポートが追加されました。#29267 (Maksim Kita). - clickhouse-keeper のログ (レプリケーションされたステートマシン用) を
ZSTDで圧縮できるcompress_logs設定を追加しました。実装: #26977。 #29223 (alesapin). - 設定
external_table_strict_queryを追加しました。これにより、互換性がない場合でも、外部データベースに対するクエリで WHERE 式全体が渡されるよう強制されます。#29206 (Azat Khuzhin). ARRAY JOINを使用している場合、プロジェクションを無効化します。以前のバージョンでは、プロジェクション解析によってARRAY JOIN内の別名が壊れることがありました。#29139 (Amos Bird) 。MsgPack入出力フォーマットでサポートされる型を追加。 #29077 (Kruglov Pavel).ORC入出力フォーマットでLowCardinalityカラムの入出力が可能になりました。#29062 (Kruglov Pavel) 。system.distributed_ddl_queueからの SELECT で誤った値が表示されることがありましたが、修正されました。#29061 (tavplubix) 。- HTTP 接続で未知の method に対して正しく動作するようにしました。 #29050 を解決しました。 #29057 (Filatenkov Artur)。
clickhouse-keeper: ZooKeeper のログ (snapshot ではなく) から復元する際に一部のデータ損失を引き起こす可能性がある、clickhouse-keeper-converterのバグを修正しました。#29030 (小路)。ZooKeeper のログのデシリアライズが不正になる可能性がある、clickhouse-keeper-converterのバグを修正しました。#29071 (小路)。CREATE ... AS SELECTクエリの設定を適用 (修正: #28810) 。#28962 (Azat Khuzhin) 。- ALTER TABLE … ON CLUSTER … REPLACE/MOVE PARTITION FROM/TO … で、デフォルトのデータベース設定を適用する #28955 (anneji-dev).
- gRPCプロトコル: クライアントからサーバー側の圧縮を変更できるようになりました。 #28953 (Vitaly Baranov).
- 非同期メトリクス向けに温度センサーを読み取る際、“データなし”の例外をスキップするようにしました。これにより #28852 をクローズします。#28882 (alexey-milovidov).
- まれに、既存のDictionaryで
Dictionary not foundエラーが発生する原因となる論理的な競合状態を修正しました。#28853 (tavplubix). - If-combinator のチェックにおけるネストされた関数の制約を緩和 (ただし、同一の combinator のネストは禁止) 。 #28828 (Azat Khuzhin).
- サーバー終了時に発生する可能性がある未捕捉例外を修正。 #28761 (Azat Khuzhin).
- mutation/merge が異常に長時間続く場合、実行中の mutation/merge で使用される可能性がある tmp ディレクトリのクリーンアップを禁止しました。#28760 (Azat Khuzhin) 。
- alias を使用している場合に、最適化
optimize_arithmetic_operations_in_aggregate_functions = 1を有効にしました。#28746 (Amos Bird) 。 ReplicatedMergeTree向けにdetach_not_byte_identical_parts設定を実装し、バイト単位で一致しないパーツを削除する代わりにデタッチするようにしました (merge/mutate 後) 。#28708 (Azat Khuzhin) 。MergeTreeのmax_suspicious_broken_parts_bytes設定を実装 (破損したすべてのパーツの合計サイズを制限。デフォルトは1GiB) 。 #28707 (Azat Khuzhin).RabbitMQのテーブル設定で、マクロを展開できるようにしました。#28683 (Vitaly Baranov) 。Logエンジンを使用するテーブルのデータを複数スレッドで読み取れるようにする機能を復活させました。#28125 (Vitaly Baranov) 。- JSON関数におけるNULLカラムの処理の誤動作を修正しました。これにより #27930 を修正しました。#28012 (Amos Bird).
- カラムとは別に、スキップインデックス向けの Mark/非圧縮 cache のサイズを個別に設定できるようになりました。#27961 (Amos Bird) 。
USINGを伴う JOIN を、他の JOIN 型と組み合わせて使用できるようにしました。 #23881 (darkkeks).- Yandex Cloud S3 におけるスロットリング対応のため、aws-sdk サブモジュールを更新しました。 #30646 (ianton-ru).
- gRPC 呼び出しの処理中に、クエリ処理の終了時点でクエリ ID とセッション ID が解放されてしまう問題を修正しました。#29954 (Vitaly Baranov) 。
AccessControlManagerのシャットダウン処理を修正し、不安定なテストを改善しました。#29951 (Vitaly Baranov).HDFSからの読み取り時に発生するアサーション失敗を修正しました。libhdfs3 ライブラリを、デバッグモードのテストで実行できるように更新しました。#29251 をクローズしました。#27814 をクローズしました。#29276 (Kseniia Sumarokova).
ビルド/テスト/パッケージングの改善
- Aarch64 マシン向けの FreeBSD ビルドのサポートを追加しました。 #29952 (MikaelUrankar).
- ClickHouse で再帰的なサブモジュールが不要になりました。 #30315 (alexey-milovidov).
- ClickHouse を Musl で静的ビルドできるようになりました。これは実験的機能として追加されたもので、
odbc-bridge、library-bridge、CatBoost とのインテグレーション、および一部ライブラリのビルドはサポートされていません。 #30248 (alexey-milovidov). AArch64およびDarwin(macOS) ビルドでProtobuf、Arrow、ORC、Parquetを有効にしました。これにより #29248 はクローズされます。これにより #28018 はクローズされます。 #30015 (alexey-milovidov).- PowerPC (powerpc64le) 向けのクロスビルドを追加しました。これにより #9589 はクローズされます。さらに、AArch64 および PowerPC で MySQL との連携をサポートしました。これにより #26301 はクローズされます。 #30010 (alexey-milovidov).
- クロスコンパイル用ツールチェーンには必要なファイルだけを残すようにしました。これらはサブモジュールとして含められます (従来は tarball としてダウンロードされていました) 。 #29974 (alexey-milovidov).
- ClickHouse の SELECT ステートメント用パーサーに、構造を考慮したファジング手法を実装しました。 #30012 (Paul).
- テンプレートコードのコンパイルを高速化するため、clang 向けの実験的な constexpr 式評価器を有効化しました。 #29668 (myrrc).
- 新しいシンボルを使わずに、より新しいバージョンの glibc でコンパイルできるようにしました。 #29594 (Azat Khuzhin).
- clang の最適化オプションにより、Debug ビルドのバイナリサイズを削減しました。 #28736 (flynn).
- CI 用のすべてのイメージを、今後は別個の Docker Hub リポジトリに配置します。 #28656 (alesapin).
- clang-13 でのビルド対応を改善しました。 #28046 (Sergei Semin).
- 生の profile events を
clickhouse-clientに出力する機能を追加しました (デバッグやテストに役立つ場合があります) 。 #30064 (Azat Khuzhin). - clickhouse-server の unit に time 依存関係を追加しました (systemd および sysvinit init) 。 #28891 (Azat Khuzhin).
- シンボルが再読み込みされた際に stacktrace cache も再読み込みするようにしました。 #28137 (Amos Bird).
バグ修正
positionCaseInsensitiveUTF8やcountSubstringsCaseInsensitiveUTF8などの UTF-8 文字列に対する大文字・小文字を区別しない検索関数で、実際には一致しない部分文字列がごくまれに見つかってしまうことがありましたが、修正されました。#30663 (tavplubix).- 暗号化されたディスク上の空ファイルの読み取りに関する問題を修正しました。#30494 (Vitaly Baranov) 。
- 設定
legacy_column_name_of_tuple_literal = 0の分散クエリにおいて、選言チェーンをINに変換する処理 (設定optimize_min_equality_disjunction_chain_lengthで制御) の不具合を修正しました。 #28658 (Anton Popov). insert_allow_materialized_columns=0の場合でも、分散テーブルのシャーディングキーとしてマテリアライズドカラムを使用できるようにしました。 #28637 (Vitaly Baranov).TOとFROMが設定されていて、結果セットに行がない場合のORDER BY ... WITH FILLの不具合を修正しました。#30888 (Anton Popov) 。- オペランドが3つ以上ある場合に、AND/OR 式で set 索引が使用されない問題を修正しました。この修正により #30416 を解消しました。 #30887 (Amos Bird).
- ハッシュ関数を含むプロジェクションの実体化時に発生するクラッシュを修正しました。これにより #30861 が修正されます。この問題は https://github.com/ClickHouse/ClickHouse/pull/28560 と似ており、ヘッダーが空であるという不変条件の理解が不十分であったことに起因します。#30877 (Amos Bird).
ReplicatedMergeTreeで、ZooKeeper パスから補助 ZooKeeper 名を抽出する際の曖昧さを解消しました。従来は、ZooKeeper パスにコロンが含まれていると、Unknown auxiliary ZooKeeper nameによりサーバーが起動できないことがありました。#29052 を修正しています。また、先頭がスラッシュではない ZooKeeper パスを指定することもこれまでは許可されていましたが、現在は非推奨であり、そのようなパスを持つ新しいテーブルは作成できません。さらに、補助 ZooKeeper 名にスラッシュやコロンを含めることもできません。#30822 (tavplubix).- 何らかの理由で localBackup に失敗した場合、一時ディレクトリをクリーンアップする。 #30797 (ianton-ru).
REPLACE/MOVE PARTITIONと、非レプリケートのMergeTreeにおけるバックグラウンドマージの間で発生していた競合状態を修正しました。この問題により、移動または置換されたデータの一部がパーティション内に残ってしまう可能性がありました。#29327 を修正しました。#30717 (tavplubix).- PREWHERE が常に true になる場合の、WHERE を伴う PREWHERE の不具合を修正しました。#30668 (Azat Khuzhin) 。
- Limit のプッシュダウン最適化により、
Cannot find columnエラーが発生することがありました。これを修正しました。#30438。#30562 (Nikolai Kochetov) 。 isNotNull/isNullからIS [NOT] NULLへの書き換えで、不足していた括弧を追加しました (isNotNull(1)+isNotNull(2)のような式を含むクエリを修正) 。 #30520 (Azat Khuzhin).- 同一テーブルへのスカラーサブクエリを伴うALTERで発生するデッドロックを修正し、#30461 をクローズしました。#30492 (Vladimir C).
- REPLACE PARTITION の実行中にセッションの有効期限が切れた場合に発生する可能性があったセグメンテーションフォルトを修正しました。#30432 (tavplubix) 。
IN (subquery)のような条件を含むクエリは、集約プロジェクションが適用されている場合、誤った結果を返すことがありました。プロジェクション向けのセット生成を修正しました。 #30310 (Amos Bird).- projection が有効な場合の JOIN クエリでのカラムエイリアスの名前解決を修正しました。これにより #30146 を修正しました。#30293 (Amos Bird) 。
replaceRegexpAll関数のいくつかの不具合を修正しました。#30292 (Memo) 。- ComplexKeyHashedDictionary、ComplexKeySparseHashedDictionary のレイアウト設定における
preallocateオプションのパースに関する不具合を修正しました。#30246 (Maksim Kita) 。 [I]LIKE関数を修正し、#28661 をクローズしました。#30244 (Nikolay Degterinsky) 。- multiIf での shortcircuit と lowcardinality に起因するクラッシュを修正しました。#30243 (Raúl Marín) 。
- FlatDictionary、HashedDictionary で、Nullable 属性の bytes_allocated の計算を修正しました。 #30238 (Maksim Kita).
- 複数のJOIN句で、数字で始まる識別子を許可しました。 #30230 (Vladimir C) 。
max_read_buffer_size = 0の場合のMergeTreeからの読み取りを修正 (ユーザーが自分で墓穴を掘りたい場合) (例外Can't adjust last granule、LOGICAL_ERROR、あるいはデータ損失につながる可能性があります) 。#30192 (Azat Khuzhin) 。min_bytes_to_use_direct_io使用時のpread_fake_async/pread_threadpoolの不具合を修正しました。#30191 (Azat Khuzhin) 。- Nullable カラムに基づいて MATERIALIZED カラムが INSERT SELECT で誤って補完される不具合を修正しました。#30189 (Azat Khuzhin).
- 関数
initializeAggregationで Nullable 型の引数をサポートしました。 #30177 (Anton Popov). GLOBAL INとWITH TOTALSを含むクエリで発生するPort is already connectedエラーを修正しました。21.9 と 21.10 のみ。#30086 (Nikolai Kochetov).- MergeTree における MOVE PARTITION とマージ/ミューテーション間の競合を修正しました。#30074 (Azat Khuzhin) 。
- 削除した
Memoryデータベースがserverの再起動後に再び現れることがありましたが、修正されました (#29795) 。また、Ordinaryデータベースの削除時にDirectory not emptyエラーが発生する場合の回避策として、force_remove_data_recursively_on_drop設定が追加されました (Cloud 環境では残ったデータを手動で削除できないためです) 。#30054 (tavplubix) 。 tuple()によるサンプルのクラッシュを修正し、#30004 をクローズしました。#30016 (flynn).- issue のクローズを試みる: #29965。 #29976 (hexiaoting).
FileCheckerとStorageLog/StorageStripeLogの間で発生する可能性があるデータ競合を修正しました。#29959 (Azat Khuzhin).StorageLogにおけるLogSink::writeMarks()とLogSourceの間のデータ競合を修正しました。#29946 (Azat Khuzhin) 。- https://github.com/ClickHouse/ClickHouse/pull/19544 で導入された MergeTree テーブルの同時実行クエリ制限における、潜在的なリソースリークの問題を修正しました。 #29879 (Amos Bird).
- システムテーブル再作成チェックを修正 (enum値の変更を検出できない問題) 。 #29857 (Azat Khuzhin).
- MaterializedMySQL: MySQL への接続が失われた際に、トランザクションの一部しか処理されないことがある問題を修正しました。#29837 (Håvard Kvålen).
- おそらくカーネルのバグが原因で、ごくまれに発生する可能性がある
Timeout exceeded: elapsed 18446744073.709553 secondserror を回避します。#29154 を修正しました。#29811 (tavplubix). ATTACH TABLE ... FROM 'path'クエリで、path の代わりに文字列以外のリテラルを使用した場合に発生する不正な型変換を修正しました。これにより、未初期化メモリを読み取る可能性がありました。#29790 (alexey-milovidov).GROUP BY時のLowCardinalityへの同時アクセスを修正しました (Bufferテーブルと組み合わせると問題が発生する可能性があります) 。 #29782 (Azat Khuzhin).- 分片で
<= 21.3と>= 21.4のバージョンが混在し、GROUP BYキーがすべて固定長の複数のカラムで構成され、かつ二段階集約が有効化されている場合 (group_by_two_level_thresholdおよびgroup_by_two_level_threshold_bytesを参照) に、分散クエリでGROUP BYの結果が不正になり (結果に同じキーを持つ複数の行が含まれる) 、問題を修正しました。#29580。#29735 (Nikolai Kochetov) 。 - サーバーの再起動時に、設定
materialized_postgresql_tables_listが正しく動作しない不具合を修正しました。#28529 で報告されています。#29686 (Kseniia Sumarokova). - filter predicate 内の条件が、push-down 最適化後に失われることがありました。#29625 (Nikolai Kochetov) 。
- 別名を含む JIT 式コンパイルおよび短絡式評価の問題を修正しました。#29403 をクローズしました。#29574 (Maksim Kita).
DEFAULT式でx.y.z...のような不正なテーブル識別子を使用した際に、ALTER MODIFYクエリでまれに発生するセグメンテーション違反を修正しました。#29184。#29573 (alesapin).GROUP BY WITH TOTALS HAVINGにおけるヌルポインタ逆参照を修正 (HAVINGのカラムが選択されていない場合) 。#29553 (Azat Khuzhin) 。- Joinテーブルエンジンのテーブルに対して読み取りと書き込みを同時に行う際のデッドロックを回避します。 #29544 (Raúl Marín).
std::mismatchの使い方に問題があったため、チェックpathStartsWithのバグを修正しました:The behavior is undefined if the second range is shorter than the first range.。 #29531 (Kseniia Sumarokova).- ODBC bridge において、error
Invalid cursor stateに対する再試行を追加しました。これは再試行可能なエラーです。#29473 を修正しました。#29518 (Kseniia Sumarokova). Lazyデータベースのロード時に、テーブル名のパースが誤っていた問題を修正しました。#29456 を修正。#29476 (tavplubix)。- プッシュダウンされた
HAVING述語を持つサブクエリで発生する可能性のあるBlock structure mismatchを修正しました。#29010 を修正。#29475 (Nikolai Kochetov) 。 - greatest/least 関数で発生する論理エラー
Cannot capture columnsを修正しました。#29334 をクローズしました。#29454 (Kruglov Pavel). - RocksDBテーブルエンジン: 複数のDBを開く際に発生するレースコンディションを修正 (CIでこの問題を再現する一部のテストも復活) 。#29393 (Azat Khuzhin) 。
- 設定に不備がある場合に、Replicated アクセスストレージが正常にシャットダウンしない問題を修正しました。 #29388 (Kevin Michel).
- メモリ安全ではないため、ウィンドウ関数
nth_valueを削除しました。これにより #29347 をクローズしました。#29348 (alexey-milovidov) 。 - projection part の vertical merge を修正しました。これにより #29253 の問題も修正されます。さらに、この PR では https://github.com/ClickHouse/ClickHouse/pull/25165 で導入された projection の merge/mutation に関する複数の問題も修正しています。#29337 (Amos Bird).
- 新しいレプリカの追加時に、ReplicatedデータベースでDDLクエリがハングする問題を修正しました。#29328 (Kevin Michel) 。
- 接続タイムアウト (
send_timeout/receive_timeout) の問題を修正しました。 #29282 (Azat Khuzhin). - テーブルのカラムのいずれかに、大文字と小文字を区別しない関数を含むデフォルト式がある場合、
ReplicatedMergeTreeの新しいレプリカの再作成または作成時に発生する可能性があるTable columns structure in ZooKeeper is different from local table structure例外を修正しました。#29266 (Anton Popov). Attempt to read after eof(ATTEMPT_TO_READ_AFTER_EOF) ではなく、通常のDatabase doesn't exist error(UNKNOWN_DATABASE) をクライアントに (TCP 経由で) 返すようにしました。#29229 (Azat Khuzhin).- Avro入力フォーマットで、LowCardinality(Nullable) 型のカラムへの挿入時に発生する segfault を修正しました。 #29132 (Kruglov Pavel).
- inter-server secret の場合に、以前の認証情報が再利用されないようにした (そのクラスターで interserver secret が設定されていると、Buffer/Kafka 経由で分散テーブルに INSERT する前に、その接続で以前設定されたユーザーが再利用されることがあった) 。#29060 (Azat Khuzhin).
- Dictionary との join 時に
any_join_distinct_right_table_keysを処理するようにし、#29007 をクローズしました。 #29014 (Vladimir C). - エイリアスカラムで JOIN した際に発生する “block 内にカラム … が見つかりません” エラーを修正しました。#26980 をクローズしました。#29008 (Vladimir C).
GLOBAL INサブクエリで使用されるスレッド数を修正しました (#19414 のバグ修正以降、単一スレッドで実行されていました) 。 #28997 (Nikolai Kochetov).- ORDER BY に WITH FILL が含まれている場合に発生する不適切な最適化を修正しました。これにより #28908 をクローズしました。これにより #26049 をクローズしました。#28910 (alexey-milovidov)。
- 定数を使用した場合の高階配列関数 (
arrayCompactのSIGSEGV、arrayDifference/arrayCumSumNonNegativeのILLEGAL_COLUMN) を修正しました。#28904 (Azat Khuzhin). mutations_sync=2における mutation の待機処理を修正しました。#28889 (Azat Khuzhin) 。- 複数のカラムを含む
IN句 (つまり(k,v) IN ((1, 2))) を使用した、外部データベース (つまり MySQL) に対するクエリの不具合を修正しました。 #28888 (Azat Khuzhin). - 短絡関数の評価における
LowCardinalityのバグを修正しました。#28884 をクローズしました。#28887 (Kruglov Pavel). - compact パーツからのサブカラム読み取りを修正しました。 #28873 (Anton Popov).
- まれにレプリカ間で差異が生じる可能性のある、
DROP PARTとREPLACE/MOVE PARTITIONの間の競合状態を修正しました。#28864 (tavplubix) 。 - 短絡評価時の式のコンパイルを修正しました。 #28821 (Azat Khuzhin).
- ごくまれに、すべてのレプリカをハードリブートした後、ReplicatedMergeTree のレプリカ間で不整合が発生することがある問題を修正しました。エラーは
Part ... intersects (previous|next) part ...のように表示されます。#28817 (alesapin). - 接続の使用可否をより適切に確認し、念のため
RabbitMQのシャットダウン時に発生しうるあらゆる例外も捕捉するようにしました。#28797 (Kseniia Sumarokova). - ReplicatedMergeTreeQueue における軽微な競合状態を修正しました。ユーザーには見えないはずですが、微妙なバグを引き起こす可能性があります。 #28734 (alesapin).
- 例外発生時に、部分的に作成された集約プロジェクションがある
SELECTでクラッシュする可能性がある問題を修正しました。#28700 (Amos Bird) 。 - 渡されたパラメーターが不正な場合に、分散テーブルの作成時に発生する coredump を修正しました。 #28686 (Zhiyong Wang) 。
- system.processes テーブルに、Settings.Names と Settings.Values の別名を追加しました。#28685 (Vitaly) 。
- S2 Geometry ライブラリのサポート:
s2RectAdd関数とs2RectContains関数で必要な引数の個数を修正しました。#28663 (Bharat Nallan). - Nullable または LowCardinality の主キー使用時に発生する、無効な定数型変換を修正しました。 #28636 (Amos Bird).
- PREWHERE における「カラムが集約関数内になく、GROUP BY にも含まれていない」を修正しました (修正: #28461) 。#28502 (Azat Khuzhin) 。
後方互換性を持たない変更
- 現在、以下の MergeTree テーブルレベル設定
replicated_max_parallel_sends、replicated_max_parallel_sends_for_table、replicated_max_parallel_fetches、replicated_max_parallel_fetches_for_tableは何の効果もありません。これらは以前から適切に機能しておらず、max_replicated_fetches_network_bandwidth、max_replicated_sends_network_bandwidth、background_fetches_pool_sizeに置き換えられました。 #28404 (alesapin).
新機能
- ラムダ式としてユーザー定義関数 (UDF) を作成する機能を追加しました。構文は
CREATE FUNCTION {function_name} as ({parameters}) -> {function core}です。例:CREATE FUNCTION plus_one as (a) -> a + 1。著者: @Realist007。 #27796 (Maksim Kita) #23978 (Realist007). Executableストレージエンジンとexecutableテーブル関数を追加しました。これにより、外部スクリプトを使用したデータ処理をストリーミング方式で実行できます。 #28102 (Maksim Kita) (ruct).ExecutablePoolストレージエンジンを追加しました。Executableと似ていますが、長時間動作するプロセスのプールを使用します。 #28518 (Maksim Kita).ALTER TABLE ... MATERIALIZE COLUMNクエリを追加しました。 #27038 (Vladimir Chebotarev).s3テーブル関数へのパーティション単位の書き込みをサポートしました。 #23051 (Vladimir Chebotarev).- データのインポート / エクスポート向けに、
lz4圧縮フォーマット (gz、bz2、xz、zstdに加えて) をサポートしました。 #25310 (Bharat Nallan). - 設定
enable_positional_argumentsで位置引数を使用できるようにしました。 #2592 をクローズします。 #27530 (Kseniia Sumarokova). - s3 テーブルの
CREATEクエリのSETTINGS句で、ファイルフォーマットに関連するユーザー設定を受け付けるようにしました。これにより #27580 はクローズされます。 #28037 (Nikita Mikhaylov). RabbitMQエンジンで SSL 接続を許可しました。 #28365 (Kseniia Sumarokova).- サーバーポートを取得できるようにする
getServerPort関数を追加しました。サーバーでそのポートが使用されていない場合は、例外をスローします。 #27900 (Amos Bird). - “Snowflake ID” と
DateTime、DateTime64の間で変換する関数を追加しました。 #27058 を参照してください。 #27704 (jasine). SHA512関数を追加しました。 #27830 (zhanglistar).- ユーザーが
query_logにクエリのサンプルのみを書き込めるようにするlog_queries_probability設定を追加しました。 #16609 をクローズします。 #27527 (Nikolay Degterinsky).
実験的機能
- 静的ファイルの形式で Web サーバー上に読み取り専用tableを保存するための、
web型のdisk。#23982 を参照してください。#25251 (Kseniia Sumarokova)。これは主に、共有ストレージ上での操作のテストを容易にし、データセットを簡単に取り込めるようにするために必要です。21.11 のreleaseまでは使用を推奨しません。 - 新しいコマンド
BACKUPとRESTOREを追加しました。#21945 (Vitaly Baranov)。これは現在も開発中であり、現行バージョンでの使用は想定されていません。
パフォーマンス改善
sumIfおよびcountIf集約関数を高速化しました。#28272 (Raúl Marín).minmax索引用の仮想 PROJECTION を作成します。これにより、allow_experimental_projection_optimizationが有効な場合、可能なケースではクエリはデータを読み取る代わりに minmax 索引を使用します。#26286 (Amos Bird).sequenceMatchとsequenceCountに 2 つのチェックを導入し、シーケンスの pattern の決定論的な部分がイベント一覧に存在しない場合に早期終了できるようにしました。この変更により、以前は操作上限に達して失敗していた多くのクエリが実行可能になり、全体として pipeline も高速化されます。#27729 (Jakub Kuklis).- binary 関数、特に 0 以外の定数による除算について、常に単調であるという情報を利用して主キー分析を強化しました。#28302 (Amos Bird).
hasAllのフィルタ条件で bloom filter のデータスキッピング索引を活用できるようにしました。#27984 (Braulio Valdivielso Martínez).- テーブルの起動処理を遅延させることで、data parts の loading を高速化しました。#28313 (Amos Bird).
WHEREからPREWHEREに移動される conditions の数が過剰になる可能性がある問題を修正しました (この最適化は設定optimize_move_to_prewhereで制御されます) 。#28139 (lthaooo).optimize_distributed_group_by_sharding_keyをデフォルトで有効化しました。#28105 (Azat Khuzhin).
改善
Distributedテーブルの作成前にクラスター名を確認し、不正なクラスター名ではテーブルを作成できないようにしました。#27832 を修正しました。#27927 (tavplubix)。- 他の quantile…Weighted 関数と同様に、集約関数
quantileBFloat16Weightedを追加しました。これにより #27745 が解決されます。#27758 (Ivan Novitskiy). - 属性リストが空の Dictionaries を作成できるようにしました。 #27905 (Maksim Kita).
- パスワードのリセット方法に関する対話型ドキュメントを
clickhouse-clientに追加しました。これは、ユーザーが ClickHouse をインストールしてパスワードを設定した直後に、それを忘れてしまった場合に役立ちます。#27750 を参照してください。#27903 (alexey-milovidov)。 JSONAsString入力フォーマットで、データが配列で囲まれている場合をサポートしました。#25517 をクローズしました。#25633 (Kruglov Pavel).system.replicasテーブルに新しいカラムlast_queue_update_exceptionを追加しました。#26843 (nvartolomei).MaterializedPostgreSQLテーブルで、フェイルオーバー時の再接続に対応しました。#28529 をクローズしました。#28614 (Kseniia Sumarokova).- サーバーの初回起動時に、一意のサーバーUUIDを生成するようにしました。#20089 (Bharat Nallan) 。
MySQLエンジンにconnection_wait_timeout設定 (デフォルトは 5 秒、0 は待機しない) を導入しました。#28474 (Azat Khuzhin) 。- 不正な引数を指定して
MaterializedPostgreSQLを作成できないようにしました。#28423 をクローズしました。#28430 (Kseniia Sumarokova). - vertical merge では、事前定義された “rows_sources” ではなく、実際の tmp ファイルを使用するようにしました。これにより、tmp ディスクに不要なディレクトリが生成されるのを防げます。#28299 (Amos Bird).
- HDFS との連携を設定するため、clickhouse-server.service で環境変数
LIBHDFS3_CONFを export する代わりに、server config にlibhdfs3_confを追加しました。#28268 (Zhichang Yu) 。 - 予期しない例外 (
Part %name% doesn't exist) を引き起こす可能性がある、Temporary 状態のパーツが削除される問題を修正しました。#23661。 #28221 #28221) (Azat Khuzhin). zookeeper_log.addressを修正し (この PR の最初のパッチ以前はアドレスが常に::になっていました) 、このカラムに対するgetpeername(2)の呼び出し回数を削減しました (zookeeper_logにエントリが追加されるたびにgetpeername()が呼び出されていたため、これを避けるために zookeeper client 内でこのアドレスをキャッシュするようにしました) 。 #28212 (Azat Khuzhin).- 演算子
[]の添字とMap型のキーの間の暗黙的な変換 (たとえば、異なるInt型、String、FixedString) をサポート。 #28096 (Anton Popov). - PostgreSQL table engine またはテーブル関数への insert 時に
ON CONFLICT句をサポートしました。#27727 をクローズしました。#28081 (Kseniia Sumarokova)。 - 互換性のあるデータをアタッチできるよう、
Enumデータ型の制限を緩和しました。#26672 を解決しました。#28028 (Dmitry Novik) 。 - 空集合に対して定数キーでグループ化する際の動作を制御する設定
empty_result_for_aggregation_by_constant_keys_on_empty_setを追加しました。これは #6842 の従来の動作を復元するためです。#27932 (Amos Bird). replication_wait_for_inactive_replica_timeout設定が追加されました。これにより、非アクティブなレプリカがALTER/OPTIMZE/TRUNCATEクエリを実行するまでの待機時間を指定できます (デフォルトは 120 秒です) 。replication_alter_partitions_syncが 2 で、一部のレプリカがreplication_wait_for_inactive_replica_timeout秒を超えて非アクティブな場合、UNFINISHED例外がスローされます。#27931 (tavplubix).APPLYカラム変換子でラムダ引数をサポートし、複数の引数を持つ関数を適用できるようにしました。これは #27877 に対応するものです。#27901 (Amos Bird) 。tcp_keep_alive_timeoutがデフォルトで有効になりました。#27882 (Azat Khuzhin) 。- リモートクエリのキャンセルを改善 (リモートサーバーが異常終了した場合) 。#27881 (Azat Khuzhin).
- 大容量のS3オブジェクトには、マルチパートコピーアップロードを使用します。 #27858 (ianton-ru).
- ライブラリ辞書のパスでシンボリックリンクをたどれるようにしました。#27815 (Kseniia Sumarokova).
- これで、
ALTER MODIFY COLUMTをNullable(T)に変更しても、mutation は不要になりました。#27787 (victorgao) 。 - エラーを黙って無視せず、
ReadBufferFromS3で遅延をカウントしないようにしました。#27484 (Vladimir Chebotarev) 。 - 実際に有効期限 (TTL) の処理を行わず、メタデータのみを再計算するようにして、
ALTER ... MATERIALIZE TTLを改善しました。 #27019 (lthaooo). - EOF に改行がなくても、カスタムトップレベルドメインの一覧を読み込めるようにしました。 #28213 (Azat Khuzhin).
不具合修正
carbon-clickhouseから圧縮データを読み込む際に、‘attempt to read after end of file’ で失敗する問題を修正しました。#26149 をクローズしました。#28150 (FArthur-cmd).ON CLUSTER句を含むGRANT WITH REPLACEステートメントの実行時におけるアクセス権限チェックを修正しました。この PR は #27001 の修正を改善したものです。#27983 (Vitaly Baranov).LowCardinality(UUID)型のカラムに対して、extremes = 1を指定した SELECT が可能になりました。#27918 (Vitaly Baranov).- 負の数に対する PostgreSQL 形式のキャスト (
::演算子) の不具合を修正しました。 #27876 (Anton Popov) 。 - #26864 に続き、
NamedSessionStorageのシャットダウン処理を修正しました。NamedSessionStorageに格納されたセッションコンテキストは、グローバルコンテキストが破棄される前に破棄されるようになりました。#27875 (Vitaly Baranov) 。 windowFunnelの “strict” モードに関するバグ修正。これにより #27469 が修正されます。#27563 (achimbab).- 切り詰められた
bzip2アーカイブの読み込み中に発生する無限ループを修正しました。 #28543 (Azat Khuzhin). MaterializedMySQLからの内部 DDL におけるDROP TABLEの UUID の競合を修正しました。MaterializedMySQL は実験的機能です。#28533 (Azat Khuzhin).Nestedカラムと、名前にドットを含み、Nestedと同じプレフィックスを持つスカラーカラム (例:n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64)) を含むテーブルを選択する際に発生するThere is no subcolumnエラーを修正しました。 #28531 (Anton Popov).ReplicatedVersionedCollapsingMergeTreeの ALTER 後に、エラーExisting table metadata in ZooKeeper differs in sorting key expression.が発生する可能性がある不具合を修正しました。#28515 を修正しました。#28528 (alesapin).- distributed DDLキューのバックグラウンド処理で発生する可能性があった ZooKeeper ウォッチのリーク (軽微な問題) を修正しました。#26036 をクローズしました。#28446 (tavplubix) 。
MaterializedPostgreSQLエンジンでのテーブル名の引用符の欠落を修正しました。#28316 をクローズしました。#28433 (Kseniia Sumarokova) 。- Nullableカラムにおける、JOINされなかった行の誤った動作を修正しました。 #27691 をクローズしました。 #28349 (vdimir).
- すべてのキーカラムが使われていない場合の NOT-IN 索引の最適化を修正しました。これにより #28120 が修正されます。#28315 (Amos Bird) 。
- 新しいパーツが空のパーツに置き換えられたことによって発生していた交差するパーツを修正しました。 #28310 (Azat Khuzhin).
ORDER BYとMergeテーブルを使用し、設定optimize_read_in_orderが有効な場合にクエリ結果が不整合になる問題を修正しました。#28266 (Anton Popov).Nullable(LowCardinality)型で、設定extremesが 1 に設定されたクエリにおいて、未初期化メモリを読み取る可能性がある問題を修正しました。#28165 を修正しました。#28205 (Nikolai Kochetov) 。- プロジェクションに関する複数の細かな修正。詳細はPRを参照してください。#28178 (Amos Bird).
- Context/config リローダーの停止順序の誤りにより、シャットダウン時にごくまれに発生していたセグメンテーションフォールトを修正しました。#28088 (nvartolomei).
- 関数
JSONExtractにおけるNullable(String)型のNULL 値の処理を修正しました。これにより #27929 および #27930 が修正されます。この問題は https://github.com/ClickHouse/ClickHouse/pull/25452 で導入されました。 #27939 (Amos Bird). - 新しい
clickhouse-keeperツールに関する複数の修正。クライアントがリクエストへのレスポンスより先にウォッチ応答を受け取ることがある、clickhouse-keeperのまれな不具合を修正しました。#28197 (alesapin)。子ノードに対するsetリクエストでリストウォッチ (getChildren) がトリガーされた際の、clickhouse-keeperの不正な動作を修正しました。#28190 (alesapin)。clickhouse-keeperの設定変更によってログの消失やサーバーのハングアップが発生するおそれがある、まれなケースを修正しました。#28360 (alesapin)。rotate_logs_intervalを短くした際にログが無限に出力される可能性があるclickhouse-keeperの不具合を修正しました。#28152 (alesapin)。
ビルド/テスト/パッケージングの改善
- Stress Test で Thread Fuzzer を有効化しました。Thread Fuzzer は ClickHouse の機能で、スレッドスケジューリングのより多くの組み合わせをテストし、より多くの潜在的な問題を発見できるようにします。これにより #9813、#9814、#9515、#9516 をクローズします。#27538 (alexey-milovidov)。
- テスト環境向けに新しいログレベル
testを追加しました。これはデフォルトのtraceよりもさらに詳細です。#28559 (alesapin)。 - CMake の configure 段階で git status の情報を出力するようにしました。#28047 (Braulio Valdivielso Martínez)。
- Ubuntu の apt リポジトリを一時的にミラーの ru.archive.ubuntu.com に切り替えました。デフォルトの archive.ubuntu.com が CI から応答しないためです。#28016 (Ilya Yatsishin)。
ClickHouse リリース v21.9 (2021-09-09)
後方互換性を持たない変更
Decimal型のテキスト表現で、末尾のゼロを出力しないようにしました。例: scale 6 の decimal では、1.230000ではなく1.23が出力されます。これにより #15794 をクローズします。アプリケーションが何らかの形で末尾のゼロに依存していた場合は、わずかな非互換性が生じる可能性があります。出力フォーマットでのシリアライゼーションは、設定output_format_decimal_trailing_zerosで制御できます。toStringの実装および String へのキャストは、無条件に変更されます。#27680 (alexey-milovidov).- パラメータ付き aggregate function の state に対して
-Mergecombinator を適用する際、異なるパラメータを持つ aggregate function によって生成された state は許可しないようにしました。たとえば、fooState(42)(x)の state はfooMerge(s)やfooMerge(123)(s)では確定できず、fooMerge(42)(s)のようにパラメータを明示的に指定し、その値も一致している必要があります。これは、パラメータを最終化のためだけに使うquantileやsequence*などの一部の特殊な aggregate function には影響しません。#26847 (tavplubix). - clickhouse-local では、ポート付きのローカルアドレスを常にリモートとして扱うようにしました。#26736 (Raúl Marín).
- カラムの別名が expression の名前と同じになっている複雑なクエリで、不正な cast が発生することがある問題を修正しました。これにより #25447 と #26914 を修正します。この修正により後方非互換性が生じる可能性があります。異なる expression に同じ名前が付いている場合は、Exception が throw されます。
enable_optimize_predicate_expressionが設定されている一部のまれなケースでは、これによって動作しなくなる可能性があります。#26639 (alexey-milovidov). - scalar サブクエリは、その型が
Nullableになり得る場合、常にNullableの結果を返すようになりました。これは、サブクエリが空の場合、その結果はNullであるべきだからです。従来は、型推論では scalar サブクエリを実行しないため、非 Nullable 型が使われて型の不整合エラーが発生する可能性がありました。結果が空で、Nullableに変換できない scalar サブクエリ (ArrayやTupleなど) は、現在ではエラーを throw します。#25411 を修正しました。#26423 (Nikolai Kochetov). - here document の構文を導入しました。例:
SELECT $doc$ VALUE $doc$。#26671 (Maksim Kita)。この変更は、クエリ内に$を含む識別子がある場合、後方非互換となります #28768。 - これで、索引は
isNullおよびisNotNullを含む Nullable 型を扱えるようになりました。#12433 および #12455 (Amos Bird)、ならびに #27250 (Azat Khuzhin)。ただし、これには on-disk format の変更が含まれており、新しい server は古い data を読み取れても、古い server は読み取れません。また、MINMAXデータスキッピングインデックスがある場合、新しい索引は従来の.idxではなく.idx2拡張子を持つため、Data after mutation/merge is not byte-identicalエラーが発生することがあります。そのため、この場合は既存のすべてのレプリカの更新を遅らせるべきではありません。そうしないと、古いレプリカ (<21.9) が 21.9+ の新しいレプリカから data をダウンロードした際に、ダウンロードした part に索引を適用できなくなります。
新機能
- 関数の短絡評価を実装し、#12587 に対応しました。関数の短絡評価を制御する設定
short_circuit_function_evaluationを追加しました。#23367 (Kruglov Pavel). - INTERSECT、EXCEPT、ANY、ALL 演算子に対応しました。#24757 (Kirill Ershov) 。 (Kseniia Sumarokova) 。
- AES-CTRアルゴリズムを使用した、仮想ファイルシステムレベルでの暗号化 (保存データの暗号化) のサポートを追加しました。#24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
- 同義語拡張機能向けに、トークン化、ステミング、レンマ化、検索を行う自然言語処理 (NLP) 関数を追加しました。#24997 (Nikolay Degterinsky).
- S2 geometry libraryとの連携を追加しました。#24980 (Andr0901) 。 (Nikita Mikhaylov) 。
- SQLite テーブルエンジン、テーブル関数、データベースエンジンを追加。#24194 (Arslan Gumerov) 。 (Kseniia Sumarokova) 。
MySQL、PostgreSQL、ClickHouse、JDBC、Cassandraの Dictionary ソースでのカスタムクエリのサポートを追加しました。#1270 をクローズしました。#26995 (Maksim Kita).- ZooKeeper を通じて、ユーザー、ロール、行ポリシー、クォータ、設定プロファイルの共有 (レプリケート) ストレージを追加しました。 #27426 (Kevin Michel) 。
INTO OUTFILEに、圧縮アルゴリズムを自動選択する圧縮機能を追加しました。#3473 を解決しました。#27134 (Filatenkov Artur).SELECT ... INTO OUTFILEと同様に、INSERT ... FROM INFILEを追加しました。#27655 (Filatenkov Artur) 。complex_key_range_hashedDictionary を追加しました。#22029 をクローズしました。#27629 (Maksim Kita)。- JOIN ON 句で式が使えるようになりました。#21868 をクローズしました。#24420 (Vladimir C).
- クライアントがサーバーに接続すると、サーバーですでに収集されているすべての警告に関する情報を受け取ります。 (これは
--no-warningsオプションで無効にできます。) サーバー設定に関する警告を収集するためのsystem.warningsテーブルを追加しました。#26246 (Filatenkov Artur). #26282 (Filatenkov Artur). - WITH および SELECT の定数式を aggregate function のパラメータで使用できるようにしました。#10945 をクローズしました。#27531 (abel-cheng).
tupleToNameValuePairsを追加しました。これは、名前付きタプルを名前と値のペアの配列に変換する関数です。#27505 (Braulio Valdivielso Martínez) 。- インポート/エクスポートで
bzip2圧縮方式をサポートしました。#22428 をクローズしました。#27377 (Nikolay Degterinsky). bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit)関数を追加しました。これは、offsetを指定して、カーディナリティをcardinality_limitに制限した bitmap の部分集合を作成します。#27234 (DHBin).system.usersにdefault_databaseカラムを追加。#27054 (kevin wan) 。- テーブル関数 ‘cluster’ および ‘clusterAllReplicas’ で
clusterマクロをサポートしました。#26913 (polyprogrammist) 。 - 新たに
currentRoles(),enabledRoles(),defaultRoles()関数を追加しました。#26780 (Vitaly Baranov) 。 - 新しい関数
currentProfiles(),enabledProfiles(),defaultProfiles()を追加しました。 #26714 (Vitaly Baranov). - 現在のクエリの (initial_)query_id を返す関数を追加しました。これにより #23682 が解決されます。#26410 (Alexey Boykov).
REPLACE GRANT機能が追加されました。#26384 (Caspian) 。EXPLAINクエリにEXPLAIN ESTIMATE ...モードが追加され、MergeTree テーブルから読み取られる行数、マーク、パーツに関する情報を表示できるようになりました。#23941 をクローズします。#26131 (fastio).system.zookeeper_logテーブルを追加しました。ZooKeeper クライアントのすべての操作がこのテーブルに記録されます。#25449 を実装しました。 #26129 (tavplubix).HDFSストレージ上のReplicatedMergeTreeに対するゼロコピーレプリケーション。 #25918 (Zhichang Yu).Arrow、ORC、Parquetの入力フォーマットで、Nested 型を struct の配列として insert できるようになりました。#25902 (Kruglov Pavel) 。- 新しいデータ型
Date32を追加しました (データは Int32 として保存されます) 。DateTime64と同じ日付範囲をサポートし、Parquet の date32 を ClickHouse のDate32に読み込めるようになりました。toDateと同様の新しい関数toDate32も追加しました。#25774 (LiuNeng). - デフォルトのデータベースを設定できるようにしました。#25268. #25687 (kevin wan).
MongoDBエンジンに、接続文字列オプションを受け付けて SSL 接続をサポートするためのオプションの parameter を追加しました。#21189 をクローズ。#21041 をクローズ。#22045 (Omar Bazaraa)。
実験的機能
- 圧縮の代わりにカラムを暗号化する圧縮コーデック
AES_128_GCM_SIVを追加しました。#19896 (PHO)。今後書き直される予定のため、使用しないでください。 MaterializeMySQLをMaterializedMySQLに名称変更しました。#26822 (tavplubix)。
パフォーマンス改善
clock_gettimeシステムコールの回数を減らすことで、max_execution_time = 0のときの高速なクエリのパフォーマンスを改善しました。 #27325 (filimonov).- パフォーマンス向上のため、日付時刻関連の比較を最適化しました。これにより #27083 を修正しました。 #27122 (Amos Bird).
- 同じファイルに対する同時実行読み取りでファイルディスクリプタを共有するようにしました。Linux では目立ったパフォーマンス差はありませんが、一般的なサーバーではオープンされるファイル数が大幅に (10~100 倍) 減り、運用しやすくなります。 #26214 を参照してください。 #26768 (alexey-milovidov).
- 多数のカラムを持つテーブルからの読み取りが必要な短いクエリのレイテンシを改善しました。 #26371 (Anton Popov).
- クエリ解析時にインデックス用の Set を構築しないようにしました。 #26365 (Raúl Marín).
- ネイティブ表現を使って Nullable 整数型の SUM をベクトル化しました (David Manzanares, Raúl Marín)。 #26248 (Raúl Marín).
Enum型のカラムを含む式をコンパイルするようにしました。 #26237 (Maksim Kita).- 集約関数
groupBitOr,groupBitAnd,groupBitXorをコンパイルするようにしました。 #26161 (Maksim Kita). - 空の DEFAULT カラムの読み取り時に、より適切なブロックサイズ予測を行うことでメモリ使用量を改善しました。 #17317 をクローズします。 #25917 (Vladimir Chebotarev).
ORDER BY primary_keyを含むクエリで、メモリ使用量と読み取る行数を削減しました。 #25721 (Anton Popov).- デフォルトで
distributed_push_down_limitを有効にしました。 #27104 (Azat Khuzhin). timeZoneが定数値の場合にtoTimeZoneが単調性を持つようにし、次のような SQL を使用した際のパーティションプルーニングをサポートします。 #26261 (huangzhaowei).
改善点
- window functions を正式機能とする。
allow_experimental_window_functions設定を削除する。#27184 (Alexander Kuzmenkov) 。 - 分単位ぴったりではないタイムゾーンオフセットとの互換性を改善しました。#27080 (Raúl Marín) 。
Fileテーブルのファイルディスクリプタが通常のファイルである場合、そのファイルを複数回読み取れるようにしました。これにより、stdin がclickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < fileのような通常のファイルであれば、clickhouse-localは stdin を複数回 (複数の SELECT クエリやサブクエリで) 読み取れるようになります。これにより #11124 をクローズしました。共同著者: (alexey-milovidov)。 #25960 (BoloniniD)。- 重複した索引解析を削除し、プロジェクション解析時に無効な limit チェックが行われる可能性を防止しました。 #27742 (Amos Bird).
- HTTPリクエストのボディでクエリパラメータを渡せるようになりました。#27706 (Hermano Lustosa) 。
- パーティション式での
arrayJoinを禁止しました。#27648 (Raúl Marín) 。 - 認証に失敗した場合、クライアントの IP アドレスを記録する。 #27514 (Misko Lee).
- gRPCプロトコルのバイナリデータでは、文字列ではなくバイトを使用するようにしました。#27431 (Vitaly Baranov).
- HTTPポートが設定されていない状態でユーザーがTCPポートにHTTPリクエストを送信しようとした場合、エラーメッセージ付きのレスポンスを返すようにしました。 #27385 (Braulio Valdivielso Martínez).
- 内部使用向けの
_CAST関数を追加しました。この関数は型のNullable性を保持しませんが、内部向けではないcastは設定cast_keep_nullableに従ってNullable性を保持します。#12636 をクローズしました。#27382 (Kseniia Sumarokova). - 整形済みクエリを追加で
system.query_logに記録する設定log_formatted_queriesを追加しました。normalizeQueryやnormalizeQueryKeepNamesなどの関数は、パフォーマンス向上のためにクエリの解析やフォーマットを行わないため、これは正規化クエリの分析に役立ちます。#27380 (Amos Bird). multiMatchAnyなどの hyperscan 関連関数で巨大な正規表現が使用されるのを防ぐため、2 つの設定max_hyperscan_regexp_lengthとmax_hyperscan_regexp_total_lengthを追加しました。#27378 (Amos Bird) 。- bitmap aggregate functions が消費するメモリが、メモリ制限の計算に含まれるようになりました。これにより #26555 が解決されます。#27252 (alexey-milovidov).
- S3プロキシリゾルバに 10 秒間の cache を追加しました。#27216 (ianton-ru) 。
- グローバル mutex を、正規表現の構築ごとの個別のものに分割しました。これにより、大きな正規表現の構築で他の関連スレッドがブロックされるのを防げます。 #27211 (Amos Bird).
- PostgreSQLデータベースエンジンでスキーマをサポートしました。#27166 をクローズしました。#27198 (Kseniia Sumarokova).
- clickhouse-clientでメモリ使用量を追跡できるようにしました。 #27191 (Filatenkov Artur).
- クエリが開始できなかった場合でも、
system.query_logにquery_kindを記録するようにしました。#27182 (Amos Bird) 。 - レプリカ名をレプリカのアクティブ状態に対応付けるカラム
replica_is_activeをテーブルsystem.replicasに追加しました。#27138 をクローズしました。#27180 (Maksim Kita) 。 - Web UIでサーバーURI経由でクエリ設定を渡せるようになりました。 #27177 (kolsys).
- 現在のノードが ZooKeeper にプッシュした DDL エントリ ID の最大値を表す
MaxPushedDDLEntryIDという新しいメトリクスを追加しました。 #27174 (Fuwang Hu). clickhouse-keeperが znode を作成する際の、存在条件および空文字列ノードの判定を改善しました。 #27125 (小路).- Merge JOIN で、右側が空集合の場合も正しく処理されるようになりました。#27078 (Vladimir C).
- 関数が分片レベルの定数として扱えるようになりました。つまり、何らかの分散テーブルのコンテキストで実行された場合は通常のカラムを生成し、それ以外の場合は定数値を生成します。主な関数は
hostName(),tcpPort(),version(),buildId(),uptime(), などです。 #27020 (Amos Bird). extractAllGroupsHorizontalを更新しました。行ごとの一致件数の上限を、オプションの第3引数で設定できるようになりました。#26961 (Vasily Nemkov) 。RocksDBの統計情報を system.rocksdb テーブル経由で公開。ClickHouse の設定 (rocksdb...オプション) から rocksdb オプションを読み取ります。注意: ClickHouse は RocksDB に依存しておらず、RocksDB は追加のインテグレーションストレージエンジンの 1 つにすぎません。#26821 (Azat Khuzhin).- 内部 RocksDB ログの冗長性を低減。注: ClickHouse は RocksDB に依存しておらず、RocksDB は追加のインテグレーション向けストレージエンジンの 1 つにすぎません。これにより #26252 をクローズします。 #26789 (alexey-milovidov).
- デフォルトロールの変更は、新しいセッションにのみ影響します。#26759 (Vitaly Baranov) 。
- Docker ではデフォルトで Watchdog は無効です。Ctrl+C を処理できない問題を修正しました。#26757 (Mikhail f. Shiryaev).
SET PROFILEで、指定したプロファイルに制約が設定されている場合は、それらも適用されるようになりました。#26730 (Vitaly Baranov) 。KILL QUERYリクエストの処理を改善。#26675 (Raúl Marín) 。mapPopulatesSeries関数でMap型をサポートしました。#26663 (Ildus Kurbangaliev) 。skip_unavailable_shards使用時に接続試行が過剰 (x2) になる問題を修正しました。#26658 (Azat Khuzhin) 。- connection の失敗時 (例: EMFILE) に
clickhouse-benchmarkがハングしないようにしました。#26656 (Azat Khuzhin) 。 - Kafka engineで使用できるスレッド数を増やしました。 #26642 (feihengye).
clickhouse-benchmarkにラウンドロビン対応を追加しました (通常の複数 host/port での実行と異なるのは、統計レポートのみです) 。#26607 (Azat Khuzhin).- 実行可能辞書 (
executable、executable_pool) は、clickhouse-localを使用して DDLクエリで作成できるようになりました。#22355 をクローズしました。#26510 (Maksim Kita) 。 mysqlおよびpostgresql互換プロトコルハンドラー向けに、クライアントクエリの種別を設定しました。 #26498 (anneji-dev).distributed_push_down_limit=1を指定すると、SELECT * FROM dist ORDER BY key LIMIT 10のようなクエリでは、分片ごとにLIMITが適用されます。SELECT DISTINCT shading_key FROM dist ORDER BY keyのようなクエリでは、Distinct/LIMIT BYステップは実行されません。これにより、distributed_push_down_limitはoptimize_distributed_group_by_sharding_key最適化でも考慮されるようになりました。#26466 (Azat Khuzhin).- protobuf を 3.17.3 に更新しました。変更履歴は https://github.com/protocolbuffers/protobuf/releases で公開されています。#26424 (Ilya Yatsishin).
- 大規模なクラスターでテールレイテンシを軽減できる
use_hedged_requests設定を有効にしました。 #26380 (alexey-milovidov). - ユーザーの許可ホスト一覧に存在しないホストが含まれる場合の動作を改善しました。#26368 (ianton-ru).
CREATE TABLE経由でDistributedのディレクトリモニター設定を指定できるようになりました (例:CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1など) 。#26336 (Azat Khuzhin) 。- web UI のオリジンと異なる場合、server アドレスを web UI の履歴 URL に保存するようにしました。これにより #26044 をクローズします。 #26322 (alexey-milovidov).
sleep/sleepEachRowの呼び出しをプロファイリングするイベントを追加しました。 #26320 (Raúl Marín).- 異なるクラスター間で分片の接続を再利用できるようになりました。また、
clustertable function の使用時に新しい接続が作成されるのも回避します。#26318 (Amos Bird). - 古い一時ディレクトリの削除実行間隔を、デフォルト値付きのパラメータで制御できるようにしました。 #26212. #26313 (fastio).
- 関数
rangeによって生成されるデータ量の安全しきい値を調整するための設定function_range_max_elements_in_blockを追加しました。これにより #26303 がクローズされます。#26305 (alexey-milovidov). - テーブル作成時にハッシュ関数をチェックし、サンプリング時にはチェックしないようにしました。MergeTree 用の設定を追加しました。誤ったサンプリングカラムでテーブルが作成されていても、サンプリングが一度も使われない場合は、この設定を無効にすることで、例外を出さずにサーバーを起動できます。 #26256 (zhaoyu).
- 指定した String カラムを、デフォルトの bytes ではなく string として Avro に出力するための設定
output_format_avro_string_column_patternを追加しました。#22414 に対応しています。#26245 (Ilya Golshtein). LogおよびTinyLogテーブルのsystem.columnsテーブルに、カラムサイズの情報を追加しました。これにより #9001 が解決されました。#26241 (Nikolay Degterinsky).- カスタムのdisk構成があり、一部のdiskに
detachedディレクトリが存在しない場合でも、system.detached_partsテーブルをクエリしてもExceptionをスローしないようにしました。これにより #26078 を解決します。 #26236 (alexey-milovidov). now()、today()のような定数式を含む、キー内の非決定論的関数をチェックするようにしました。これにより #25875 をクローズしました。これにより #11333 をクローズしました。#26235 (alexey-milovidov).- PostgreSQLテーブルエンジンで、timestamp および timestamptz データ型を
DateTime64に変換するようにしました。#26234 (jasine). - より適切なプロジェクション候補を選択できるよう、プロジェクションに対して積極的な IN 索引解析を適用しました。 #26218 (Amos Bird).
- スカラー関数が渡された場合、
INからGLOBALキーワードを削除するようにしました。以前のバージョンでは、GLOBAL IN f(x)を指定すると例外が発生していました。#26217 (Amos Bird). - 例外メッセージにエラー ID (
BAD_ARGUMENTSなど) を追加しました。これにより #25862 がクローズされました。#26172 (alexey-milovidov) 。 - clickhouse-local の —progress オプションで誤った出力がされる問題を修正しました。プログレスバーは 100% に達すると、clickhouse-client と同様に消去されます。#17484 をクローズしました。#26128 (Kseniia Sumarokova).
- 設定
merge_selecting_sleep_msを追加しました。#26120 (lthaooo). - Linux AIO の 1 ブロック先読みを伴う複雑な使用を廃止し、O_DIRECT を用いたごく単純な同期 IO に置き換えました。以前のバージョンでは、
max_threadsが 1 より大きい場合、設定min_bytes_to_use_direct_ioが正しく機能しないことがありました。direct IO による読み取り (クエリでは既定で無効、大規模なマージでは既定で有効) は、効率がやや低い形で動作します。これにより #25997 をクローズします。#26003 (alexey-milovidov)。 REPLACE TABLEクエリ時にDistributedテーブルをフラッシュするようにしました。#24566 を解決しました。新しいテーブルへの挿入に失敗した場合、[CREATE OR] REPLACE TABLE ... AS SELECTクエリでテーブルを置き換えたり (または作成したり) しないようにしました。#23175 を解決しました。#25895 (tavplubix).- クエリによって実行された (マテリアライズドまたはライブ) ビューの名前を含む
viewsカラムを system.query_log に追加しました。クエリ中に実行された各ビューに関する情報を含む新しいログテーブル (system.query_views_log) を追加しました。ビューの実行動作を変更しました。ビューの実行中に例外がスローされた場合、すでに開始されているビューは完了するまで実行を継続します。これは以前は parallel_view_processing=true の場合の挙動でしたが、現在は常にこの挙動になります。 - 依存ビューが読み取りの進捗をコンテキストに報告するようになりました。#25714 (Raúl Marín). - 分散クエリの実行完了時に、接続のドレインを非同期で行うようにしました。新しいサーバー設定
max_threads_for_connection_collectorが追加され、バックグラウンドで接続を回収する worker 数を指定できるようになりました。プールがいっぱいの場合、接続のドレインは同期的に行われますが、従来とは少し動作が異なります。クライアントに EOS を送信した後にドレインされるため、クエリは十分なデータを受信した時点ですぐに成功し、例外はクライアントに送出されるのではなくログに記録されます。設定drain_timeoutも追加されました (デフォルトは 3 秒です) 。接続のドレインは、タイムアウト時に切断されます。 #25674 (Amos Bird). - 設定で複数の include をサポートしました。複数のソースからユーザー設定やリモートサーバー設定を include できるようになりました。
<include />要素にfrom_zk、from_env、またはincl属性を指定するだけで、対応する内容に置き換えられます。#24404 (nvartolomei). insert_distributed_one_random_shard = 1を使用した分散テーブルへの複数ブロック挿入の不具合を修正しました。これは軽微な機能です。改善として分類しました。#23140 (Amos Bird).Map型で、キー/値としてLowCardinalityおよびFixedStringをサポート。 #21543 (hexiaoting).- ローカルディスク設定の再読み込みを有効にしました。 #19526 (taiyang-li).
バグ修正
- レプリカの不整合を引き起こす可能性のあるいくつかのバグを修正しました。#27808 (tavplubix).
DROP PARTでまれに発生し、エラーUnexpected merged part intersects drop rangeの原因となるバグを修正しました。#27807 (alesapin) 。- Kafka から NULL (トゥームストーン) メッセージを受信した際に、一部のフォーマットでクラッシュが発生しないようにしました。#19255 をクローズしました。#27794 (filimonov).
- サブクエリ内の union distinct におけるカラムフィルタリングを修正しました。#27578 をクローズしました。#27689 (Kseniia Sumarokova).
arrayHasのような関数を、DateTimeやDateTime64などの異なる非数値型のLowCardinality(Nullable(...))配列に適用した際に発生する不正な型キャストを修正しました。以前のバージョンでは不正なキャストが発生していましたが、新しいバージョンでは Exception がスローされます。これにより #26330 をクローズします。 #27682 (alexey-milovidov).- 接続が閉じられなくなる postgresql テーブル関数の不具合を修正しました。#26088 をクローズしました。#27662 (Kseniia Sumarokova).
Unexpected merged part ... intersecting drop range ...エラーが発生する別のケースを修正しました。#27656 (tavplubix).Distributedテーブル内のエイリアス付きカラムに関するエラーを修正しました。 #27652 (Vladimir C).max_memory_usage*をゼロ以外の値に設定すると、0 (無制限) に戻せなくなっていました。修正されました。 #27638 (tavplubix).- 部分から時刻値を構築する際に発生するアンダーフローを修正しました。#27193 をクローズしました。#27605 (Vasily Nemkov).
- 一部のパーツに欠落しているカラムが含まれている場合に、プロジェクションの実体化中にクラッシュする問題を修正しました。これにより #27512 も修正されます。 #27528 (Amos Bird).
- メトリクス
BackgroundMessageBrokerSchedulePoolTaskを修正。タイプミスの可能性があります。#27452 (Ben). - 分片数が 0 の場合の分散クエリおよび集約を修正しました。#27427 (Azat Khuzhin) 。
/proc/meminfoに KB の接尾辞がない場合の互換性。 #27361 (Mike Kot).- 行レベルセキュリティ、PREWHERE、および LowCardinality フィルタを使用したクエリで誤った結果が返される問題を修正しました。 #27179。 #27329 (Nikolai Kochetov).
- 古い構文で作成されたMergeTreeテーブルに対するパーティションIDの不適切な検証を修正しました。#27328 (tavplubix).
- 並列フォーマット (CSV / TSV) 使用時の MySQL プロトコルの問題を修正しました。#27326 (Raúl Marín) 。
- サンプリング付きクエリで
Cannot find columnエラーが発生する問題を修正しました。この問題は #24574 で導入されました。#26522 を修正します。#27301 (Nikolai Kochetov) 。 PREWHERE内でLowCardinalityを含む一部のクエリに対し、Expected ColumnLowCardinality, gotUInt8やBad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinalityといったエラーを修正しました。さらに重要な点として、エラーメッセージ内で空白が欠落していた問題も修正しました。#23515 を修正。#27298 (Nikolai Kochetov)。distributed_group_by_no_merge = 2とdistributed_push_down_limit = 1の組み合わせ、またはoptimize_distributed_group_by_sharding_key = 1とLIMIT BYおよびLIMIT OFFSETの組み合わせで発生する問題を修正しました。#27249 (Azat Khuzhin) 。いずれも、ほとんど使われていないわかりにくい設定の組み合わせです。- 非レプリケートのMergeTreeで、無効なパーティションが原因でmutationが停止する問題を修正しました。 #27248 (Azat Khuzhin).
- 曖昧な場合、ラムダ関数では他の別名や識別子よりもその引数が優先されます。 #27235 (Raúl Marín).
- merge join におけるカラム構造を修正し、#27091 をクローズしました。#27217 (Vladimir C)。
- まれに、
system.detached_partsテーブルに一部のパーツに関する誤った情報が含まれることがありましたが、この問題を修正しました。#27114 を修正。#27183 (tavplubix). - 空の配列を指定した場合の関数
multiSearch*における未初期化メモリの問題を修正し、#27169 をクローズしました。#27181 (Vladimir C). - GRPCServer の同期処理を修正しました。この PR で #27024 を修正しています。#27064 (Vitaly Baranov) 。
cache、complex_key_cache、ssd_cache、complex_key_ssd_cacheの設定のパースを修正しました。allow_read_expired_keys、max_update_queue_size、update_queue_push_timeout_milliseconds、query_wait_timeout_millisecondsの各オプションは、cache型以外の辞書ではパースされていませんでした。#27032 (Maksim Kita) 。- DROP_RANGE との競合によって発生する可能性がある mutation の滞留を修正しました。 #27002 (Azat Khuzhin).
- これにより、
ALTER TABLE ... PARTITION ID xxxのようなクエリ内のパーティション ID の妥当性が検証されるようになりました。#25718 を修正しました。#26963 (alesapin). - 一部のケースで、複数の JOIN 使用時に発生する “Unknown column name” エラーを修正し、#26899 をクローズしました。#26957 (Vladimir C).
- カスタムTLDの読み取りを修正しました (バッファサイズが小さい場合やファイルが大きい場合に処理が停止する問題を修正) 。 #26948 (Azat Khuzhin).
DEFAULTカラムがDEFAULT式を持たない別の非マテリアライズドカラムを参照している場合に発生するMissing columns: 'xxx'エラーを修正しました。#26591。#26900 (alesapin).libraryDictionary ソースのlibrary-bridgeにおける辞書キーの読み込み処理を修正しました。#26834 (Kseniia Sumarokova) 。- 一部の combinator を適用すると aggregate function の parameter が失われ、
Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supportedのような Exception が発生することがありましたが、修正されました。#26196 と #26433 を修正しています。#26814 (tavplubix). system.part_logのREMOVE_PARTにevent_time_microsecondsの値を追加しました。以前のバージョンでは設定されていませんでした。 #26720 (Azat Khuzhin).- ReplicatedMergeTree テーブルのシャットダウン時にデータを削除しないようにして、データとメタデータの不整合が発生するのを防ぎます。#26716 (nvartolomei).
SET ROLEが正しく動作しないことがある問題を、この PR で修正しました。#26707 (Vitaly Baranov).- 並列フォーマットに関する修正 (https://github.com/ClickHouse/ClickHouse/issues/26694)。[#26703](https://github.com/ClickHouse/ClickHouse/pull/26703) (Raúl Marín)。
- window functions で発生する可能性のある
nullptrの逆参照を修正しました。これにより、#25276 が修正されます。#26668 (Alexander Kuzmenkov). - ファイルが空の場合に、clickhouse-client の履歴ファイル変換 (3年前のバージョンの clickhouse-client のフォーマットからアップグレードする際) で発生する不具合を修正しました。 #26589 (Azat Khuzhin).
- groupBitmapAnd/Or/Xor の誤った関数名を修正しました (場合によっては誤って表示されることがありました) 。この問題を修正しました。 #26557 (Amos Bird).
- clickhouse-server の Docker エントリポイント内の
chownコマンドのチェックを更新しました。これにより、Kubernetes 上でクラスターのポッドの再起動に失敗する (またはタイムアウトする) 不具合を修正しました。#26545 (Ky Li). RabbitMQのセットアップが開始されていない場合に、RabbitMQのシャットダウン時にクラッシュする問題を修正しました。#26504 をクローズしました。#26529 (Kseniia Sumarokova).- Dictionary名またはデータベース名がクォートされている場合の
CREATE DICTIONARYクエリの不具合を修正しました。#26491 をクローズしました。#26508 (Maksim Kita). - カラム別名の書き換え後に発生していた、壊れたカラム名解決を修正しました。これにより #26432 が修正されます。 #26475 (Amos Bird).
- fuzzed msan で発生するクラッシュをいくつか修正しました。#22517 を修正します。#26428 (Nikolai Kochetov).
partial_merge_joinで、未結合の block stream が無限に続く問題を修正し、#26325 をクローズしました。 #26374 (Vladimir C).- 削除済みのユーザーとしてログインした際にクラッシュする可能性がある不具合を修正しました。この PR では #26073 を修正しています。#26363 (Vitaly Baranov).
- 複数カラムに対する
optimize_distributed_group_by_sharding_keyを修正しました (optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1が有効で、分片キー式に複数のカラムが含まれている場合に、誤った結果になる問題) 。#26353 (Azat Khuzhin) 。 - 失われたレプリカの復旧処理で、レプリカ間の不整合を引き起こす可能性があるまれなバグを修正しました。 #26321 (tavplubix).
- 内部バッファの末尾にエスケープシーケンスがある場合に、zstd の展開を修正しました (テーブルデータとは無関係な、zstd フレーミング形式での import/export 向け) 。#26013 をクローズしました。#26314 (Kseniia Sumarokova).
- join と totals の論理エラーを修正し、#26017 をクローズしました。#26250 (Vladimir C).
system.stack_traceテーブルのthread_nameカラム内の過剰な改行を削除しました。これにより #24124 が修正されました。#26210 (alexey-milovidov).- 複数の
untuple式が使用された場合に発生する可能性のあるクラッシュを修正しました。#26179 (alexey-milovidov) 。 - Enum に 0 の値がない場合でも、Nullable Enum の
toStringで例外をスローしないようにしました。#25806 をクローズ。#26123 (Vladimir C). - クエリ実行中に例外が発生した際に ClickHouse が送信する MySQL プロトコルパケット内の誤った
sequence_idを修正しました。これにより、MySQL クライアントが ClickHouse サーバーへの接続をリセットする可能性がありました。#21184 を修正しました。#26051 (tavplubix). cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()が定数に対して誤った型を返し、そのためoptimize_skip_unused_shardsが機能しない問題を修正しました。 #26041 (Azat Khuzhin).- prewhere とともに通常の projection を使用した際に、ヘッダーが一致しなくなる可能性がある問題を修正しました。この修正により #26020 も解決されます。#26038 (Amos Bird) 。
remote()において、関数を使わないカラムからの sharding_key を修正しました (以前はselect * from remote('127.1', system.one, dummy)を実行するとUnknown column: dummy, there are only columns .エラーになっていました) 。 #25824 (Azat Khuzhin).MaterializeMySQLから選択する際に発生するNot found column ...およびMissing column ...エラーを修正しました。#23708、#24830、#25794 を修正。#25822 (tavplubix) 。optimize_skip_unused_shards_rewrite_inを非UInt64型向けに修正しました (場合によっては誤った分片が選択されたり、Cannot infer type of an empty tupleまたはFunction tuple requires at least one argumentが発生したりしていました) 。#25798 (Azat Khuzhin) 。
ビルド/テスト/パッケージングの改善
- stateful テストと stateless tests がランダムな timezones で実行されるようになりました。#12439 を修正しました。Protobuf format で String を DateTime として読み取り、DateTime を String として書き込む際に、timezone が考慮されるようになりました。Arrow および Parquet フォーマットで UInt16 を DateTime として読み取る場合、Arrow と Parquet では Date が UInt16 としてシリアライズされるため、まず Date として扱い、その後 DateTime の timezone を考慮して DateTime に変換するようになりました。GraphiteMergeTree で、時刻の rounding に time zone が考慮されるようになりました。#5098 を修正しました。著者: @alexey-milovidov. #15408 (alesapin).
clickhouse-testが Jinja2 templates を使った SQL テストをサポートするようになりました。#26579 (Vladimir C).clang-13での build のサポートを追加しました。これにより #27705 がクローズされます。#27714 (alexey-milovidov). #27777 (Sergei Semin)- 特定の CPU 命令セットの有効/無効を切り替えて build するための CMake オプションを追加しました。これは #17469 および #27509 に対応するものです。#27508 (alexey-milovidov).
- 動的ライブラリ使用時の補助プログラムのリンクを修正しました。#26958 (Raúl Marín).
- RocksDB を
2021-07-16時点の master に更新しました。#26411 (alexey-milovidov).
ClickHouse リリース v21.8、2021-08-12
アップグレードに関する注意
- 新しいバージョンでは、システムログテーブル (
system.query_log、system.query_thread_log、system.processes、system.opentelemetry_span_log) でMapデータ型を使用します。これらのテーブルは新しいデータ型で自動的に作成されます。古いクエリとの互換性を保つため、仮想カラムも作成されます。#18698。#23934, #25773 (hexiaoting, sundy-li, Maksim Kita)。バージョン 21.8 からそれ以前のバージョンに ダウングレード する場合は、ログを含むシステムテーブルを手動でクリーンアップする必要があります。/var/lib/clickhouse/data/system/*_logを確認してください。
新機能
- SQL/JSON 標準の一部をサポートしました。#24148 (l1tsolaiki, Kseniia Sumarokova).
- CPU 使用率、ディスク使用量、メモリ使用量、IO、ネットワーク、ファイル、ロードアベレージ、CPU 周波数、温度センサー、EDAC カウンター、システム稼働時間に関する一般的なシステムメトリクス (
system.asynchronous_metricsおよびsystem.asynchronous_metric_log) を収集するようにしました。あわせて、スケジューリングジッターやメトリクス収集に要した時間に関するメトリクスも追加しました。これは ClickHouse におけるatopのように動作し、追加のツールをインストールしていなくても監視データにアクセスできます。#9430 をクローズしました。#24416 (alexey-milovidov, Yegor Levankov). - MaterializedPostgreSQL テーブルエンジンおよびデータベースエンジンを追加しました。このデータベースエンジンにより、データベース全体またはデータベース内のテーブルの任意の部分集合をレプリケートできます。#20470 (Kseniia Sumarokova).
- 新しい関数
leftPad(),rightPad(),leftPadUTF8(),rightPadUTF8()を追加しました。#26075 (Vitaly Baranov). ADD INDEXコマンドにFIRSTキーワードを追加し、索引リストの先頭に索引を追加できるようにしました。#25904 (xjewer).- 既存のデータスキッピングインデックスに関する情報を含む
system.data_skipping_indicesテーブルを導入しました。#7659 をクローズしました。#25693 (Dmitry Novik). bin/unbin関数を追加しました。#25609 (zhaoyu).mapAddおよびmapSubtract関数でMapとUInt128,Int128,UInt256,Int256型をサポートしました。#25596 (Ildus Kurbangaliev).DISTINCT ON (columns)式をサポートしました。#25404 をクローズしました。#25589 (Zijie Lu).- カスタム設定をデフォルト値にリセットし、テーブルのメタデータから削除できるようにしました。これにより、システムや設定ファイルのデフォルト値を知らなくても変更をロールバックできます。#14449 をクローズしました。#17769 (xjewer).
EXPLAIN PIPELINE graph = 1クエリが送信された場合、Web UI でパイプラインをグラフとして表示するようにしました。#26067 (alexey-milovidov).
パフォーマンス改善
- aggregate functions をコンパイルするようにしました。有効にするには、
compile_aggregate_expressionsオプションを使用します。#24789 (Maksim Kita). - 多数のカラムを持つテーブルの読み取りが必要な短いクエリのレイテンシを改善しました。#26371 (Anton Popov).
改善
- システムログテーブル (
system.query_log、system.query_thread_log、system.processes、system.opentelemetry_span_log) でMapデータ型を使用するようになりました。これらのテーブルは、新しいデータ型で自動作成されます。古いクエリをサポートするために、仮想カラムが作成されます。#18698 を解決しました。#23934, #25773 (hexiaoting, sundy-li, Maksim Kita). - 複合キーを持ち、attribute が 1 つだけの Dictionary で、
dictGet、dictHas関数において key expression を tuple でラップしなくてもよいようにしました。 #26130 (Maksim Kita). AggregateFunctionの state からbin/hex関数を実装しました。#26094 (zhaoyu) 。emptyおよびnotEmpty関数でUUID型の引数をサポートするようになりました。UUIDは、すべての値が 0 の場合 (nil UUID) に空と見なされます。#3446 をクローズしました。#25974 (zhaoyu).- MySQLプロトコルで
SET SQL_SELECT_LIMITをサポートしました。#17115 をクローズしました。#25972 (Kseniia Sumarokova) 。 - ネットワーク通信向けのインストルメンテーションをさらに追加: recv/send バイト用のカウンターと、recvs/sends 用の Gauge を追加。不足していたドキュメントも追加。#5897 をクローズ。#25962 (alexey-milovidov).
- 設定
optimize_move_to_prewhere_if_finalを追加しました。クエリにFINALがある場合、最適化move_to_prewhereは、optimize_move_to_prewhereとoptimize_move_to_prewhere_if_finalの両方が有効なときにのみ有効になります。#8684 をクローズしました。#25940 (Kseniia Sumarokova). - JOINしたテーブルの複雑なクオート付き識別子を許可しました。#17861 をクローズしました。#25924 (alexey-milovidov) 。
Nestedデータ型で、Unicode (中国語やキリル文字など) を含むコンポーネントをサポートしました。#25594 をクローズしました。#25923 (alexey-milovidov) 。quantiles*関数がaggregate_functions_null_for_emptyでも動作するようになりました。#25892 をクローズしました。#25919 (alexey-milovidov).- パラメトリック集約関数のパラメータとして、リテラルだけでなく任意の定数式 (例:
1 + 2) を指定できるようになりました。また、パラメトリック集約関数内でクエリパラメータ ({param:UInt8}のようなパラメータ化クエリ内のもの) も使えるようになりました。#11607 をクローズしました。#25910 (alexey-milovidov). - 無効な
Dateをパースしようとした際に、例外が正しくスローされるようにしました。#6481 をクローズしました。#25909 (alexey-milovidov). - 設定で複数の include をサポートしました。複数のソースからユーザー設定やリモートサーバー設定を include できます。
from_zk、from_env、またはincl属性を持つ<include />要素を配置するだけで、その内容が置換先の内容に差し替えられます。#24404 (nvartolomei). "null"という名前のカラムを持つクエリ (バッククォートまたはダブルクォートで指定する必要があります) およびON CLUSTERをサポートしました。#24035 をクローズしました。#25907 (alexey-milovidov).JSONExtractでLowCardinality、Decimal、UUIDをサポートしました。#24606 を修正しました。#25900 (Kseniia Sumarokova).- 履歴ファイルの形式を
readlineフォーマットからreplxxフォーマットに変換しました。#25888 (Azat Khuzhin) 。 DROP PARTまたは空のパーツのバックグラウンド削除後に、交差するパーツが発生することがある問題を修正しました。#25884 (alesapin).ReplicatedMergeTreeテーブルで失われたパーツへの対処を改善しました。ReplicationQueueでまれに発生する不整合を修正しました。#10368 を修正しました。#25820 (alesapin).- 読み取りできない作業ディレクトリでも clickhouse-client を起動できるようにしました。 #25817 (ianton-ru).
Mergeストレージの”利用可能なカラムがありません”エラーを修正しました。#25801 (Azat Khuzhin) 。- MySQL Engine は、MySQL と ClickHouse 間でカラムコメントをやり取りできるようになりました。#25795 (Storozhuk Kostiantyn) 。
- 空の集合に対する
GROUP BY定数の動作の不整合を修正しました。#6842 をクローズしました。#25786 (Kseniia Sumarokova). ReplicatedMergeTreeのDROP PARTITIONおよびTRUNCATEで、パーティション内で進行中のマージをキャンセルするようにしました。#17151 を解決しました。#25684 (tavplubix).- MaterializeMySQL で ENUM` データ型をサポート。#25676 (Storozhuk Kostiantyn) 。
- JOIN でマテリアライズドカラムおよびエイリアス付きカラムをサポートし、#13274 を解決しました。#25634 (Vladimir C).
ALTER TABLE ... DETACHとバックグラウンドマージの間で発生しうる論理的なレースコンディションを修正しました。#25605 (Azat Khuzhin) 。NetworkReceiveElapsedMicrosecondsメトリクスが、クライアントからINSERTされるデータの待機時間を正しく含むようにしました。#9958 をクローズ。#25602 (alexey-milovidov).- S3およびHDFSで
TRUNCATE TABLEをサポートしました。#25530 をクローズしました。#25550 (Kseniia Sumarokova). - バックグラウンドジョブ (merges、mutations、fetches) の実行に使用するプールのスレッド数を変更するための、設定の動的リロードをサポートしました。#25548 (Nikita Mikhaylov).
JSONExtractを使って、文字列以外の要素も文字列として抽出できるようにしました。これは #25414 に対応するものです。#25452 (Amos Bird).StorageMergeのDatabase引数で正規表現をサポート。#776 をクローズ。#25064 (flynn).- Web UI: 値が URL のように見える場合、リンクを自動生成します。#25965 (alexey-milovidov).
- Centos 8 などの
systemdを使用するシステムで、sudo service clickhouse-server startが動作するようにしました。#14298 をクローズ。#17799 をクローズ。#25921 (alexey-milovidov).
バグ修正
- 一部のケースでの誤った
SET ROLEを修正しました。#26707 (Vitaly Baranov). - window functions における
nullptrのデリファレンスの可能性を修正しました。#25276。#26668 (Alexander Kuzmenkov) 。 groupBitmapAnd/Or/Xorの誤った関数名を修正しました。#26557 (Amos Bird)。- RabbitMQ のセットアップが開始されていなかった場合に、シャットダウン時に RabbitMQ がクラッシュする問題を修正しました。#26504 をクローズしました。#26529 (Kseniia Sumarokova).
CREATE DICTIONARYクエリで、Dictionary 名またはデータベース名が引用符で囲まれている場合に発生する問題を修正しました。#26491 をクローズしました。#26508 (Maksim Kita).- カラムの別名を書き換えた後に名前解決が壊れる問題を修正しました。#26432。#26475 (Amos Bird).
partial_merge_joinの close 処理で、未結合の block ストリームが無限に続く問題を修正しました。#26325. #26374 (Vladimir C).- 削除済みのユーザーとしてログインした際に発生する可能性があるクラッシュを修正しました。 #26073 を修正しました。 #26363 (Vitaly Baranov).
- 複数カラムに対する
optimize_distributed_group_by_sharding_keyを修正 (optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1を使用し、シャーディングキー式に複数カラムが含まれる場合に誤った結果になる問題) 。#26353 (Azat Khuzhin). DateからDateTime(またはDateTime64) へのCASTで、DateTime型のタイムゾーンが使われていませんでした。これは、DateとDateTimeの比較にも影響する可能性があります。DateとDateTimeの共通型の推論でも、対応するタイムゾーンが使われていませんでした。そのため、関数ifの結果や配列の構築に影響していました。#24128 をクローズしました。#24129 (Maksim Kita) 。- 失われたレプリカの復旧時に、まれにレプリカ間で不整合が生じる可能性がある不具合を修正しました。 #26321 (tavplubix).
- 内部バッファの末尾にエスケープシーケンスがある場合の zstd の解凍処理を修正しました。#26013 をクローズします。#26314 (Kseniia Sumarokova) 。
- totals を伴う join での論理エラーを修正し、#26017 をクローズしました。 #26250 (Vladimir C).
system.stack_traceテーブルのthread_nameカラム内の不要な改行を削除しました。#24124 を修正しました。#26210 (alexey-milovidov).LowCarinalityカラムでのjoinGetの問題を修正し、#25993 をクローズしました。#26118 (Vladimir C).validate_polygons設定がオフの場合にpointInPolygonで発生する可能性があるクラッシュを修正しました。#26113 (alexey-milovidov).- 存在しないリモートディレクトリの走査時に例外が発生する問題を修正しました。#26087 (ianton-ru).
- ZooKeeperクライアント内の
abortが原因でまれに発生するserverのクラッシュを修正しました。#25813 を修正。#26079 (alesapin). - 一部のケースで、右側のサブクエリ join におけるスレッド数の見積もりが誤っていた問題を修正しました。#24075 をクローズしました。#26052 (Vladimir C).
- クエリ実行中に例外が発生した際に ClickHouse が送信する MySQL プロトコルパケット内の
sequence_idが誤っていた問題を修正しました。これにより、MySQL クライアントが ClickHouse サーバーへの接続をリセットする可能性がありました。#21184 を修正しました。#26051 (tavplubix). PREWHEREを使用した通常のプロジェクションで、ヘッダーが不一致になる可能性がある問題を修正しました。修正 #26020。 #26038 (Amos Bird).- 整数キーを持つ
Map型のJSONへのフォーマットを修正しました。 #25982 (Anton Popov). - クエリプロファイラのスタック巻き戻し中に発生する可能性のあるデッドロックを修正しました。#25968 を修正しました。#25970 (Maksim Kita).
- 不正な引数で
dictGet()を呼び出した際に発生するクラッシュを修正しました。#25913 (Vitaly Baranov) 。 - PostgreSQL エンジンにおける
scram-sha-256認証を修正しました。#24516 をクローズしました。#25906 (Kseniia Sumarokova). - background pool がいっぱいのときに、バックグラウンド task のバックオフが極端に長くなる問題を修正しました。 #25836 の修正です。 #25893 (alesapin).
- デフォルト以外のページサイズ環境における ARM の例外処理を修正しました。#25512、#25044、#24901、#23183、#20221、#19703、#19028、#18391、#18121、#17994、#12483 を修正しました。#25854 (Maksim Kita).
remote()で、関数を使わずにカラムから sharding_key を指定した場合の不具合を修正しました (以前はselect * from remote('127.1', system.one, dummy)を実行するとUnknown column: dummy, there are only columns .エラーが発生していました) 。 #25824 (Azat Khuzhin).MaterializeMySQLからの選択時に発生するNot found column ...およびMissing column ...エラーを修正しました。#23708、#24830、#25794 を修正します。#25822 (tavplubix)。- 非UInt64型における
optimize_skip_unused_shards_rewrite_inの問題を修正しました (誤った分片を選択してしまうことや、Cannot infer type of an empty tupleまたはFunction tuple requires at least one argumentをスローすることがありました) 。 #25798 (Azat Khuzhin). ReplicatedMergeTreeテーブルに対するDROP PARTクエリで、Unexpected merged part intersecting drop rangeというエラーメッセージが発生する可能性のあるまれなバグを修正しました。 #25783 (alesapin).GROUP BY式を含むTTLで、part内で最初の実行後にTTLを実行できなくなる不具合を修正しました。#25743 (alesapin).- StorageMerge が別名付きのテーブルにアクセスできるようにしました。#6051 をクローズ。#25694 (Kseniia Sumarokova).
- 一部のケースで dict join が遅くなる問題を修正し、#24209 をクローズしました。 #25618 (Vladimir C).
- 有効期限 (TTL) 式で使用されるカラムに対する
ALTER MODIFY COLUMNを修正しました。 #25554 (Anton Popov). UInt8以外の型のPREWHEREで発生するアサーションを修正し、#19589 をクローズしました。 #25484 (Vladimir C).- ファズテストで検出された msan のクラッシュをいくつか修正しました。#22517 を修正します。#26428 (Nikolai Kochetov).
clickhouse-serverの Docker エントリポイントにおけるchownコマンドのチェックを更新しました。これにより、Kubernetes で発生するエラー ‘クラスターのポッド再起動に失敗しました (またはタイムアウト) ’ が修正されます。#26545 (Ky Li).
ClickHouse リリース v21.7 (2021-07-09)
後方互換性を持たない変更
- 明示的に定義された大きな Set を含むクエリのパフォーマンスを改善しました。互換性設定
legacy_column_name_of_tuple_literalを追加しました。バージョン 21.7 未満からそれ以降の任意のバージョンへクラスターをローリングアップデートする際は、これをtrueに設定することを推奨します。そうしないと、アップデート中にIN句で明示的に定義された Set を含む分散クエリが失敗する可能性があります。 #25371 (Anton Popov). - clickhouse-keeper (ZooKeeper の実験的な代替) における最大バッファサイズが、前方・後方互換性のない形で変更されました。後で行うより、今のうち (本番運用前) に対応しておくほうが望ましいです。 #25421 (alesapin).
新機能
- XML の代替として、YAML フォーマットでの設定をサポートしました。これにより #3607 をクローズしました。#21858 (BoloniniD)。
- データ自体は (おそらく) 存在しているものの、ZooKeeper のメタデータが失われた場合に、レプリケートテーブルを復元する手段を提供します。#13458 を解決しました。#13652 (Mike Kot)。
- Arrow/Parquet/ORC で structs と maps を、また Arrow の入出力フォーマットで辞書をサポートしました。新しい設定
output_format_arrow_low_cardinality_as_dictionaryも追加しました。#24341 (Kruglov Pavel)。 - 辞書で
Array型のサポートを追加しました。#25119 (Maksim Kita)。 bitPositionsToArray関数を追加しました。#23792 をクローズしました。著者 [Kevin Wan] (@MaxWk)。#25394 (Maksim Kita)。- ‘Friday’ や ‘April’ のような名前を返す
dateName関数を追加しました。著者 [Daniil Kondratyev] (@dankondr)。#25372 (Maksim Kita)。 - カラムを JSON 表現にシリアライズする
toJSONString関数を追加しました。#25164 (Amos Bird)。 query_logに 2 つの新しいカラムinitial_query_start_time、initial_query_start_time_microsecondが追加され、分散クエリがある場合はその開始時刻を記録するようになりました。#25022 (Amos Bird)。- 集約関数
segmentLengthSumを追加しました。#24250 (flynn)。 - すべての IN/JOIN をデフォルトで GLOBAL IN/JOIN にする新しい boolean 設定
prefer_global_in_and_joinを追加しました。#23434 (Amos Bird)。 Jointable engine に対するALTER DELETEクエリをサポートしました。#23260 (foolchi)。- 集約関数
quantileBFloat16と、それに対応するquantilesBFloat16およびmedianBFloat16を追加しました。これは非常にシンプルで高速な分位点推定器で、相対誤差は 0.390625% 以下です。これにより #16641 をクローズしました。#23204 (Ivan Novitskiy)。 flow analysisに有用なsequenceNextNode()関数を実装しました。#19766 (achimbab)。
実験的機能
- HDFS 上の仮想ファイルシステムのサポートを追加しました。#11058 (overshov) (Kseniia Sumarokova).
- clickhouse-keeper (ZooKeeper の実験的な代替機能) が、ZooKeeper 互換の
digestACL をサポートするようになりました。#24448 (alesapin).
パフォーマンス改善
- 一部の関数を subcolumn の読み取りに変換し、読み取るデータ量を削減する最適化を追加しました。たとえば、ステートメント
col IS NULLは subcolumncol.nullの読み取りに変換されます。この最適化は設定optimize_functions_to_subcolumnsにより有効化できますが、現時点ではデフォルトで無効です。 #24406 (Anton Popov). - より多くのカラムを、可能な場合はエイリアス式に書き換えるようにしました。これにより、プロジェクションなどの、より高度な最適化が有効になる場合があります。 #24405 (Amos Bird).
- 型
bloom_filterの索引を、定数 Array を伴うhasAny関数の式で使用できるようになりました。これにより #24291 が解決されます。 #24900 (Vasily Nemkov). - RabbitMQ のキューが空の場合に読み取り試行を再スケジュールするため、指数バックオフを追加しました。 (ClickHouse は RabbitMQ からのデータ取り込みをサポートしています。) これにより #24340 が解決されます。 #24415 (Kseniia Sumarokova).
改善
- レプリケーションの帯域幅を制限できるようになりました。2 つの Replicated*MergeTree 設定
max_replicated_fetches_network_bandwidthとmax_replicated_sends_network_bandwidthを追加し、テーブルごとのレプリケーション fetch/send の最大速度を制限できるようにしました。さらに、サーバー全体に適用される 2 つの設定 (defaultuser profile 内)max_replicated_fetches_network_bandwidth_for_serverとmax_replicated_sends_network_bandwidth_for_serverを追加し、すべてのテーブルに対するレプリケーションの最大速度を制限できるようにしました。これらの設定は完全に厳密に適用されるわけではありません。デフォルトでは無効です。#1821 を修正しました。#24573 (alesapin). - ODBC および Library bridge 向けのリソース制約と分離。bridge プロセス用に、専用の
clickhouse-bridgeグループとユーザーを使用します。bridge が OOMキラーの最優先対象となるように、oom_score_adj を設定します。最大 RSS を 1 GiB に設定します。#23861 をクローズしました。#25280 (Kseniia Sumarokova). - メインの
clickhouse実行ファイルへのスタンドアロンのclickhouse-keeperシンボリックリンクを追加しました。これにより、メインのClickHouse serverなしで協調機能を実行できるようになりました。#24059 (alesapin). VIEWへのクエリではグローバル設定を使用するようにしました。VIEWへのクエリがローカル設定を使用した場合の動作を修正しました。CREATE VIEWとSELECTの設定が異なるとエラーが発生していました。現時点では、VIEWではこれらの変更された設定は使用されませんが、CREATE VIEWクエリのSETTINGSセクションで追加の設定を渡すことは引き続き可能です。#20551 をクローズしました。#24095 (Vladimir).- サーバー起動時、不正なパーティションIDを持つパーツは削除されることはなく、常にデタッチされていました。 #25070. #25166 (Nikolai Kochetov).
- バックグラウンドスケジュールプールのサイズを 128 に増やしました (
background_schedule_pool_size設定) 。これにより、ZooKeeper への接続が遅い場合にレプリケーションキューがハングするのを回避できます。#25072 (alesapin). - バックグラウンドで一度にマージできるパーツ数を制限する MergeTree 設定
max_parts_to_merge_at_onceを追加しました。OPTIMIZE FINALクエリには影響しません。#1820 を修正しました。#24496 (alesapin). - パーティションプルーニングで
NOT IN演算子が使えるようになりました。#24894 (Amos Bird) 。 127.0.1.1のような IPv4 アドレスをローカルとして認識するようにしました。これについては議論の余地がありますが、#23504 をクローズします。Michael Filimonov がこの機能をテストする予定です。#24316 (alexey-milovidov).- MaterializeMySQL で作成された ClickHouse データベース (実験的機能) に、マテリアライズ元の MySQL データベースにあるすべてのカラムコメントが含まれるようになりました。 #25199 (Storozhuk Kostiantyn).
- MySQLストレージエンジン向けに設定 (
connection_auto_close/connection_max_tries/connection_pool_size) を追加しました。#24146 (Azat Khuzhin) 。 - Distributed engine の起動時間を短縮しました。#25663 (Azat Khuzhin) 。
- 分散テーブルの改善。internal_replication=true の場合、dirname からレプリカを除外しました (これにより、クラスターを持つ Distributed への INSERT を任意の数のレプリカから実行できるようになりました。従来は 15 個のレプリカまでしかサポートされておらず、それを超えると async ブロック用ディレクトリの作成時に ENAMETOOLONG で失敗していました) 。 #25513 (Azat Khuzhin).
LowCardinalityでInterval型がサポートされました。これは一部の式の中間値に必要です。#21730 をクローズしました。#25410 (Vladimir).sequenceMatchおよびsequenceCount関数の時間条件で==演算子が使えるようになりました。例: sequenceMatch(’(?1)(?t==1)(?2)’)(time, data = 1, data = 2)。 #25299 (Christophe Kalenzaga).- 設定項目
http_max_fields、http_max_field_name_size、http_max_field_value_sizeを追加しました。#25296 (Ivan) 。 - 関数
ifの分岐でDecimal型とInt型をサポートするようにしました。これにより #20549 がクローズされます。これにより #10142 がクローズされます。#25283 (alexey-milovidov)。 clickhouse-clientのプロンプトを更新し、再接続時にメッセージを表示するようにしました。これにより #10577 が解決されます。#25281 (alexey-milovidov).- 集約関数
topKのメモリ追跡を修正しました。これにより #25259 がクローズされます。#25260 (alexey-milovidov)。 - IDN ホスト (例:
example.рф) に対するtopLevelDomainを修正しました。従来は、このようなホストに対して空文字列を返していました。#25103 (Azat Khuzhin). - 実行時に Linux カーネルのバージョンを検出するようにしました (ネストされた epoll を動作させるために必要であり、
async_socket_for_remote/use_hedged_requestsでは必須です。そうしないと、リモートクエリがハングする可能性があります) 。 #25067 (Azat Khuzhin) 。 - 分散クエリにおいて、
optimize_skip_unused_shards=1のとき、(sharding key) IN (one-element-tuple)のような条件で分片をスキップできるようになりました。 (複数要素の Tuple はサポートされていましたが、単一要素の Tuple はリテラルとして解釈されるため、動作していませんでした。) #24930 (Amos Bird). - S3エラーのログメッセージを改善し、キーやバケットが空の場合でも空白が二重に入らないようにしました。#24897 (Vladimir Chebotarev).
- 一部のクエリでは、多段階のセマンティック解析が必要です。この場合は、
IN用に生成済みの Set を再利用してみてください。#24874 (Amos Bird) 。 insert_distributed_syncでmax_distributed_connectionsを尊重するようにしました (そうしないと、大規模なクラスターで同期 insert を行う際にmax_thread_pool_sizeを使い果たす可能性があります) 。 #24754 (Azat Khuzhin).- スカラーサブクエリで、
Limit for rows or bytes to read exceededのようなエラーが隠蔽されないようにしました。#24545 (nvartolomei). - String-to-Int パーサーの判定を厳格化し、
toInt64('+')で例外を送出するようにしました。#24475 (Amos Bird) 。 SSD_CACHEを DDL クエリで作成した場合、user_filesディレクトリ内にのみ作成できます。 #24466 (Maksim Kita).- insertクエリでデフォルト以外のスキーマを指定するPostgreSQLのサポートを追加しました。 #24149 をクローズ。 #24413 (Kseniia Sumarokova).
- IPv6 アドレスが正しく解決されるように修正しました (つまり、
select * from remote('[::1]', system.one)が動作するように修正しました) 。 #24319 (Azat Khuzhin). - 複数行モードで、
FROM句内のサブクエリに含まれる行末の空白を修正し、クエリの出力もよりわかりやすくなるようわずかに変更しました。#24151 (Azat Khuzhin). - 分散テーブルの改善。障害発生時 (たとえばメモリ制限や破損が原因の場合) に分散 Batch を分割できるようにする機能が、
distributed_directory_monitor_split_batch_on_failureの設定として追加されました (デフォルトでは OFF) 。#23864 (Azat Khuzhin) 。 Joinテーブルエンジンでのカラム名の競合に対応しました。#20309 をクローズしました。#23769 (Vladimir).clickhouse-localのFileテーブルエンジン、およびデータが stdin 経由で渡された場合のclickhouse-clientの INSERT クエリで、進行状況が表示されるようになりました。#18209 をクローズしました。#23656 (Kseniia Sumarokova) 。clickhouse-copierのバグ修正と改善。異なる (ただし互換性のあるスキーマの) テーブルをコピーできるようにしました。#9159 をクローズ。ReplacingMergeTree をコピーするためのテストを追加。#22711 をクローズ。カラムの有効期限 (TTL) とデータスキッピングインデックスをサポート。内部の Distributed テーブルを作成する際には、これらは単純に削除されます (有効期限 (TTL) とスキッピングインデックスは基になるテーブルに残ります) 。#19384 をクローズ。MATERIALIZED カラムと ALIAS カラムをコピーできるようにしました。これが役立つケースもあります (たとえば、このカラムが PRIMARY KEY に含まれている場合) 。これにより、タスク設定でallow_to_copy_alias_and_materialized_columnsプロパティを true に設定すると許可されます。#9177 をクローズ。[#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007) をクローズ。#9514 をクローズ。補助テーブルを移動する前に元のテーブルのパーティションを削除するためのallow_to_drop_target_partitionsプロパティをタスク設定に追加。#20957 をクローズ。OPTIMIZE DEDUPLICATEクエリを廃止。この回避策が必要だったのは、ALTER TABLE MOVE PARTITIONが何度も再試行され、通常の MergeTree テーブルには重複排除機能がないためです。#17966 をクローズ。進行状況をパスtask_path + /statusの ZooKeeper ノードに JSON フォーマットで書き込むようにしました。#20955 をクローズ。引数なしの ReplicatedTables をサポート。#24834 をクローズ 。#23518 (Nikita Mikhaylov).- S3 からの読み取りを再試行する際、各再試行の間にバックオフを伴う待機を追加しました。#23461 (Vladimir Chebotarev) 。
Distributedtable への INSERT で、insert_allow_materialized_columns(マテリアライズドカラムを許可) が反映されるようにしました。#23349 (Azat Khuzhin).- 分散クエリでLIMITのプッシュダウンを可能にしました。#23027 (Azat Khuzhin) 。
- 複数の S3 ボリュームを使用する zero-copy レプリケーションの問題を修正 (#22679 を修正) 。#22864 (ianton-ru) 。
- ユーザーがオペレーティングシステムに任意の空きポートを要求した際にバインドされた実際のポート番号を特定し、それをログメッセージに表示するようにしました。 #25569 (bnaecker).
attndimsが場合によっては正しく動作しないため、postgres配列の変換結果が n 次元配列ではなく String データ型になってしまうことがある問題を修正しました。#24804 をクローズしました。#25538 (Kseniia Sumarokova).- MySQL、PostgreSQL、ODBC における、timezone 付き DateTime の変換を修正しました。#5057 をクローズしました。#25528 (Kseniia Sumarokova) 。
- テーブルごとに
KILL MUTATIONを区別するようにしました (これにより、予期しないCancelled mutating partsエラーを修正) 。#25025 (Azat Khuzhin) 。 - bucket のルートに S3 disk を宣言できるようになりました (S3 仮想ファイルシステムは開発中の実験的機能です) 。#24898 (Vladimir Chebotarev) 。
- 分散テーブルでサブカラム (例:Tuple の部分) を読み取れるようにしました。#24472 (Anton Popov) 。
- MySQL互換プロトコル向けの機能改善:
user関数が正しい出力を返すようにしました。#25697 をクローズしました。#25697 (sundyli).
バグ修正
- 後方互換性を改善。パーティションキーで使用される場合は、古い
modulo関数バージョンを使用します。#23508 をクローズ。#24157 (Kseniia Sumarokova) 。 - 低メモリのサーバーでごくまれに発生し、再起動しないとマージを実行できなくなる不具合を修正しました。おそらく #24603 も修正されます。 #24872 (alesapin).
alter move/replace partitionの同時実行時に、レプリケーションキューで発生することがある極めてまれなエラーTagging already tagged partを修正しました。これにより、#22142 も修正される可能性があります。#24961 (alesapin).- 他の集約関数の集約関数 state を集約して集約関数 state を計算する際に発生する可能性のあるクラッシュを修正しました (実用的なユースケースではありません) 。#24523 を参照してください。#25015 (alexey-milovidov)。
- クエリ
SYSTEM RESTART REPLICAまたはSYSTEM SYNC REPLICAが完了しない場合の挙動を修正しました。この問題は、RAM 容量が極端に少ないサーバーで確認されました。#24457 (Nikita Mikhaylov). - clickhouse-server 内で ZooKeeper クライアントがハングする可能性がある不具合を修正しました。 #24721 (alesapin).
- ZooKeeper への connection が失われ、connection の復元後にレプリカが複製された場合、replication queue に outdated な エントリ が含まれることがありました。replication queue に 交差する 仮想パーツ が含まれている際に、アサーションが失敗する問題を修正しました。これは、一部の data part が失われた場合にまれに発生することがあります。終了するのではなく、Log に error を出力するようにしました。 #24777 (tavplubix).
- クエリプランの式プッシュダウン最適化で
WHERE条件が失われる問題を修正しました (設定query_plan_filter_push_down = 1をデフォルトで有効化) 。#25368 を修正します。#25370 (Nikolai Kochetov)。 - 有効期限 (TTL) を伴うマージ後に交差するパーツが生じる可能性があるバグを修正しました:
Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin). - ZooKeeper との接続が失われた場合、
ReplicatedMergeTreeテーブルは再接続を試みる前にバックグラウンド処理の完了を待つことがありました。この問題は修正され、現在はバックグラウンド処理が強制的に停止されます。#25306 (tavplubix). - 配列が主キーに使用されている場合に、
ARRAY JOINを含むクエリで発生するエラーKey expression contains comparison between inconvertible typesを修正しました。#8247 を修正します。#25546 (Anton Popov). - クエリ
WITH TOTALSおよびWITH FILLで totals が誤っていた問題を修正しました。#20872 を修正しました。#25539 (Anton Popov). - クラスター設定の再読み込みと同時に
system.clustersにクエリした際に発生するデータレースを修正しました。#25737 (Amos Bird) 。 - データベース間で
Distributedテーブルを移動する際のNo such file or directoryエラーを修正しました。#24971 を修正。#25667 (tavplubix) 。 REPLACE PARTITIONは、まれにソースパーティションが空の場合に無視されることがありましたが、この問題は修正されました。#24869。#25665 (tavplubix).- まれに一部のレプリカでエンキューされたDDLクエリがスキップされることがある、
Replicatedデータベースエンジンのバグを修正しました。 #24805 (tavplubix). - クエリを伴わない
EXPLAIN ASTでのヌルポインタ逆参照を修正しました。#25631 (Nikolai Kochetov) 。 - 空のパーツの自動削除を待機する処理を修正しました。これにより、background pool が完全に埋まり、レプリケーションが停止する可能性がありました。#23315 (Anton Popov).
- S3仮想ファイルシステムに保存されたテーブルの復元を修正しました (これは本番環境には未対応の実験的機能です) 。#25601 (ianton-ru) 。
Decimal256使用時のArrowフォーマットにおける nullptr の逆参照を修正。ArrowフォーマットでDecimal256をサポート。#25531 (Kruglov Pavel).- 前処理済みの設定ファイル名の前に余分なアンダースコアが付く問題を修正しました。 #25431 (Vitaly Baranov) 。
clickhouse-copierツールの修正: copier のタスク設定にsharding_keyがない場合に発生するセグメンテーションフォルトを修正しました。#25419 (Nikita Mikhaylov).- DDL で使用した際の
REPLACEカラム変換子について、フォーマット済みのクエリを正しくクォートするよう修正しました。これにより #23925 が修正されます。#25391 (Amos Bird). quantileDeterministic関数および同様の関数で、非決定論的な挙動が生じる可能性を修正しました。これにより #20480 がクローズされます。#25313 (alexey-milovidov).SummingMergeTreeでSimpleAggregateFunction(LowCardinality)をサポートしました。#25134 を修正しています。#25300 (Nikolai Kochetov).- 例外メッセージ “Cannot sum Array/Tuple in min/maxMap” に関するロジックエラーを修正しました。#25298 (Kruglov Pavel) 。
LowCardinality引数を IN で使用したクエリで発生するエラーBad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t>を修正しました (このバグは 21.6 で発生しました) 。#25187 を修正。#25290 (Nikolai Kochetov)。- Nullable でないカラムでの
joinGetOrNullの誤った動作を修正しました。これにより #24261 も修正されます。#25288 (Amos Bird). - 大きな整数における誤った動作と UBSan の報告を修正しました。以前のバージョンでは、
CAST(1e19 AS UInt128)はゼロを返していました。#25279 (alexey-milovidov). - CSVWithNames フォーマットを使用してカラムの一部を挿入する際に発生していたエラーを修正しました。#25129 の修正です。#25169 (Nikita Mikhaylov).
- テーブルのプロジェクションを
FINAL付きのSELECTで使用しないでください。現時点ではサポートされていません。#25163 (Amos Bird). - 21.5 までに更新した後、テーブルのパーティションキーに
UUIDを使用している場合に発生する可能性があるパーツの損失を修正しました。 (パーティションキーにUUIDを使用することは推奨されません。) #25070 を修正しました。 #25127 (Nikolai Kochetov). - cross join と
joined_subquery_requires_alias = 0を含むクエリで発生するクラッシュを修正しました。#24011 を修正。#25082 (Nikolai Kochetov). mapContains関数で定数 map を扱う際のバグを修正し、empty column was returned by function mapContainsエラーが発生する問題を解消しました。#25077 をクローズしました。#25080 (Kruglov Pavel).a UInt32 ALIAS a + 1やb UInt32 MATERIALIZED bのように、自身を参照するカラムを含むテーブルを作成できてしまう問題を修正しました。#24910、#24292。#25059 (alesapin)。- 空でない
GROUP BYキーを持つ集約プロジェクションを使用して、空の キーによるGROUP BYを含むクエリを実行した際に誤った結果が返る問題を修正しました。 #25055 (Amos Bird). - Protobufフォーマットで分割されたネストメッセージのシリアライゼーションを修正しました。このPRでは #24647 を修正しました。 #25000 (Vitaly Baranov).
- 分散クエリの LIMIT/OFFSET 設定を修正 (リモートノードでは無視) 。#24940 (Azat Khuzhin) 。
Arrowフォーマットで発生する可能性がある heap-buffer-overflow を修正しました。#24922 (Kruglov Pavel) 。- DiskS3 からファイルを読み取る際に発生する可能性のあったエラー ‘Cannot read from istream at offset 0’ を修正しました (S3 仮想ファイルシステムは開発中の実験的な機能であり、本番環境では使用しないでください) 。#24885 (Pavel Kovalenko) 。
- Distributed materialized view の JOIN 時に発生する “Missing columns” 例外を修正しました。 #24870 (Azat Khuzhin).
- postgresql互換プロトコルで
NULL値を許可するようにしました。#22622 をクローズ。#24857 (Kseniia Sumarokova). - mutation がまだメモリに読み込まれていない場合に、mutation の待機中に例外
Mutation was killedがクライアントに送出されることがある不具合を修正しました。 #24809 (alesapin) 。 - 乱数生成器の状態のデシリアライズ処理の不具合を修正しました。この不具合により、一部のデータ型 (
AggregateFunction(groupArraySample(N), T))など) が非決定論的に振る舞うことがありました。#24538 (tavplubix). - 他の集約状態から uniqXXXXStates を構築することを禁止しました。#24523 (Raúl Marín) 。その後、関連する問題の根本原因を実際に取り除くことで、再び許可しました。(alexey-milovidov).
CREATE .. AS SELECTクエリでのタプルの使用に関する不具合を修正しました。#24464 (Anton Popov) 。Bufferテーブルの合計バイト数の計算を修正しました。現在の ClickHouse バージョンでは、バッファの flush 中に total_writes.bytes カウンターが大きく減少しすぎていました。その結果、カウンターのオーバーフローが発生し、flush のしばらく後に totalBytes が 17.44 EB 前後の値を返すことがありました。#24450 (DimasKovas).- toWeek 関数の単調性に関する誤った情報を修正しました。これにより #24422 を修正しています。このバグは https://github.com/ClickHouse/ClickHouse/pull/5212 で導入され、その後、より高度なパーティションプルーナーによって明らかになりました。#24446 (Amos Bird).
- ユーザー認証をLDAPで管理している場合に、LDAPグループが存在しないローカルロールにマッピングされていると、LDAPロールの (再) マッピング中に発生する可能性があるデッドロックを修正しました。#24431 (Denis Glazachev).
- “multipart/form-data” メッセージでは、boundary の直前の CRLF をその一部として扱うようにしました。#23905 を修正しました。#24399 (Ivan)。
- 積集合の偽パーツがある場合のパーティションの削除の不具合を修正しました。まれに、現在のブロック番号を上回る mutation バージョンを持つパーツが存在することがありました。#24321 (Amos Bird) 。
- Ordinary データベースから Atomic データベースへ materialized view を移動する際のバグ (
RENAME TABLEクエリ) を修正しました。これにより、内部テーブルも materialized view とともに新しいデータベースへ移動されるようになりました。#23926 を修正しました。#24309 (tavplubix) 。 - 空のHTTPヘッダーを許可しました。#23901 を修正しました。#24285 (Ivan).
- Memoryテーブルにおけるmutation (ALTER UPDATE/DELETE) が正しく処理されるようになりました。#24274 をクローズしました。#24275 (flynn).
- JOIN 出力のカラムの
LowCardinalityプロパティが、入力と同じになるようにしました。#23351、#20315 をクローズしました。#24061 (Vladimir). - Kafkaテーブルの修正。Engine = Kafka のフェイルオーバー動作において、同じコンシューマーに以前空の割り当てがあった場合、消費を開始できなかった不具合を修正しました。#21118 をクローズしました。#21267 (filimonov).
ビルド/テスト/パッケージングの改善
- CI に
darwin-aarch64(Mac M1 / Apple Silicon) ビルドを追加し #25560 (Ivan) 、ドキュメントと Web サイトへのリンクを追加しました (alexey-milovidov) 。 - バイナリーリソースを実行ファイルにクロスプラットフォームで埋め込めるようにしました。Illumos でも動作します。#25146 (bnaecker) 。
- ファジングを改善するため、ストレステストに JOIN 関連のオプションを追加しました。#25200 (Vladimir) 。
- OS X で S3 モジュールを有効にしてビルドできるようにしました #25217。#25218 (kevin wan) 。
- JDBC bridge をカバーする結合テストのケースを追加しました。#25047 (Zhichun Wu) 。
- 結合テストの設定で辞書に特別な扱いをしていた部分を見直し、残っていた辞書の手動セットアップを削除しました。#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'と入力してください。
新機能
- Postgresライクなキャスト演算子 (
::) を追加しました。例:[1, 2]::Array(UInt8),0.1::Decimal(4, 4),number::UInt16。 #23871 (Anton Popov). - 大きな整数を本番環境で利用できる状態にしました。
UInt128データ型のサポートを追加しました。Decimal256データ型の既知の問題を修正しました。辞書で大きな整数をサポートしました。大きな整数に対するgcd/lcm関数をサポートしました。配列検索および条件関数で大きな整数をサポートしました。LowCardinality(UUID)をサポートしました。generateRandomテーブル関数およびclickhouse-obfuscatorで大きな整数をサポートしました。スカラ―サブクエリからUUIDを返す際のエラーを修正しました。これにより #7834 を修正しました。これにより #23936 を修正しました。これにより #4176 を修正しました。これにより #24018 を修正しました。後方互換性を持たない変更:UUID型の値は整数と比較できなくなりました。たとえば、uuid != 0と書く代わりに、uuid != '00000000-0000-0000-0000-000000000000'と記述してください。#23631 (alexey-milovidov). Arrow、Parquet、ORCフォーマットでのデータの挿入および選択で、Arrayデータ型をサポートしました。#21770 (taylor12805).- テーブルコメントを実装。#23225 をクローズ。#23548 (flynn) 。
clickhouse-localで、DDLクエリによるDictionaryの作成をサポートしました。#22354 をクローズしました。DETACH DICTIONARY PERMANENTLYのサポートを追加しました。AtomicデータベースエンジンでEXCHANGE DICTIONARIESをサポートしました。RENAME DICTIONARYを使用して、データベース間でDictionaryを移動できるようにしました。#23436 (Maksim Kita).- ClickHouse で Theta Sketch をサポートするため、集約関数
uniqThetaが追加されました。#23894。#22609 (Ping Yu) 。 - 関数
splitByRegexpを追加しました。#24077 (abel-cheng) 。 - 配列をパラメータとして受け取り、配列内のすべての要素の積を返す関数
arrayProductを追加しました。#21613 をクローズします。#23782 (Maksim Kita) 。 system.stack_traceにthread_nameカラムを追加しました。これにより #23256 をクローズします。#24124 (abel-cheng)。insert_null_as_default= 1 の場合、INSERT ... SELECTおよびINSERT ... SELECT ... UNION ALL ...クエリで、NULL の代わりにデフォルト値を挿入します。#22832 を解決しました。#23524 (Kseniia Sumarokova).clickhouse-localで--progressオプションによる進捗表示のサポートが追加されました。#23196 (Egor Savin) 。httpDictionary ソースで、HTTP 圧縮 (Content-EncodingHTTP ヘッダーで判定) のサポートを追加しました。これにより、#8912 が修正されます。#23946 (FArthur-cmd).SYSTEM QUERY RELOAD MODEL、SYSTEM QUERY RELOAD MODELSを追加しました。#18722 を解決します。#23182 (Maksim Kita) 。EXPLAIN PLANクエリに設定json(boolean、デフォルトは 0) を追加しました。有効にすると、クエリの出力はJSON1 行のみになります。不要なエスケープを避けるため、TSVRawフォーマットの使用を推奨します。#23082 (Nikolai Kochetov).EXPLAIN PIPELINEクエリに設定indexes(ブール値、デフォルトでは無効) を追加しました。有効にすると、使用された索引と、適用された各索引についてフィルタリングされたパーツ数およびグラニュール数が表示されます。MergeTree*テーブルでサポートされています。#22352 (Nikolai Kochetov).- LDAP: Active Directory グループを ClickHouse のロールにマッピングする際に使用するユーザー DN の検出機能を実装しました。#22228 (Denis Glazachev).
- 連続する行の差分を合計し、タイムスタンプを保存することでマージ時の順序を維持する新しい集約関数
deltaSumTimestamp。 #21888 (Russ Frank). - 安全性は低いものの、Docker 環境で正しく動作する S3 用の IMDS 認証情報プロバイダーを追加しました。#21852 (Vladimir Chebotarev) 。
indexHint関数を復活させました。これは #21238 に対応するものです。これにより #9542 が差し戻されます。これで #9540 が修正されます。#21304 (Amos Bird)。
実験的機能
パフォーマンス改善
- デフォルトで
compile_expressions設定を有効にしました。この設定を有効にすると、単純な関数や演算子の組み合わせが実行時に LLVM によってネイティブコードへコンパイルされます。#8482 (Maksim Kita, alexey-milovidov). 注: 問題が発生した場合は、このオプションを無効にしてください。 re2ライブラリを更新しました。正規表現マッチングのパフォーマンスが向上しました。また、この PR で gcc-11 との互換性も追加されました。#24196 (Raúl Marín).- ORC 入力フォーマットで、ファイルサイズが非常に大きい場合にメモリ消費の大きいテーブル全体の一括読み込みではなく、ストライプ単位で読み込むようになりました。#23102 (Chao Ma).
- クエリ内の集約関数
sum、count、avgを単一の集約関数に融合するようにしました。この最適化はoptimize_fuse_sum_count_avg設定で制御されます。これは新しい集約関数sumCountによって実装されています。この関数はsumとcountという 2 つのフィールドを持つタプルを返します。#21337 (hexiaoting). zstdを v1.5.0 に更新しました。圧縮のパフォーマンスが数パーセント向上しました。#24135 (Raúl Marín). 注: レプリケーションで “checksum does not match” というメッセージが表示されることがあります。これは圧縮アルゴリズムの更新による想定内のメッセージであり、無視して問題ありません。Bufferテーブルのパフォーマンスを改善しました:Bufferエンジンで total_bytes/total_rows に対するロックを取得しないようにしました。#24066 (Azat Khuzhin).- hashed/sparse_hashed 辞書の事前割り当てサポートが復活しました。#23979 (Azat Khuzhin).
- デフォルトで
async_socket_for_remoteを有効にしました (ファンアウトが大きい分散テーブルへのクエリで使用されるスレッド数を削減します) 。#23683 (Nikolai Kochetov).
改善
- MergeTreeテーブルファミリーに仮想カラム
_partition_valueを追加しました。これは、パーティションを決定論的に絞り込むために使用できます。これは、ミューテーション用のパーティションマッチャーを実装するために必要です。#23673 (Amos Bird). - S3ストレージとディスクに
regionパラメーターが追加されました。#23846 (Vladimir Chebotarev). - 異なるロギングチャンネルごとに、異なるログレベルを設定できるようになりました。#19569 を解決。#23857 (filimonov).
DateTime演算で timezone が明示的に指定されていない場合、デフォルトの timezone を保持するようにしました。たとえば、timezone なしのDateTime型の値に 1 秒を加えても、timezone なしのDateTimeのままです。以前のバージョンでは、デフォルトの timezone の値が返り値のデータ型に明示的に設定されるため、DateTime(‘something’) になっていました。これにより #4854 を修正しました。#23392 (alexey-milovidov).MySQLストレージで、データベース名の代わりに空文字列を指定できるようになりました。クエリにはデフォルトのデータベースが使用されます。以前のバージョンでは SELECT クエリではこれが機能しており、今回 INSERT のサポートも追加されました。これにより #19281 がクローズされます。これはSphinxやその他の MySQL 互換外部データベースを扱う場合に便利です。#23319 (alexey-milovidov).quantile(s)TDigestを修正しました。tdunning/t-digest 3.2+ に基づき、シングルトンのセントロイドに対する特別な処理を追加しました。あわせて、以前のバージョンのアルゴリズム実装にあった、セントロイドが過度に圧縮される不具合も修正しました。#23314 (Vladimir Chebotarev) 。- 関数
now64が、オプションのタイムゾーン引数をサポートするようになりました。#24091 (Vasily Nemkov) 。 - clickhouse-client の対話型モードで、データの途中に表示される進行状況バーが、ターミナル上に表示されているデータの一部を上書きしてしまうことがある問題を修正しました。これにより #19283 をクローズします。 #23050 (alexey-milovidov).
- simdjson でメモリ割り当てが失敗した際にクラッシュする問題を修正しました。 https://github.com/simdjson/simdjson/pull/1567 。ごくまれにしか発生しないバグのため、改善として分類しました。 #24147 (Amos Bird).
- ストレージのシャットダウン時まで Dictionary を保持します (これにより、サーバーのシャットダウン時に
Bufferエンジンの最終フラッシュ中に発生する可能性があるexternal dictionary 'DICT' not foundエラーを回避できます) 。#24068 (Azat Khuzhin) 。 - (同一データベース内の) テーブルをシャットダウンする前に
Bufferテーブルをフラッシュするようにし、基になるテーブルがすでにデタッチされているために blocks が破棄されること (およびログにDestination table default.a_data_01870 doesn't exist. Block of data is discardedという error が記録されること) を防ぐようにしました。 #24067 (Azat Khuzhin). - これにより、
prefer_column_name_to_alias = 1では、group by、having、order byにおいてもカラム名が優先されるようになります。これで #23882 が修正されます。#24022 (Amos Bird). DateTime64でORDER BY WITH FILLをサポートしました。#24016 (kevin wan) 。ReplacingMergeTreeでDateTime64をバージョンカラムとして使えるようになりました。#23992 (kevin wan) 。- サーバー起動時に、OS 名、カーネルバージョン、CPU アーキテクチャの情報をログに記録するようにしました。#23988 (Azat Khuzhin).
postgresqlDictionary ソースでテーブルスキーマを指定できるようになりました。#23958 をクローズします。#23980 (Kseniia Sumarokova).Enum要素名のヒントを追加 (タイプミスがある場合に候補名を提示) 。 #17112 をクローズ。 #23919 (flynn).- 辞書について、検出率 (値が見つかった割合) を測定するようになりました (
system.dictionariesのfound_rateを参照) 。 #23916 (Azat Khuzhin). - テーブル設定
rabbitmq_queue_settings_listを使用して、特定のキュー設定を追加できるようにしました。 (#23737 および #23918 をクローズ) 。RabbitMQ のセットアップ全体をユーザーが制御できるようにしました。テーブル設定rabbitmq_queue_consumeが1に設定されている場合、RabbitMQ テーブルエンジンは指定されたキューにのみ接続し、exchange、キュー、バインディングの宣言など、RabbitMQ コンシューマー側のセットアップを一切行いません。 (#21757 をクローズ) 。RabbitMQ テーブルが削除された際に適切にクリーンアップするようにしました。テーブルによって作成された場合は、そのテーブルが宣言したキューと、それにバインドされたすべての exchange を削除します。#23887 (Kseniia Sumarokova) 。 system.distribution_queueにbroken_data_files/broken_data_compressed_bytesを追加しました。破損としてマークされた、分散テーブルへの非同期挿入用ファイル数のメトリック (BrokenDistributedFilesToInsert) を追加しました。#23885 (Azat Khuzhin) 。system.tablesへのクエリで、ZooKeeper にアクセスすることはなくなりました。#23793 (Fuwang Hu) 。OPTIMIZEクエリでlock_acquire_timeout_for_background_operationsが適用されるようにしました。#23623 (Azat Khuzhin) 。- 新しい
SYSTEM RESTART DISKSQL コマンドにより、実行時にS3ディスクの設定を変更できるようになりました。#23429 (Pavel Kovalenko). - ユーザーが誤って
max_distributed_connectionsを 0 に設定してしまうと、Distributedテーブルに対するすべてのクエリで、“logical error” を含むメッセージの例外がスローされます。しかし、これは実際には想定内の動作であり、logical error ではないため、例外メッセージはやや不正確でした。また、logical error が決して発生しないことを保証する CI 環境内のチェックもトリガーしていました。今後は、max_distributed_connectionsが 0 に誤設定されている場合、それを取り得る最小値 (1) として扱います。#23348 (Azat Khuzhin). - デフォルトで
min_bytes_to_use_mmap_ioを無効にしました。#23322 (Azat Khuzhin). join_use_nullsでLowCardinalityの NULL 許容をサポートし、#15101 をクローズしました。#23237 (vdimir) 。S3ディスクで、MergeTreeのパーツをdetachedディレクトリに復元できるようになりました。#23112 (Pavel Kovalenko) 。- S3 で HTTP 接続が切断された際の再試行。 #22988 (Vladimir Chebotarev).
- MySQL table engine、Dictionary ソース、および MaterializeMySQL の小規模なデータフェッチ向けに、設定
external_storage_max_read_rowsとexternal_storage_max_read_rowsを追加しました。#22697 (TCeason). MaterializeMySQL(実験的機能) : これまで、SQL の非互換性により MySQL 5.7.9 はサポートされていませんでした。現在は、MySQL パラメータの検証は MaterializeMySQL 側で行うようになりました。#23413 (TCeason).- 分散テーブルでサブカラムを読み取れるようにしました。#24472 (Anton Popov) 。
CREATE .. AS SELECTクエリでのタプルの扱いを修正しました。#24464 (Anton Popov) 。KafkaテーブルでParquetフォーマットをサポート。 #23412 (Chao Ma).
バグ修正
- パーティションキーおよび主キーで使用する場合は、古い modulo 関数のバージョンを使用します。#23508 をクローズ。#24157 (Kseniia Sumarokova)。以前のリリースでは、これが後方互換性の欠如の原因となっていました。
- クエリ
SYSTEM RESTART REPLICAまたはSYSTEM SYNC REPLICAが無限に処理され続ける不具合を修正しました。この問題は、RAM が極端に少ないサーバーで検出されました。#24457 (Nikita Mikhaylov). toWeek関数の単調性の誤りを修正しました。これにより #24422 が修正されます。このバグは #5212 で導入され、その後、より賢いパーティションプルーナーによって顕在化しました。#24446 (Amos Bird)。- 積集合の疑似パーツに関するパーティションの削除の不具合を修正しました。まれに、現在のブロック番号を超える mutation バージョンを持つパーツが存在することがありました。#24321 (Amos Bird).
- Ordinary データベースから Atomic データベースへ materialized view を移動する際のバグ (
RENAME TABLEクエリ) を修正しました。これにより、内部 table も materialized view とともに新しいデータベースへ移動されるようになりました。#23926 を修正します。#24309 (tavplubix). - クライアントリクエストで空の HTTP ヘッダーを許可するようにしました。#23901 を修正しました。#24285 (Ivan).
Memoryテーブルの mutation の失敗を修正するため、max_threads = 1を設定しました。#24274 をクローズしました。#24275 (flynn).Memoryテーブルの実装にあるタイプミスを修正しました。このバグは #15127 で入り込んだものです。#24192 をクローズします。#24193 (张中南) 。- クエリ実行中に
HDFSにアクセスできなくなった場合にサーバーが異常終了する問題を修正しました。#24117 をクローズします。#24191 (Kseniia Sumarokova). - 定数条件で
Nestedカラムを更新した際に発生するクラッシュを修正しました。 #24183 (hexiaoting). - 高負荷時にRBACで発生し得る競合状態を修正しました。このPRでは #24090、#24134、. #24176 を修正しています (Vitaly Baranov) 。
- 書き込みリクエスト (insert/alter など) を処理できてしまう、部分的にしか初期化されていないテーブルが発生する可能性のあるまれなバグを修正しました。今後、このようなテーブルはreadonlyモードになります。 #24122 (alesapin).
- 不具合を修正しました:
EXPLAIN PIPELINEでSELECT xxx FINALを実行した際に、誤ったパイプラインが表示されていました。(hexiaoting). WHERE句で constDateTime値とDateTime64カラムを使用した際の問題を修正しました。#24100 (Vasily Nemkov) 。- merge JOIN で発生するクラッシュを修正し、#24010 をクローズしました。#24013 (vdimir).
- 一部の
ALTER PARTITIONクエリで、レプリケーションキューにPart A intersects previous part BおよびUnexpected merged part C intersecting drop range Dエラーが発生することがありました。この問題を修正しました。#23296。#23997 (tavplubix). - 外部 GROUP BY およびオーバーフロー行 (つまり、
SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having'のようなクエリ) で発生する SIGSEGV を修正しました。#23962 (Azat Khuzhin). - ソースに重複がある
CACHEDictionary におけるキー関連メトリクスの計上を修正しました (DictCacheKeysRequestedMissのオーバーフローの原因となる問題) 。 #23929 (Azat Khuzhin). PostgreSQLengine の接続プール実装を修正しました。#23897 をクローズしました。#23909 (Kseniia Sumarokova).GROUP BYと、通常の関数でラップされた aggregate function を含む場合のdistributed_group_by_no_merge = 2の問題を修正しました (#23546 で壊れていました) 。distributed_group_by_no_merge = 2を window functions とともに使おうとした場合は、例外を投げるようにしました。window functions を含む queries ではoptimize_distributed_group_by_sharding_keyを無効にしました。#23906 (Azat Khuzhin)。s3テーブル関数の修正: HTTP エラーの処理を改善しました。以前は HTTP エラーのレスポンス本文が無視されていました。#23844 (Vladimir Chebotarev).s3テーブル関数の修正: URI の処理を改善しました。+記号を含む URL との非互換性を修正し、このようなキーを持つデータを以前は読み取れなかった問題を解消しました。#23822 (Vladimir Chebotarev).GLOBAL IN/JOINとuse_hedged_requestsを使用するクエリで発生するエラーCan't initialize pipeline with empty pipeを修正しました。#23431。#23805 (Nikolai Kochetov).- materialized view で参照されている場合に
CLEAR COLUMNが機能しない問題を修正しました。#23764 をクローズしました。 #23781 (flynn). Valuesフォーマット使用時に HDFS から読み込む際、解放済みのヒープメモリを使用してしまう問題を修正しました。 #23761 (Kseniia Sumarokova).- Distributed への INSERT 時に発生しうる “Cannot schedule a task” error (何らかの例外が発生していた場合) を回避。 #23744 (Azat Khuzhin).
- 古い状態になった
ReplicatedMergeTreeレプリカの復旧に関する不具合を修正しました。レプリカの停止中にALTERクエリが実行されると、一部のメタデータ更新がそのレプリカで無視されることがありました。#23742 (tavplubix). JoinとWITH TOTALSに関する不具合を修正し、#17718 をクローズしました。#23549 (vdimir).- フィルタのプッシュダウン最適化後に発生する可能性があった、
UNIONを含むクエリでのBlock structure mismatchエラーを修正しました。#23029 を修正しました。#23359 (Nikolai Kochetov) 。 optimize_skip_unused_shards_rewrite_in設定が有効な場合に、型変換を追加しました。これにより、MSan の報告が修正されます。 #23219 (Azat Khuzhin).- ネストされたサブカラムの更新時に不足していたチェックを追加し、issue #22353 をクローズしました。#22503 (hexiaoting)。
ビルド/テスト/パッケージングの改善
- Illumos でのビルドをサポートしました。#24144。Solaris 系オペレーティングシステムでのビルド対応を追加しました。#23746 (bnaecker)。
- Google の Swiss Table を含む、ハッシュテーブル向けのベンチマークをさらに追加しました (この特定のユースケースでは ClickHouse の hash map より遅いようでした) 。#24111 (Maksim Kita)。
- librdkafka を 1.6.0-RC3 から 1.6.1 に更新しました。#23874 (filimonov)。
asynchronous-unwind-tablesを常に明示的に有効化するようにしました。これにより、AArch64 でクエリプロファイラが修正される可能性があります。#23602 (alexey-milovidov)。- ロケールおよびファイルシステムの順序にビルドが依存する可能性を排除しました。これにより、再現可能なビルドが可能になります。#23600 (alexey-milovidov)。
- ビルドにおける非決定性の原因の 1 つを取り除きました。これにより、異なる時点でのビルドでもバイト単位で同一のバイナリが生成されます。#22113 に部分的に対応しています。#23559 (alexey-milovidov)。
- (Zoo)Keeper のベンチマーク用のシンプルなツールを追加しました。#23038 (alesapin)。
ClickHouse リリース 21.5、2021-05-20
後方互換性を持たない変更
- 整数が浮動小数点データ型で正確に表現できない場合の、整数と浮動小数点数の比較方法を変更しました。新しいバージョンでは丸め誤差が発生するため、比較結果は false になります。例:
9223372036854775808.0 != 9223372036854775808。これは、9223372036854775808という値を浮動小数点数で正確に表現できないためです (その結果、9223372036854775808.0は9223372036854776000.0に丸められます) 。一方、以前のバージョンではこれらは等しいと判定されていました。これは、浮動小数点数9223372036854776000.0を UInt64 に変換し直すと9223372036854775808になるためです。参考までに、Python でもこれらの数値は等しいものとして扱われます。ただし、この挙動は CPU モデルに依存していました (範囲外の一部の数値では AMD64 と AArch64 で結果が異なります) 。そのため、比較をより正確にしました。今後は、整数が浮動小数点型で正確に表現できる場合にのみ、整数と浮動小数点数を等しいものとして扱います。#22595 (alexey-milovidov). - 単一の
Tuple引数に対するargMinとargMaxのサポートを削除しました。このコードはメモリセーフではありませんでした。この機能は誤って追加されたもので、利用者に混乱を招いていました。これらの関数は、今後別の名前で再導入される可能性があります。これにより #22384 を修正し、#17359 を取り消します。#23393 (alexey-milovidov).
新機能
- 関数
dictGetChildren(dictionary, key)、dictGetDescendants(dictionary, key, level)を追加しました。dictGetChildrenは、子のインデックスをすべて Array として返します。これはdictGetHierarchyの逆変換です。dictGetDescendantsは、dictGetChildrenをlevel回再帰的に適用した場合と同様に、すべての子孫を返します。levelの値が 0 の場合は無限大と同等です。dictGetHierarchy、dictIsIn関数の性能も改善しました。Closes #14656. #22096 (Maksim Kita). - 関数
dictGetOrNullを追加しました。これはdictGetと同様に動作しますが、Dictionary 内にキーが見つからない場合はNullを返します。Closes #22375. #22413 (Maksim Kita). - table function
s3Clusterを追加しました。これにより、指定したクラスターの各ノードでs3上のファイルを並列に処理できます。#22012 (Nikita Mikhaylov). - MySQL/PostgreSQL テーブルエンジン / table function で、レプリカと分片をサポートしました。
SELECT * FROM mysql('host{1,2}-{1|2}', ...)のように記述できます。Closes #20969. #22217 (Kseniia Sumarokova). ALTER TABLE ... FETCH PART ...クエリを追加しました。これはFETCH PARTITIONに似ていますが、1 つの part だけを fetch します。#22706 (turbo jason).Distributedtable に対する再帰クエリの深さを制限する設定max_distributed_depthを追加しました。Closes #20229. #21942 (flynn).
パフォーマンス改善
- AVX2 向けの動的ディスパッチにより、
intDivのパフォーマンスを改善しました。これにより #22314 をクローズしました。#23000 (alexey-milovidov)。 - ローカルファイル以外のソース (例: URL) に対する
ArrowStream入力フォーマットの読み取りパフォーマンスを改善しました。#22673 (nvartolomei)。 - localhost とやり取りする場合 (
clickhouse-client使用時、またはサーバー間で分散クエリを実行する場合) に、ネイティブプロトコル経由の圧縮をデフォルトで無効化しました。これにより、一部のインポート/エクスポート処理のパフォーマンスが向上する場合があります。これにより #22234 をクローズしました。#22237 (alexey-milovidov)。 - 分散クエリでは、IN 句の右辺からその分片に属さない値を除外するようにしました (
optimize_skip_unused_shards_rewrite_inで有効。デフォルトで有効ですが、引き続きoptimize_skip_unused_shardsが必要です) 。#21511 (Azat Khuzhin)。 - File 系のテーブルエンジンと、Parquet、Arrow、ORC などの列指向フォーマットで、カラムの一部を読み取る際のパフォーマンスを改善しました。これにより #issue:20129 をクローズしました。#21302 (keenwolf)。
- バージョン 21.1 より前と同様に、より多くの条件を
PREWHEREに移動できるようにしました (内部ヒューリスティクスの調整) 。移動される条件の数が不十分だと、パフォーマンスが低下する可能性がありました。#23397 (Anton Popov)。 - ODBC 接続のパフォーマンスを改善し、バックログに残っていた未解決の問題をすべて修正しました。
Poco::ODBCの代わりにnanodbcライブラリを使用するようにしました。#9678 をクローズしました。ODBC テーブルエンジンで DateTime64 と Decimal* をサポートしました。#21961 をクローズしました。キリル文字のテキストが切り詰められる問題を修正しました。#16246 をクローズしました。ODBC bridge に接続プールを追加しました。#21972 (Kseniia Sumarokova)。
改善
- デフォルトで
max_uri_size(HTTPインターフェイスにおけるURLの最大長) を 1 MiB に引き上げました。これにより #21197 がクローズされました。#22997 (alexey-milovidov) 。 background_fetches_pool_sizeを8に設定しました。これは、頻繁に小規模な insert が発生する場合や ZooKeeper クラスターが低速な場合の本番環境により適しています。#22945 (alexey-milovidov) 。- FlatDictionary に
initial_array_size、max_array_sizeオプションが追加されました。#22521 (Maksim Kita) 。 - 非レプリケート MergeTree の挿入時の重複排除向けに、新しい設定
non_replicated_deduplication_windowを追加しました。 #22514 (alesapin). - 設定の再読み込み時に、
CatBoostモデル設定のパスを更新しました。#22434 (Kruglov Pavel). - Dictionaries で
Decimal256型のサポートを追加しました。Decimal256は実験的な機能です。#20979 をクローズしました。#22960 (Maksim Kita). async_socket_for_remoteをデフォルトで有効化しました (分散クエリで使用する OS スレッド数を削減) 。 #23683 (Nikolai Kochetov).quantile(s)TDigestを修正しました。tdunning/t-digest 3.2+ に従い、singleton セントロイドに対する特別な処理を追加しました。また、以前のバージョンのアルゴリズム実装におけるセントロイドの過剰圧縮の不具合も修正しました。#23314 (Vladimir Chebotarev).- MySQL との互換性のため、関数名
unhexが大文字・小文字を区別しないようにしました。#23229 (alexey-milovidov). - 配列要素の型が異なる一般的なケースで、関数
arrayHasAny、arrayHasAll、has、indexOf、countEqualを実装しました。以前のバージョンでは、arrayHasAnyとarrayHasAllは false を返し、has、indexOf、countEqualは例外をスローしていました。また、hasおよび類似の関数でDecimalと大きな整数型もサポートするようになりました。これにより #20272 がクローズされます。#23044 (alexey-milovidov). - 関数
extractAllGroupsHorizontalの結果に含まれる一致数の上限しきい値を引き上げました。#23036 (Vasily Nemkov) 。 - ノードが1つしかないクラスターでは、
optimize_skip_unused_shardsを実行しないようにしました。 #22999 (Azat Khuzhin). - SSL を使用して clickhouse-keeper (ZooKeeper の実験的なドロップイン置換) を実行できるようになりました。設定
keeper_server.tcp_port_secureを使用すると、クライアントと keeper-server 間で安全に通信できます。keeper_server.raft_configuration.secureを使用すると、ノード間の内部的なセキュア通信を有効にできます。#22992 (alesapin). Bufferテーブルで、buffer の flush をバックグラウンドでのみ実行できるようにしました。#22986 (Azat Khuzhin) 。- WHERE 条件に NULL を含む MergeTree テーブルに対して SELECT を実行すると、まれに例外が発生していました。これにより #20019 がクローズされます。#22978 (alexey-milovidov).
- AWS向けのPoco HTTP Clientのエラー処理を修正しました。 #22973 (kreuzerkrieg).
ReplicatedMergeTreeでmax_part_removal_threadsが適用されるようになりました。 #22971 (Azat Khuzhin).- inactive_parts_to_throw_insert = 0 かつ inactive_parts_to_delay_insert > 0 の場合に発生する、MergeTree設定のわかりにくいコーナーケースを修正しました。#22947 (Azat Khuzhin) 。
dateDiffがDateTime64引数でも動作するようになりました (DateTimeの範囲外の値でも可) #22931 (Vasily Nemkov)。- MaterializeMySQL (実験的機能) : ビューを含む MySQL データベースをレプリケートしても失敗しないようになりました。これは、ビューを無視することで実現しています。 #22760 (Christian).
- PostgreSQLプロトコル経由でRBACの行ポリシーを利用できるようにしました。#22658 をクローズします。PostgreSQLプロトコルは設定でデフォルトで有効になっています。#22755 (Kseniia Sumarokova) 。
- Buffer レイヤーのロック待機に費やされる時間を追跡するメトリックを追加しました。 #22725 (Azat Khuzhin).
- VIEW 定義で CTE を使用できるようになりました。これにより #22491 がクローズされます。#22657 (Amos Bird).
- 以前のプログラムが端末に表示の乱れを残していた場合、
clickhouse-clientで画面の残りを消去し、カーソルを表示するようにしました。これにより #16518 がクローズされました。#22634 (alexey-milovidov). - 非x86_64プラットフォームでも
round関数が一貫して動作するようにしました。丸めには最近接偶数への丸め (Banker’s rounding) を使用します。#22582 (alexey-milovidov). - 分散テーブルによって送信されるデータブロックの構造を正しく検証するようにしました。 #22325 (Azat Khuzhin).
kafka_handle_error_mode設定で制御される Kafka engine の仮想カラムに、Kafka エラーを出力できるようにしました。#21850 (fastio).visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}に、別名simpleJSONExtract/simpleJSONHasを追加しました。#21383 を修正しました。#21519 (fastio).- ライブラリ Dictionary ソース向けに
clickhouse-library-bridgeを追加しました。#9502 をクローズしました。#21509 (Kseniia Sumarokova). - materialized view で参照されているカラムは削除できないようにしました。 #21164 をクローズしました。 #21303 (flynn).
- 動的なサーバー間認証情報に対応 (ダウンタイムなしで認証情報をローテーション可能) 。 #14113 (johnskopis).
- Kafka ストレージで
ArrowおよびArrowStreamフォーマットのメッセージをサポートしました。#23415 (Chao Ma). - 例外メッセージで欠けていたセミコロンを修正しました。ユーザーによっては、この例外メッセージを読みづらいと感じる可能性があります。 #23208 (alexey-milovidov).
LowCardinality型に関する一部の例外メッセージで、欠落していた空白を修正しました。#23207 (alexey-milovidov).- これまで、
Markdownフォーマットでは、表のセル内の一部の値が中央揃えで整形されていましたが、現在はされなくなりました。 #23096 (alexey-milovidov). - clickhouse-client の候補表示から不要な詳細を削除しました。これにより #22158 を解決しました。#23040 (alexey-milovidov).
- sparse_hashed 辞書における system.dictionaries の
bytes_allocatedフィールドの計算を修正しました。#22867 (Azat Khuzhin). - MergeTree の逆順読み取り時の概算総行数の計算を修正しました。#22726 (Azat Khuzhin).
- 自分自身を参照する
clickhouseソースを持つ Dictionary を設定できてしまい、無限ループが発生する問題を修正しました。#14314 をクローズしました。#22479 (Maksim Kita).
バグ修正
- ヘッジリクエストに関する複数の修正。設定
use_hedged_requestsが有効な場合に、GLOBAL IN/JOINを含むクエリで発生していたCan't initialize pipeline with empty pipeエラーを修正しました。#23431 を修正しています。#23805 (Nikolai Kochetov)。クラッシュの原因となっていたヘッジ接続での race condition を修正しました。これにより #22161 を修正しています。#22443 (Kruglov Pavel)。リモートクエリからunknown packetを受信した場合 (async_socket_for_remoteが有効なとき) に発生する可能性のあるクラッシュを修正しました。#21167 を修正しています。#23309 (Nikolai Kochetov)。 input_format_with_names_use_header設定を無効にした際、CSVWithNames フォーマットの入力がすべて破棄されてしまう不具合を修正しました。これにより #22406 が修正されます。#23202 (Nikita Mikhaylov) 。- リモート JDBC bridge の接続タイムアウトの問題を修正しました。#9609 をクローズしました。#23771 (Maksim Kita, alexey-milovidov).
update_fieldが指定されている場合のcomplex_key_hashedの初期ロード処理のロジックを修正しました。#23800 をクローズしました。#23824 (Maksim Kita) 。PREWHEREと ROW POLICY フィルタの両方が有効で、結果が空の場合にクラッシュする問題を修正しました。#23763 (Amos Bird) 。- 何らかの例外が発生していた場合に、Distributed への INSERT 時に発生する可能性がある “Cannot schedule a task” エラーを回避。 #23744 (Azat Khuzhin).
- 集約関数
mannWhitneyUTestで、両方のサンプルの値が完全に同一である場合に例外を発生させるようにしました。これにより #23646 を修正しました。 #23654 (Nikita Mikhaylov). - HTTP 経由でデータを挿入する際に例外が発生していたサーバー側の不具合を修正しました。これにより #23512 を修正しました。#23643 (Nikita Mikhaylov)。
- エスケープシーケンスを含む一部の
LIKE式での誤った解釈を修正しました。#23610 (alexey-milovidov) 。 - 再起動 / 停止コマンドがハングする問題を修正しました。#20214 をクローズしました。#23552 (filimonov).
- selectクエリで複数のJOINがある場合の
COLUMNSマッチャーの不具合を修正しました。#22736 をクローズしました。#23501 (Maksim Kita). - カラム自体が
ReplacingMergeTreeのパラメータとして使用されている場合に、そのカラムのデフォルト値を変更するとクラッシュする問題を修正しました。 #23483 (hexiaoting). ReplacingMergeTreeを使用した vertical merge のコーナーケースを修正しました。まれに、Incomplete granules are not allowed while blocks are granules sizeのような例外により、merge が失敗することがありました。#23459 (Anton Popov).- 空の配列リテラルを、1 次元を超える配列 (例:
CAST([] AS Array(Array(String)))) に CAST できない不具合を修正しました。#14476 をクローズします。#23456 (Maksim Kita). deltaSum集約関数がカウンターのリセット後に誤った結果を返す不具合を修正しました。#23437 (Russ Frank).- マルチディスク構成で ReplicatedMergeTree テーブルの作成に失敗した際に発生する
Cannot unlink fileエラーを修正しました。これにより #21755 をクローズします。#23433 (tavplubix). - 仮想カラムに基づくパーティションプルーニング時に、互換性のない定数式が生成される問題を修正しました。これにより、https://github.com/ClickHouse/ClickHouse/pull/21401#discussion_r611888913 の問題も修正されます。 #23366 (Amos Bird).
- join_algorithm が ‘auto’ に設定され、Dictionary を使用する Join の実行時に発生していたクラッシュを修正しました。#23002 をクローズしました。#23312 (Vladimir).
- パーティションプルーニング中に NOT 条件を緩和しないよう修正しました。これにより、#23305 と #21539 を修正しました。#23310 (Amos Bird) 。
- 古いブロックのバックグラウンドクリーンアップで発生する、ごくまれなレースコンディションを修正しました。これにより、重複排除ウィンドウの終端に近すぎるブロックが重複排除されないことがありました。 #23301 (tavplubix).
- ReplicatedMergeTree テーブルの作成と削除の間で発生する、 (分散環境における) ごくまれなレースコンディションを修正しました。これにより、レプリケートテーブルの作成時に
node doesn't existのような例外が発生することがありました。#21419 を修正しました。#23294 (tavplubix). - 主キーが最初の属性でない場合に、DDL から simple key Dictionary を作成できない不具合を修正しました。#23236 #23262 (Maksim Kita).
- テーブル内に長いカラム名が多数ある場合のODBCからの読み取りを修正しました。#8853 をクローズしました。#23215 (Kseniia Sumarokova).
- MaterializeMySQL (実験的機能) : キーカラムを条件に指定して
MaterializeMySQLから選択する際に発生するNot found columnエラーを修正しました。#22432 を修正。 #23200 (tavplubix). - サブクエリが定数に最適化された場合の別名処理を修正しました。#22924 を修正。#10401 を修正。#23191 (Maksim Kita).
- デフォルトプロファイルで
data_type_default_nullable設定が有効になっていると、サーバーが起動に失敗することがありましたが、この問題を修正しました。 #22573 を修正しました。 #23185 (tavplubix). - 現在の接続数の誤ったカウントが原因で発生していた、シャットダウン時のクラッシュを修正しました。 #23154 (Vitaly Baranov).
- Atomic データベースから materialized view をデタッチし、再度アタッチした後にその materialized view から SELECT すると
Table .inner_id... doesn't existエラーが発生する問題を修正しました。#23047 (tavplubix). untupleを使用するサブクエリで発生することがあるエラーCannot find column in ActionsDAG resultを修正しました。 #22290. #22991 (Nikolai Kochetov).- 値が Nullable の
Map型の定数カラムの使用に関する問題を修正しました。#22939 (Anton Popov). DateTime64に対するformatDateTime()と"%C"フォーマット指定子の問題を修正し、さらに大きな値および非ゼロの scale に対するtoDateTime64()も修正しました。 #22937 (Vasily Nemkov).mannWhitneyUTestとrankCorrをウィンドウ関数と一緒に使用した際に発生していたクラッシュを修正しました。これにより #22728 に対応しました。#22876 (Nikita Mikhaylov).- LIVE VIEW (実験的機能) :
TemporaryLiveViewCleanerにおいて、TEMPORARY LIVE VIEW の DROP/CREATE を同時実行した際に発生する可能性があったハングを修正しました。参照。 #22858 (Vitaly Baranov). - フィルターカラムが集約で使用される場合の
HAVINGのプッシュダウンを修正しました。 #22763 (Anton Popov). - OOM例外発生時に、Zookeeperリクエストがハングする可能性がある問題を修正しました。 #22438 を修正。 #22684 (Nikolai Kochetov).
- ReplicatedMergeTree テーブルエンジンにおいて、複数のレプリカでのミューテーションの完了待機を修正しました。従来は、他のレプリカでミューテーションが実際に実行される前に、mutation/alter クエリが完了してしまうことがありました。#22669 (alesapin).
- SELECT 句にカラムがない場合に、ネストされた型を持つ Log で発生する例外を修正しました。#22654 (Azat Khuzhin) 。
- AWS向けの補助リクエストで無制限に待機してしまう問題を修正しました。#22594 (Vladimir Chebotarev) 。
- クライアントがかなり早い段階で接続を閉じた際に発生するクラッシュを修正しました #22579。 #22591 (nvartolomei).
Mapデータ型 (実験的機能) : 分散クエリにおける関数mapのフォーマットの不具合を修正しました。#22588 (foolchi).- TSVフォーマットで、末尾に改行のない空文字列のデシリアライズを修正しました。これにより #20244 をクローズします。バージョンを更新しない場合の回避策としては、
input_format_null_as_defaultをゼロに設定してください。古いバージョンではゼロでした。#22527 (alexey-milovidov). - Merge Joinアルゴリズムで、
LowCardinality型のカラムに対する誤った型変換を修正しました。#22386、#22388 をクローズしました。#22510 (Vladimir). tokenbf_v1の全文テキスト索引で、バッファオーバーフロー (読み取り時) が発生する可能性がありました。過剰なバイトが使用されることはありませんが、まれに読み取り処理によってクラッシュが発生する可能性があります。これにより #19233 を修正しました。#22421 (alexey-milovidov).- HTTP chunk サイズを制限しないようにしました。#21907 を修正。#22322 (Ivan)。
optimize_aggregation_in_orderが有効で、テーブル内に多数のパーツがある場合に、データの集約が不十分になる不具合を修正しました。optimize_aggregation_in_orderが有効な場合の集約処理のパフォーマンスもわずかに改善しました。#21889 (Anton Popov).- テーブル関数 view がカラムとして使用されているかどうかを確認する。#20350 を補完する修正です。#21465 (Amos Bird).
JOINと集約を含むクエリで、Mergeエンジンのテーブルに対して発生する “unknown column” エラーを修正しました。#18368 をクローズし、#22226 もクローズします。#21370 (Vladimir).- pushdown 最適化における名前の衝突を修正しました。これにより、FULL JOIN 後の
WHEREフィルタリングが誤って行われる問題が発生していました。#20497 をクローズしました。#20622 (Vladimir). quorum_parallel=1でクォーラム insert を行う際、重複排除の影響で実際には “クォーラム” にならないことがある、非常にまれなバグを修正しました。#18215 (filimonov が報告し、alesapin が修正) 。
ビルド/テスト/パッケージングの改善
- CI で stateless tests を並列に実行。 #22300 (alesapin).
- Debian パッケージを簡素化。これにより #21698 を修正。 #22976 (alexey-milovidov).
- Apple M1 での ClickHouse ビルドをサポート。 #21639 (changvvb).
- macOS 向けの ClickHouse Keeper ビルドを修正。 #22860 (alesapin).
- AArch64 プラットフォーム上の一部のテストを修正。 #22596 (alexey-milovidov).
- パフォーマンス向上の可能性を見込んで、関数アラインメントを追加。 #21431 (Danila Kutenin).
- amd64 と aarch64 (qemu) で同一の結果を出力するよう、一部のテストを調整。結果が実装固有の CPU の挙動に依存していました。 #22590 (alexey-milovidov).
- クエリプロファイリングを x86_64 でのみ許可。 #15174 と #15638 を参照してください。これにより #15638 をクローズ。 #22580 (alexey-milovidov).
USE_INTERNAL_XZ_LIBRARY=OFFCMake オプションを使用して、バンドルされていない xz (lzma) でのビルドを可能に。 #22571 (Kfir Itzhak).ppc64leでバンドル版openldapを有効化。 #22487 (Kfir Itzhak).ppc64leで互換性のないライブラリ (通常はプラットフォーム固有) を無効化。 #22475 (Kfir Itzhak).- CI に ClickHouse Keeper 向けの Jepsen テストを追加。 #22373 (alesapin).
- heap profiling をサポートするよう
jemallocをビルド。 #22834 (nvartolomei). - 別スレッドからのロック解除に起因する rwlock のロック解除による、
*Logエンジンでの UB を回避。 #22583 (Azat Khuzhin). - 同じスレッドから TinyLog の rwlock をロック解除することで、UB を修正。 #22560 (Azat Khuzhin).
ClickHouse リリース 21.4
ClickHouse リリース 21.4.1 2021-04-12
後方互換性を持たない変更
toStartOfIntervalFunctionは、時間インターバルを午前 0 時に揃えるようになります (以前のバージョンでは Unix epoch の開始時点に揃えられていました) 。たとえば、toStartOfInterval(x, INTERVAL 11 HOUR)は 1 日を00:00:00..10:59:59、11:00:00..21:59:59、22:00:00..23:59:59の 3 つのインターバルに分割します。この動作のほうが実運用のニーズに適しています。これにより #9510 が修正されます。#22060 (alexey-milovidov).- graphite のロールアップ設定では、
AgeとPrecisionは保持期間が進むごとに増加している必要があります。現在はこれが検証され、不正な設定では例外が発生します。#21496 (Mikhail f. Shiryaev). - カスタムトップレベルドメインのリストに含まれる 3 階層以上のドメインに対して、
cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom()が誤った結果を返す問題を修正しました。これらのカスタムトップレベルドメインに一致する入力ドメインでは、第 3 レベルドメインが最初の有意なドメインと見なされていました。現在は修正されています。この変更により、たとえばこの関数を分片キーで使用している場合は非互換が生じる可能性があります。#21946 (Azat Khuzhin). - テーブル
system.dictionariesのカラムkeysは、カラムkey.namesおよびkey.typesに置き換えられました。system.dictionariesテーブルのカラムkey.names、key.types、attribute.names、attribute.typesは、Dictionary がロードされていなくても参照できます。#21884 (Maksim Kita). ALTER TABLE ATTACH PART[ITION]コマンドを処理するレプリカは、他のレプリカからデータを取得する前に、自身のdetached/フォルダ内を検索するようになりました。実装の詳細として、replicated log に新しいコマンドATTACH_PARTが導入されています。パーツはチェックサムに基づいて検索および比較されます。#18978 (Mike Kot). 注:ATTACH PART[ITION]クエリは、クラスターのアップグレード中には動作しない場合があります。- 新しいバージョンで
ALTER ... ATTACHクエリを実行した後は、古い ClickHouse バージョンへロールバックできません。古いサーバーでは replicated log のATTACH_PARTエントリを処理できず、失敗するためです。
- このバージョンでは、空の
<remote_url_allow_hosts></remote_url_allow_hosts>は、以前のバージョンでは何もしなかったのに対し、リモートホストへのすべてのアクセスをブロックします。以前の動作を維持したい場合は、設定ファイルに空のremote_url_allow_hosts要素があれば削除してください。#20058 (Vladimir Chebotarev).
新機能
DateTime64の範囲を拡張し、1925 年から 2283 年までの日付をサポートするようにしました。ゼロ日付 (1970-01-01) 付近でのDateTimeのサポートも改善しました。#9404 (alexey-milovidov, Vasily Nemkov)。ただし、拡張された日付範囲では、すべての時刻・日付関数が動作するわけではありません。- 事前設定済みユーザーおよびHTTPリクエスト (GSS-SPNEGO) 向けのKerberos認証のサポートを追加しました。#14995 (Denis Glazachev).
- 別名ではなく元のカラム名を使用するための
prefer_column_name_to_alias設定を追加しました。これは、一般的なデータベースの別名規則との互換性を高めるために必要です。#9715 および #9887 に対応しています。#22044 (Amos Bird) 。 - 関数
dictGetChildren(dictionary, key)、dictGetDescendants(dictionary, key, level)を追加しました。関数dictGetChildrenは、すべての子要素をインデックスの配列として返します。これはdictGetHierarchyの逆変換です。関数dictGetDescendantsは、dictGetChildrenをlevel回再帰的に適用した場合と同様に、すべての子孫要素を返します。levelの値が 0 の場合は無限大と同等です。#14656 をクローズしました。#22096 (Maksim Kita). executable_poolDictionary ソースを追加しました。#14528 をクローズしました。#21321 (Maksim Kita).dictionarytable function を追加しました。Dictionaryengine と同様に動作します。#21560 をクローズしました。#21910 (Maksim Kita) 。PolygonDictionary属性でNullable型を利用できるようになりました。#21890 (Maksim Kita) 。- 関数
dictGet、dictHasは、DDL で作成された辞書でデータベース名が指定されていない場合、現在のデータベース名を使用します。#21632 をクローズしました。#21859 (Maksim Kita) 。 - 関数
dictGetOrNullを追加しました。dictGetと同様に動作しますが、Dictionary 内でキーが見つからない場合はNullを返します。#22375 をクローズしました。#22413 (Maksim Kita). ComplexKeyCache、SSDCache、SSDComplexKeyCache辞書に非同期更新を追加しました。Cache、ComplexKeyCache、SSDCache、SSDComplexKeyCache辞書でNullable型をサポートしました。dictGet、dictGetOrDefault関数で複数属性の取得をサポートしました。#21517 を修正しました。#20595 (Maksim Kita)。RangeHashedDictionaryでdictHas関数をサポートしました。#6680 を修正。#19816 (Maksim Kita).DateTimeまたはDateTime64データ型のtimezone名を返す関数timezoneOfを追加しました。これによって #9959 はクローズされません。関数名の不整合を修正し、timezoneとtimeZone、toTimezoneとtoTimeZone、およびtimezoneOfとtimeZoneOfの別名を追加しました。#22001 (alexey-milovidov).CREATE/ALTER USERコマンドに、新しい省略可能な句GRANTEESを追加しました。これは、このユーザー自身に grant option 付きで必要なすべてのアクセス権が付与されている場合に、このユーザーから権限付与を受けられるユーザーまたはロールを指定します。デフォルトではGRANTEES ANYが使用されます。これは、grant option を持つユーザーが誰にでも権限を付与できることを意味します。構文:CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]。#21641 (Vitaly Baranov).system.clustersに新しいカラムslowdowns_countを追加しました。hedged request の使用時には、このレプリカの応答が遅いために別のレプリカへ切り替えた回数が表示されます。また、system.clustersにerrors_countの実際の値も表示されるようになりました。#21480 (Kruglov Pavel).MergeTree*エンジンに_partition_id仮想カラムを追加しました。_partition_idによるパーティションのプルーニングが可能になりました。パーティション ID 文字列を計算するpartitionID()関数を追加しました。#21401 (Amos Bird) 。- 指定したCIDRネットワークプレフィックスにIPv4またはIPv6アドレスが含まれているかを判定する関数
isIPAddressInRangeを追加しました。#21329 (PHO). - 新しいSQLコマンド
ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'を追加しました。このコマンドは、すべてのディスクから凍結されたパーティションを適切に削除するために必要です。#21142 (Pavel Kovalenko)。 - JOIN におけるキー型の暗黙的な変換をサポートしました。#19885 (Vladimir).
実験的機能
- 浮動小数点型の
RANGE OFFSETフレーム (ウィンドウ関数向け) をサポートしました。lag/leadに似ていますが、ウィンドウフレームを考慮するlagInFrame/leadInFrameウィンドウ関数を実装しました。フレームがbetween unbounded preceding and unbounded followingの場合、これらはlag/leadと同一です。これにより #5485 を解決しました。#21895 (Alexander Kuzmenkov). - S3ストレージ上の
ReplicatedMergeTreeに対するゼロコピーレプリケーション。#16240 (ianton-ru). - 既存の S3ディスクを、バックアップ/復元機能を備えたスキーマへ移行できるようにしました。#22070 (Pavel Kovalenko).
パフォーマンス改善
clickhouse-localなど全体で、並列フォーマットをサポートしました。 #21630 (Nikita Mikhaylov).CSVWithNamesおよびTSVWithNamesフォーマットでの並列パースをサポートしました。これにより #21085 を解決します。 #21149 (Nikita Mikhaylov).- 64 MiB 以上のファイル範囲について、mmap IO による読み取りを有効にしました (設定
min_bytes_to_use_mmap_io) 。中程度の性能向上が見込まれます。 #22326 (alexey-milovidov). min_bytes_to_use_mmap_io設定で読み取るファイル向けに cache を追加しました。設定値が小さい場合でも、頻繁な mmap/munmap 呼び出しとそれに伴うページフォールトを回避できるため、大幅な (2 倍以上の) 性能向上が得られます。なお、mmap IO には本番環境での信頼性を下げる大きな欠点があります (例: 障害のあるディスクでのハングや SIGBUS、制御しづらい memory usage) 。それでも、ベンチマークでは有効です。 #22206 (alexey-milovidov).- codec
NONE使用時の不要なデータコピーを回避しました。なお、codecNONEはたいてい有用ではないため、常に圧縮 (デフォルトではLZ4) を使用することを推奨します。一般的な認識に反して、圧縮を無効にしても性能が向上するとは限らず、逆効果になることもあります。NONEcodec が有用なのは次のような場合です: - データが圧縮できない場合。 - 合成ベンチマーク。 #22145 (alexey-milovidov). max_rows_to_group_byが小さく、group_by_overflow_mode='any'の場合のGROUP BYを高速化しました。 #21856 (Nikolai Kochetov).SELECT ... FINAL ... WHEREのようなクエリの性能を最適化しました。これにより、FINALを含むクエリでは、sorting key に含まれるカラムをPREWHEREに移動できるようになりました。 #21830 (foolchi).memcpyを別の実装に置き換えることで性能を改善しました。これにより #18583 を解決します。 #21520 (alexey-milovidov).- sorting key 順での aggregation の性能を改善しました (設定
optimize_aggregation_in_orderが有効な場合) 。 #19401 (Anton Popov).
改善
- PostgreSQL のテーブル/データベースエンジンおよび Dictionary ソース向けの接続プールを追加しました。これにより #21444 が修正されるはずです。#21839 (Kseniia Sumarokova).
- postgres ストレージ/テーブル関数で、デフォルト以外のテーブルスキーマをサポートしました。#21701 をクローズしました。#21711 (Kseniia Sumarokova).
- Postgres Dictionary ソースで、レプリカの優先順位に対応しました。#21710 (Kseniia Sumarokova) 。
- 新しいMergeTree設定
min_bytes_to_rebalance_partition_over_jbodを導入しました。これにより、JBODボリューム上の異なるディスクに新しいパーツを均等に割り当てられるようになります。#16481 (Amos Bird) 。 - 対応するクエリに対して、
system.query_logのquery_kindカラムにGrant、Revoke、Systemの値を追加しました。 #21102 (Vasily Nemkov). - レプリケーションに使用されるHTTP接続のタイムアウトを、他のHTTPタイムアウトとは別に設定できるようにしました。#20088 (nvartolomei).
- サーバーがブロックを書き込んでいる際に例外が発生した場合、クライアントに表示される例外メッセージを改善しました。以前のバージョンでは、クライアントが
Data compressed with different methodsのような誤解を招くメッセージを受け取ることがありました。#22427 (alexey-milovidov). Directory tmp_fetch_XXX already existsエラーを修正しました。このエラーは、part の fetch が失敗した後に発生することがありました。既に存在する場合は、一時 fetch ディレクトリを削除します。#14197 を修正しました。#22411 (nvartolomei).UInt256引数を持つ関数rangeの MSan レポートを修正 (大きな整数のサポートは実験的です) 。これにより #22157 をクローズしました。#22387 (alexey-milovidov)。system.processesテーブルにcurrent_databaseカラムを追加しました。これには、そのクエリの現在のデータベースが格納されます。#22365 (Alexander Kuzmenkov).clickhouse-clientに、大文字・小文字を区別しない履歴検索/ナビゲーション機能と、サブワード単位での移動機能を追加しました。 #22105 (Amos Bird).(NULL, NULL)のような NULL のタプルがIN演算子の左辺にあり、右辺が非 NULL のタプルである場合、たとえばSELECT (NULL, NULL) IN ((0, 0), (3, 1))は、互換性のない型に関する例外をスローするのではなく、0 を返すようになりました。この expression は、SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1)のような式の最適化によって現れることもあります。これにより #22017 がクローズされます。#22063 (alexey-milovidov).- simdjson の使用バージョンを 0.9.1 に更新しました。これにより #21984 が修正されます。#22057 (Vitaly Baranov).
CONNECTION_ID()およびVERSION()関数に、大文字と小文字を区別しない別名を追加しました。これにより #22028 の問題を修正しました。#22042 (Eugene Klimov).- 各イベントが一度だけ計算されるようにするオプション
strict_increaseをwindowFunnel関数に追加しました (#21835 を解決) 。 #22025 (Vladimir). MergeTreeテーブルのパーティションキーにDateまたはDateTimeカラムが含まれず、DateTime64カラムがちょうど 1 つだけ含まれている場合、その値がsystem.partsおよびsystem.parts_columnsテーブルのmin_timeカラムとmax_timeカラムに表示されるようになりました。system.parts_columnsテーブルにmin_timeカラムとmax_timeカラムを追加しました (これまでsystem.partsテーブルとの不整合がありました) 。これにより #18244 を解決しました。#22011 (alexey-milovidov).clickhouse-copierで、補助テーブルから宛先へパーティションを移動するためのreplication_alter_partitions_sync=1設定をサポートしました。デフォルトのタイムアウト値を短縮しました。#21911 を修正しました。#21912 (turbo jason)。- システムテーブルに、
EmbeddedRocksDBテーブルのデータディレクトリのパスを表示する。 #21903 (tavplubix). - プロファイルイベント
HedgedRequestsChangeReplicaを追加し、read data timeout の単位を秒からミリ秒に変更しました。#21886 (Kruglov Pavel) 。 - DiskS3 (開発中の実験的機能) 。宛先が空でなく、cacheディスクを使用している場合にディレクトリを移動できない不具合を修正しました。#21837 (Pavel Kovalenko).
- Web UI における
ArrayおよびMapデータ型のフォーマットを改善しました。 #21798 (alexey-milovidov). - 設定が更新された場合にのみ、クラスターを更新するようにしました。 #21685 (Kruglov Pavel).
- 分散DDLクエリでクエリ設定およびセッション設定が伝播されるようになりました。これを有効にするには、
distributed_ddl_entry_format_versionを 2 に設定します。distributed_ddl_output_mode設定が追加されました。サポートされるモードは、none、throw(デフォルト) 、null_status_on_timeout、never_throwです。Replicatedデータベースエンジンに関するその他の修正と改善。#21535 (tavplubix). PODArrayが、16 の約数でも倍数でもない要素サイズでインスタンス化された場合、バッファオーバーフローが発生する可能性がありました。現行リリースにはこの不具合はありません。#21533 (alexey-milovidov).system.errorsにlast_error_time/last_error_message/last_error_stacktrace/remoteカラムが追加されました。#21529 (Azat Khuzhin) 。visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}の別名としてsimpleJSONExtract/simpleJSONHasを追加しました。#21383 を修正しました。#21519 (fastio).optimize_skip_unused_shardsにおける sharding key の値の数を制限する設定optimize_skip_unused_shards_limitを追加しました。#21512 (Azat Khuzhin).- 最後のクエリの後に余分な空白やコメントがあっても
clickhouse-formatが例外を投げないよう改善し、データを含むASTInsertQueryをフォーマットする際には、分かりやすいメッセージとともに早い段階で例外を投げるようにしました。 #21311 (flynn). - データ型
Mapでの整数キーのサポートを改善しました。#21157 (Anton Popov). - MaterializeMySQL: 接続が失われた場合、MySQL への再接続を試みるようにした。 #20961 (Håvard Kvålen).
CROSS JOINをINNER JOINに書き換えられるケースをさらに増やしました。#20392 (Vladimir).optimize_on_insert設定が有効な場合、INSERT 時に空のパーツを作成しないようにしました。#20304 の修正です。#20387 (Kruglov Pavel).MaterializeMySQL:_versionカラムに minmax スキッピング索引を追加しました。#20382 (Stig Bakken).clickhouse-formatに--backslashオプションを追加しました。整形済みクエリの各行末にバックスラッシュを追加できます。 #21494 (flynn).- これにより、すでにカバーされているパートに対して mutation を実行しようとしても、ClickHouse は
LOGICAL_ERROR例外をスローしなくなりました。#22013 を修正しました。#22291 (alesapin).
バグ修正
- 競合状態が発生する可能性を防ぐため、
HedgedConnectionsでパケット受信処理をキャンセルする前に epoll から socket を削除するようにしました。#22161 を修正しました。#22443 (Kruglov Pavel). - 並列パースルーチンに (不足していた) メモリ使用量の計上を追加しました。以前のバージョンでは、結果セットに非常に大きなデータブロックが含まれる場合、OOM が発生する可能性がありました。これにより #22008 を修正しました。#22425 (alexey-milovidov)。
SELECTに定数のWHERE条件があり、かつソーステーブルに名前が数字のカラムが存在する場合に発生する可能性のある例外を修正しました。 #22270 (LiuNeng).use_hedged_requests=0およびasync_socket_for_remote=1におけるクエリのキャンセルの問題を修正しました。 #22183 (Azat Khuzhin).InterserverIOHTTPHandlerの未捕捉の例外を修正しました。 #22146 (Azat Khuzhin).- 設定に
http_portが含まれていない場合の Docker エントリポイントを修正しました。 #22132 (Ewout). JOIN、TOTALS、arrayJoinにおけるエラーInvalid number of rows in Chunkを修正しました。#19303 をクローズしました。#22129 (Vladimir).- Kafka からメッセージをポーリングするために使われていたバックグラウンドスレッドプールの名前を修正しました。問題のあるスレッドプールを使用している Kafka engine は、メッセージキューからメッセージを消費しなくなっていました。 #22122 (fastio).
ReplicatedMergeTreeテーブルエンジンにおけるOPTIMIZEおよびALTERクエリの待機処理を修正しました。これにより、テーブルがデタッチされた場合や再起動された場合でも、クエリがハングしなくなりました。#22118 (alesapin).- 問題のある Linux カーネルでは、
async_socket_for_remote/use_hedged_requestsを無効化しました。 #22109 (Azat Khuzhin). - Docker entrypoint:
LOG_PATHが空の場合に.に対してchownを実行しないようにしました。#22100 をクローズ。#22102 (filimonov). - 関数
decryptでは、AEADモードで暗号化されたデータの最小サイズを確認する check が不足していました。これにより #21897 が解消されます。 #22064 (alexey-milovidov) 。 - まれに、
CollapsingMergeTreeのマージによって、index_granularity + 1行を持つグラニュールが作成されることがあります。そのため、#18928 で追加された内部チェック (21.2 および 21.3 に影響) が、Incomplete granules are not allowed while blocks are granules sizeというエラーで失敗することがありました。このエラーにより、パーツをマージできなくなっていました。#21976 (Nikolai Kochetov) 。 - ハッシュ型のexternal dictionariesのloading中にmemory usageが大幅に増加するおそれのある #15454 をrevertしました。これにより #21935 はクローズされます。 #21948 (Maksim Kita).
- ヘッジ接続の重複を防止しました (
Unknown packet 9 from serverエラー) 。#21941 (Azat Khuzhin). - 一部のケースで、“multipart/form-data” コンテンツタイプの HTTP POST リクエストを正しく読み取れない問題を修正しました。 #21936 (Ivan).
- クエリにウィンドウ関数が含まれており、主キー順での読み取り最適化が適用される場合に
ORDER BYの結果が誤る問題を修正しました。 #21828 を修正。 #21915 (Alexander Kuzmenkov). - catboost モデルの初回実行時に発生するデッドロックを修正しました。#13832 をクローズしました。#21844 (Kruglov Pavel) 。
WHEREまたはHAVING条件がGROUP BYより前にプッシュされた場合に発生する可能性がある、誤ったクエリ結果 (およびクラッシュの可能性) を修正しました。 #21773。 #21841 (Nikolai Kochetov).WriteBufferFromS3におけるエラー処理とログを改善しました。#21836 (Pavel Kovalenko) 。- 二段階集約の使用時に、combinator
Distinctを持つ集約関数で発生する可能性があるクラッシュを修正しました。これは #18365 のフォローアップ修正です。本番環境でのみ再現されます。 #21818 (Amos Bird). - スカラーサブクエリの索引解析を修正しました。これにより、#18896で導入された不具合 #21717 が修正されます。#21766 (Amos Bird) 。
ALTER MODIFY COLUMNクエリで、サイズ (32 bit または 64 bit) が変わらないDecimalカラムの型を変更しても反映されないReplicatedMergeテーブルエンジンの不具合を修正しました。 #21728 (alesapin).ReplicatedMergeTreeでOPTIMIZEとDROPを同時に実行した際に、無限に待機する可能性がある問題を修正しました。 #21716 (Azat Khuzhin).- 型
Mapに対して、定数整数引数を使用した場合の関数arrayElementを修正しました。 #21699 (Anton Popov). - 存在しない属性に対して
access_to_key_from_attributesを使用したip_trieで発生する SIGSEGV を修正しました。#21692 (Azat Khuzhin) 。 - サーバーは、
DDLWorkerと辞書の初期化が完了してからでないと、接続を受け付けないようになりました。#21676 (Azat Khuzhin). - Join 型のテーブルのキーに対する型変換を追加しました (以前は SIGSEGV の原因となっていました) 。 #21646 (Azat Khuzhin).
async_socket_for_remote=1での分散リクエストのキャンセル処理 (たとえば、複数の分片に対する limit 付きの単純な select、つまりselect * from remote('127.{2,3}', system.numbers) limit 100) を修正しました。#21643 (Azat Khuzhin).- 水平マージ向けの
fsync_part_directoryを修正しました。#21642 (Azat Khuzhin). - 外部データベースエンジン (MySQL、PostgreSQL) 向けクエリの
WHERE句で、結合先テーブルの不明なカラムを削除しました。close #14614、close #19288 (重複) 、close #19645 (重複) 。#21640 (Vladimir) 。 std::terminateは、データを S3 に書き込む際にエラーが発生すると呼び出されていました。#21624 (Vladimir).optimize_skip_unused_shardsが有効で、使用される分片が 0 個の場合に発生する可能性があるCannot find columnエラーを修正しました。#21579 (Azat Khuzhin).- クエリに定数の
WHERE条件があり、かつ設定optimize_skip_unused_shardsが有効な場合、すべての分片がスキップされ、クエリが誤って空の結果を返すことがありました。#21550 (Amos Bird). - table function
clusterAllReplicasが誤った_shard_numを返す不具合を修正しました。#21481 をクローズしました。#21498 (flynn). - 設定更新後もS3テーブルが古い認証情報を保持する問題を修正しました。#21457 (Grigory Pervakov) 。
- Poco の
SecureSocket内の SSL オブジェクトで発生していた競合状態を修正しました。 #21456 (Nikita Mikhaylov). Kafka向けのAvroフォーマットのパースを修正しました。#21437 を修正。#21438 (Ilya Golshtein) 。- セキュアソケットでの送受信タイムアウトとノンブロッキング読み取りを修正。 #21429 (Kruglov Pavel).
force_drop_tableフラグがMATERIALIZED VIEWで機能しない問題を修正しました。#18943 の修正です。#20626 (tavplubix).PredicateRewriteVisitorでの名前の衝突を修正しました。これにより、full join 後にWHEREで誤ったフィルタリングが行われる問題が発生していました。#20497 をクローズしました。#20622 (Vladimir).
ビルド/テスト/パッケージングの改善
- ClickHouse Keeper 向けの Jepsen テストを追加しました。#21677 (alesapin) 。
- CIでステートレステストを並列実行するようにしました。#22181 に依存します。#22300 (alesapin).
- SQLancer の CI 実行用のステータスチェックを有効にしました。#22015 (Ilya Yatsishin).
- PowerPCビルドに向けた各種準備:
ppc64leで同梱の openldap を有効化しました。#22487 (Kfir Itzhak)。Clang でppc64le向けのコンパイルを有効化しました。#22476 (Kfir Itzhak)。ppc64leでの boost のコンパイルを修正しました。#22474 (Kfir Itzhak)。ppc64leで内部 CMake 変数CMAKE_ASM_COMPILE_OBJECTが設定されていないことによる CMake エラーを修正しました。#22469 (Kfir Itzhak)。Fedora/RHEL/CentOS でppc64le上のlibclang_rt.builtinsが見つからない問題を修正しました。#22458 (Kfir Itzhak)。ppc64leでjemallocを使用したビルドを有効化しました。#22447 (Kfir Itzhak)。ppc64leで ClickHouse の設定の埋め込みと cctz のタイムゾーンの埋め込みを修正しました。#22445 (Kfir Itzhak)。ppc64leでのコンパイルを修正し、ppc64leで正しい命令ポインタレジスタを使用するようにしました。#22430 (Kfir Itzhak)。 aarch64で S3 (AWS) ライブラリを再度有効化しました。#22484 (Kfir Itzhak).ORCフォーマットの読み取りに必要なため、Dockerコンテナにtzdataを追加しました。これにより #14156 が解決されます。#22000 (alexey-milovidov).clickhouse-serverイメージの Dockerfile に、deb_locationとsingle_binary_locationの 2 つの引数を追加しました。#21977 (filimonov).- clang-tidy を使用する場合にアサーションを有効化することで、リリースビルドでも clang-tidy を使用できるようにしました。 #21914 (alexey-milovidov).
- CMake スクリプトで検索対象とする名前に llvm-12 のバイナリ名を追加しました。clang の警告を抑えるため、暗黙の定数変換を追加しました。CMake 3.19 でビルドできるようにサブモジュールを更新しました。
readpassphraseライブラリでのマクロ展開における再帰を抑制しました。clang では、非推奨の-fuse-ldを--ld-pathに変更しました。#21597 (Ilya Yatsishin). - Docker Hub で非常に厳しいレート制限が課されるようになったため、
docker/test/testflows/runner/dockerd-entrypoint.shを Yandex dockerhub-proxy を使うように更新しました #21551 (vzakaznikov). - macOS の共有ライブラリのビルドを修正。 #20184 (nvartolomei).
zookeeper-dump-treeにctimeオプションを追加しました。これにより、ノードの作成時刻をダンプできるようになりました。#21842 (Ilya).
ClickHouse リリース 21.3 (LTS)
ClickHouse リリース v21.3 (2021-03-12)
後方互換性を持たない変更
- 以前の構文で table TTL を使って MergeTree テーブルを作成することは、単に無視されてしまうため、現在は許可されていません。古いテーブルの Attach は引き続き可能です。#20282 (alesapin).
- 今後、大文字小文字を区別しないすべての関数名は正規の表記に書き換えられます。これはプロジェクションのクエリルーティング (今後追加予定の機能) に必要です。#20174 (Amos Bird).
TTLの式が関数で、かつそれがORDER BYキーと同じ場合でもTTLを作成できるように修正しました。これにより、GROUP BYを使うTTLで、主キーのカラムにカスタム集約を設定できるようになりました。後方互換性なし:GROUP BYに含まれず、明示的にも設定されていない主キーのカラムには、TTL の期限切れ時にmaxではなくany関数が適用されるようになりました。また、WHEREまたはGROUP BYとともに TTL を使用している場合、ローリングアップデート中のマージ時に例外が発生することがあります。#15450 (Anton Popov).
新機能
- file engine の設定
engine_file_empty_if_not_existsおよびengine_file_truncate_on_insertを追加しました。 #20620 (M0r64n). - 連続する行の差分を合計する aggregate function
deltaSumを追加しました。 #20057 (Russ Frank). system.part_logtable に新しいevent_time_microsecondsカラムを追加しました。 #20027 (Bharat Nallan).- UTC からのオフセットを秒単位で返す
timezoneOffset(datetime)function を追加しました。これにより #issue:19850 をクローズします。 #19962 (keenwolf). - 分散テーブルから特定の分片にデータを insert できるようにする設定
insert_shard_idを追加しました。 #19961 (flynn). - big integer をサポートするように function
reinterpretAsを更新しました。 #19691 を修正します。 #19858 (Maksim Kita). - S3 client で Server Side Encryption Customer Keys (
x-amz-server-side-encryption-customer-(key/md5)header) をサポートするようになりました。the link を参照してください。 #19428 をクローズします。 #19748 (Vladimir Chebotarev). executableDictionary ソース向けにimplicit_keyオプションを追加しました。これにより、レコードが入力オプションと同じ順序で到着する場合、各レコードごとに key を出力する必要がなくなります。 #14527 を実装します。 #19677 (Maksim Kita).- quota type
query_selectsおよびquery_insertsを追加しました。 #19603 (JackyWoo). - function
extractTextFromHTMLを追加しました。 #19600 (zlx19950903), (alexey-milovidov). MergeTree*engine を使用する table に、クエリの Concurrency 制御のための table レベル設定が 2 つ追加されました。設定max_concurrent_queriesは、この table に関連する同時実行クエリ数を制限します。設定min_marks_to_honor_max_concurrent_queriesは、クエリが少なくともこの数の marks を読み取る場合にのみ前者の設定を適用します。 #19544 (Amos Bird).- user_files directory から file を String として読み込む
filefunction を追加しました。これはfiletable function とは異なります。これにより #issue:18851 を実装します。 #19204 (keenwolf).
実験的機能
- 実験的な
Replicatedデータベースエンジンを追加しました。これは複数のホスト間で DDL クエリをレプリケートします。#16193 (tavplubix). allow_experimental_window_functions = 1で有効になる、ウィンドウ関数の実験的サポートを導入しました。これは初期段階のアルファ品質の実装であり、本番環境での使用には適しておらず、今後のリリースで後方互換性のない変更が加えられる予定です。サポートされている機能の一覧については、ドキュメントを参照してください。#20337 (Alexander Kuzmenkov).- DiskS3 のメタデータファイルをバックアップ/リストアできるようになりました。#18377 (Pavel Kovalenko).
パフォーマンス改善
- リモートクエリ向けのヘッジドリクエスト。
use_hedged_requestsを有効にすると (デフォルトはオフ) 、クエリに対して異なるレプリカへ複数の接続を確立できるようになります。既存のレプリカへの接続がhedged_connection_timeout以内に確立されなかった場合、またはreceive_data_timeout以内にデータを受信できなかった場合は、新しい接続が有効になります。クエリは、最初に空でない Progress パケット (allow_changing_replica_until_first_data_packetの場合は Data パケット) を送信した接続を使用し、他の接続はキャンセルされます。max_parallel_replicas > 1のクエリをサポートしています。#19291 (Kruglov Pavel)。これにより、非常に大規模なクラスターでテールレイテンシを大幅に低減できます。 - テーブルに行レベルセキュリティの式が指定されている場合の
PREWHEREサポートを追加し、対応する最適化も有効にしました。#19576 (Denis Glazachev). - 設定
distributed_aggregation_memory_efficientはデフォルトで有効です。これにより、メモリ使用量が削減され、分散クエリのパフォーマンスが向上します。 #20599 (alexey-milovidov). - 複数の固定長キーを用いる GROUP BY の性能を改善しました。 #20472 (alexey-milovidov).
- より厳格なエイリアシングにより、集計関数のパフォーマンスを改善。 #19946 (alexey-milovidov).
- パイプラインを簡素化し、これによりパイプラインのスケジューリングにおけるロック競合を減らすことで、極端なケース (読み取り速度が 50 GB/秒級に達する場合) での
Memoryテーブルからの読み取りを高速化しました。 #20468 (alexey-milovidov). - HTTPサーバーを部分的に再実装し、送受信データのコピーを減らしました。これにより、HTTP 経由で長いレコードを INSERT する際のパフォーマンスが最大 1.5 倍向上します。#19516 (Ivan).
Memoryテーブルにcompress設定を追加しました。これを有効にすると、テーブルが使用するRAMを削減できます。環境やデータセットによっては、SELECT時の処理が高速になることもありますが、常にそうなるとは限りません。これにより#20093をクローズします。注: MemoryテーブルがMergeTreeより遅くなる理由はいくつかあります。(1) 圧縮がない (2) ブロックサイズが固定である (3) インデックスやprewhereがない… #20168 (alexey-milovidov).- aggregation のコードを若干改善しました。#20978 (alexey-milovidov) 。
- パフォーマンス向上のため、
intDiv/moduloの特殊化を再度追加しました。これにより #21293 を修正しました。このリグレッションは https://github.com/ClickHouse/ClickHouse/pull/18145 で導入されました。#21307 (Amos Bird). - Memory テーブルに INSERT SELECT で挿入する場合、ブロックを過度にまとめないようにしました。以前のバージョンでは、INSERT SELECT の後、Memory テーブルで非効率なデータ表現が生成されていました。これにより #13052 を修正しました。#20169 (alexey-milovidov)。
- DataType パーサーの計算量が指数的になる少なくとも 1 つのケースを修正しました (fuzzer により発見) 。これにより #20096 がクローズされます。#20132 (alexey-milovidov).
do_not_merge_across_partitions_select_final設定が 1 の場合、レベルが > 0 の単一の part に対する FINAL 付き SELECT の並列実行に対応しました。#19375 (Kruglov Pavel) 。system.partsおよびsystem.parts_columnsのクエリ時に、要求されたカラムのみを読み込むようにしました。#19570 を解決しました。#21035 (Anmol Arora).avg集約関数内の算術式に対する代数的最適化を行いました。#20092 をクローズ。#20183 (flynn).
改善
- テーブル関数の圧縮方式で、大文字と小文字を区別しないようにしました。あわせて、大文字表記でチェックされていたLZMA圧縮方式も修正しました。#21416 (Vladimir Chebotarev) 。
- 非アクティブなパーツが多すぎる場合、挿入時に遅延させるか、エラーを返すための 2 つの設定を追加しました。これは、サーバーがパーツを十分な速さでクリーンアップできない場合に有用です。#20178 (Amos Bird) 。
- mysql クライアントとの互換性を改善。1. mysql jdbc 2. mycli。 #21367 (Amos Bird).
- materialized view で参照されているカラムは削除できないようにしました。#21164 をクローズ。#21303 (flynn).
- MySQL の Dictionary ソースでは、SSL/TLS 接続でときどき発生する予期しない接続失敗 (クエリ実行中に MySQL server への接続が失われた) が起きた場合に、再試行するようになりました。#21237 (Alexander Kazakov) 。
- ユーザビリティの向上:
DateTime64のパースの一貫性を改善し、秒未満の精度を持つ Unix timestamp がスケーリングされた整数 (1111111111.222ではなく1111111111222のような値) として指定された場合も認識できるようになりました。これにより #13194 はクローズされました。 #21053 (alexey-milovidov). - distributed_group_by_no_merge 使用時、イニシエーターではソート済みブロックのマージだけを行うようにしました。 #20882 (Azat Khuzhin).
- mysql ソースの設定を読み込む際、ClickHouse は、mysql エンドポイントをラウンドロビンで選択するロジックが正しく機能するよう、同じ優先度のレプリカのリストをランダム化するようになりました。これにより #20629 がクローズされます。 #20632 (Alexander Kazakov).
- 関数 ‘reinterpretAs(x, Type)’ の名称が ‘reinterpret(x, Type)’ に変更されました。#20611 (Maksim Kita) 。
- RabbitMQ engine で vhost をサポート #20576。 #20596 (Kseniia Sumarokova).
- Array と Tuple を組み合わせたデータ型のシリアライゼーションを改善しました。enum データ型と protobuf の enum 型との対応付けを改善しました。
Mapデータ型のシリアライゼーションを修正しました。省略された値にはデフォルト値が設定されるようになりました。#20506 (Vitaly Baranov). - 分散DDLタスクの実行とDDLキューのクリーンアップの間で発生していた競合状態を修正しました。これにより、アクティブなワーカーが存在する場合、DDLタスクはZooKeeperから削除されなくなりました。 #20016 を修正しました。#20448 (tavplubix).
- Alpineイメージで、FQDNやその他のDNS関連関数が正しく動作するようにしました。#20336 (filimonov) 。
- 明示的に禁止された関数に対して、早期の定数畳み込みを行わないようにしました。 #20303 (Azat Khuzhin).
- 整数値が Decimal 型に収まらない場合でも、整数から Decimal 型への暗黙的な変換が成功してしまうことがありました。現在は
ARGUMENT_OUT_OF_BOUNDをスローします。 #20232 (tavplubix). - ロック不要の
SYSTEM FLUSH DISTRIBUTED。 #20215 (Azat Khuzhin). - count(constant) と sum(1) を count() に正規化しました。これは、プロジェクションのクエリルーティングに必要です。#20175 (Amos Bird) 。
- bitmap関数で、すべてのネイティブ整数型をサポート。#20171 (Amos Bird).
CacheDictionary、ComplexCacheDictionary、SSDCacheDictionary、SSDComplexKeyDictionaryが、内部索引として LRUHashMap を使用するよう更新されました。#20164 (Maksim Kita) 。- 設定
access_managementは、CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENTを指定することで起動時に構成できるようになりました。デフォルトは無効 (0) で、これは従来と同じ値です。#20139 (Marquitos). - DateTime64 向けの toDateTime64(toDate()/toDateTime()) の修正 - DateTime の挙動に合わせるため、DateTime64 のクランプ処理を実装しました。 #20131 (Azat Khuzhin).
- クォータの改善: SHOW TABLES は、クォータ計算において 2 つのクエリではなく 1 つのクエリとして扱われるようになりました。SYSTEM クエリもクォータを消費するようになりました。クォータ消費における interval の終了時点の計算を修正しました。#20106 (Vitaly Baranov).
system.zookeeperテーブルでのpath IN (set)式をサポートしました。#20105 (小路) 。system.tablesにMaterializeMySQLtable の詳細情報をすべて表示するようになりました。 #20051 (Stig Bakken).- 誤った使い方をした場合にのみ発生し得た、実行可能 Dictionary のデータ競合を修正しました (スクリプトが入力を無視してデータを返す場合) 。 #20045 (alexey-milovidov).
- MYSQL_OPT_RECONNECT オプションの値を、mysql レプリカの config セクションにある “opt_reconnect” パラメータで制御できるようになりました。#19998 (Alexander Kazakov) 。
- ユーザーが
JSONExtract関数を呼び出してFloat32型を要求した場合、結果型への不正確な変換を許可するようにしました。たとえば、JSON 内の数値0.1は倍精度であり、Float32 では表現できませんが、それでもユーザーはこれを取得したい場合があります。以前のバージョンでは、変換が不正確であることを示すため、非Nullable型には 0 を、Nullable型には NULL を返していました。このロジックは 100% 正しかったものの、ユーザーにとっては意外で、疑問を招いていました。これにより #13962 が解決されました。 #19960 (alexey-milovidov). - 一致しない場合に、分散テーブルへのINSERT向けにブロック構造を変換する処理を追加しました。#19947 (Azat Khuzhin) 。
system.distributed_ddl_queueテーブルを改善しました。再起動後、MaxDDLEntryID が最後の値で初期化されるようになりました。この PR より前は、新しい DDLTask が処理されるまで MaxDDLEntryID は 0 のままでした。#19924 (Amos Bird) 。MaterializeMySQLテーブルをsystem.partsに表示する。#19770 (Stig Bakken) 。Bufferプロファイル用に個別の設定ディレクティブを追加しました。 #19721 (Azat Khuzhin).- JOIN に関連しない条件を WHERE 句に移動します。#18720。#19685 (hexiaoting) 。
- 非同期送信の保留バイト数に応じて
Distributedへの INSERT をスロットルできるようになりました (Distributedエンジン向けにbytes_to_delay_insert/max_delay_to_insertおよびbytes_to_throw_insert設定が追加されました) 。 #19673 (Azat Khuzhin). - デストラクタ内で書き込みエラーが無視されることがある、まれなケースをいくつか修正しました。 #19451 (Azat Khuzhin).
- 致命的なエラーのスタックトレースでインラインフレームを出力します。 #19317 (Ivan).
バグ修正
- ZooKeeper への不要な再接続と、単一の ClickHouse server に対して 2 つのアクティブなセッションが存在しうる問題を修正しました。どちらの問題も #14678 で導入されました。#21264 (alesapin).
ValuesフォーマットからLowCardinalityカラムを持つテーブルへ挿入する際に発生するエラーBad cast from type ... to DB::ColumnLowCardinalityを修正しました。#21140 を修正 #21357 (Nikolai Kochetov)。- 述語にテーブル自身が含まれる場合、非レプリケートの MergeTree テーブルエンジンにおける
ALTER DELETEミューテーションのデッドロックを修正しました。#20558。#21477 (alesapin). - 障害発生時に分散クエリで発生するSIGSEGVを修正しました。 #21434 (Azat Khuzhin).
- これで、
ALTER MODIFY COLUMNクエリがパーティションキー、スキップインデックス、有効期限 (TTL) などの変更にも正しく適用されるようになりました。#13675 を修正しました。#21334 (alesapin)。 join_use_nullsと、サブクエリのTOTALSを join する際の不具合を修正しました。これにより #19362 および #21137 がクローズされます。#21248 (vdimir).EXPLAINでUNIONを含むクエリがクラッシュする不具合を修正しました。#20876、#21170 を修正。#21246 (flynn) 。- これにより、mutations は、それをサポートするテーブルエンジン (MergeTree family、Memory、MaterializedView) でのみ許可されるようになりました。その他のエンジンでは、より明確なエラーが返されます。#21168 を修正しました。#21183 (alesapin).
- #21112 を修正しました。INSERT クエリで重複が発生することがある不具合を修正しました (コールバックの 1 つの実行が少し遅れた場合) 。#21138 (Kseniia Sumarokova) 。
- 型が Nullable の場合に
input_format_null_as_defaultが有効になるよう修正しました。これにより #21116 を修正しました。 #21121 (Amos Bird). - Tuple から Map への CAST に関するバグを修正しました。#21029 をクローズします。#21120 (hexiaoting).
- カスタムの (デフォルト以外の) ZooKeeperクラスターを使用する Replicated*MergeTree をドロップした際に発生するメタデータリークを修正しました。 #21119 (fastio).
- joinGet で LowCardinality キーを使用した際の型不一致の問題を修正しました。これにより #21114 が修正されます。#21117 (Amos Bird).
- Replicated(*)MergeTree エンジンでほかのパラメータを指定する必要がある場合、default_replica_path と default_replica_name の値が無効になっていた問題を修正しました。#21060 (mxzlxy).
DateTime64型の細工された範囲外の値をフォーマットする際に、境界外メモリアクセスが発生する可能性がありました。これにより #20494 はクローズされます。これにより #20543 はクローズされます。#21023 (alexey-milovidov)。- storage join への並列挿入を禁止しました。#21009 (vdimir) 。
ALTER MODIFY COLUMNが、失敗すると分かっている mutation を作成してしまう挙動を修正しました。 #21007 (Anton Popov).- #9969 をクローズしました。大きなデータサイズで、やや複雑な構造かつ JSON 出力フォーマットの場合に発生していた Brotli HTTP 圧縮の error を修正しました。“ring-buffer 内の未初期化データへのまれなアクセスを修正” を含めるため、Brotli を最新バージョンに更新しました。#20991 (Kseniia Sumarokova).
- クエリのキャンセル時に ‘非同期タスクキューから空のタスクが返される’ 問題を修正しました。 #20881 (Azat Khuzhin).
- MySQL 5.7 client を使用して ClickHouse server に接続した際に
USE database;クエリが動作しなかった問題を修正しました。#18926。#20878 (tavplubix). - 集約関数で
-Stateコンビネータと-Distinctコンビネータを組み合わせて使用した際の不具合を修正しました。#20866 (Anton Popov) 。 - UNION DISTINCT と LIMIT 句を含むサブクエリの問題を修正しました。#20597 をクローズしました。#20610 (flynn).
- Dictionary で存在しないキーを検索するクエリにおける動作の不整合を修正しました。#20578 (Nikita Mikhaylov).
- スカラーサブクエリおよび索引用サブクエリのスレッド数を修正しました (#19007 以降は常に単一スレッドが使用されていました) 。#20457、#20512 を修正しています。#20550 (Nikolai Kochetov) 。
- remove query から不明なパケットを受信した場合に発生する可能性があったクラッシュを修正しました (この問題は #17868 で導入されました) 。#20547 (Azat Khuzhin) 。
- 非同期 INSERT のディレクトリ名をパースする際に、適切なチェックを追加しました (SIGSEGV を修正) 。 #20498 (Azat Khuzhin).
- 関数
transformが浮動小数点数のキーに対して正しく動作しない問題を修正しました。#20460 を解決しました。#20479 (flynn). - WITH 別名をサブクエリに伝播する際に発生する無限ループを修正しました。これにより #20388 が修正されます。#20476 (Amos Bird) 。
- HTTPクライアントが切断された際に発生するサーバーの異常終了を修正しました。 #20464 (Azat Khuzhin).
- JOIN に SELECT の定数が含まれる場合に、
join_use_nulls=1で発生するLOGICAL_ERRORを修正しました。#20461 (Azat Khuzhin). - 式リストでテーブル関数
viewが使用されているかどうかをチェックし、使用されている場合はエラーを返すようにしました。これにより #20342 を修正しました。#20350 (Amos Bird). - RANGE_HASHED() Dictionary での不正なデリファレンスを回避しました。 #20345 (Azat Khuzhin).
join_use_nulls=1使用時のヌル参照を修正しました。 #20344 (Azat Khuzhin).- スケールの異なる 2 つの定数 Decimal 間の二項演算で、結果が誤っていた問題を修正しました。 #20283 を修正。 #20339 (Maksim Kita).
ReplicatedMergeTreeテーブルエンジンファミリーで、失敗したバックグラウンドタスクの再試行が頻繁すぎる問題を修正しました。これにより、ログが過度に冗長になり、CPU 負荷が増加する可能性がありました。#20203 を修正しました。#20335 (alesapin).*CollapsingMergeTreeおよびReplacingMergeTreeテーブルエンジンのバージョンカラムのDROPまたはRENAMEを制限しました。#20300 (alesapin).- 不正な JSON の場合にファイル全体をメモリに読み込もうとしてしまい、その結果アロケータの例外が発生していた問題を修正しました。#19719 を修正します。#20286 (Nikita Mikhaylov) 。
- 垂直マージを実行できない
MergeTreeテーブルエンジンファミリーにおいて、垂直マージ中に発生する例外を修正しました。#20259。#20279 (alesapin)。 - シャットダウン中に設定を再読み込みすると、まれにserverがクラッシュする問題を修正しました。 #19689。 #20224 (alesapin).
- INSERT SELECTで使用する際のCTEを修正しました。これにより、#20187 および #20195 が修正されました。#20211 (Amos Bird)。
- #19314 を修正。#20156 (Ivan)。
- 特殊なタイムゾーンを正しく扱えるように
toMinute関数を修正。 #20149 (keenwolf). - then/else 分岐の結果が
Tuple型となるif関数を含むクエリの実行後に発生するサーバークラッシュを修正しました。Tuple型にはArrayまたは別の複合型が含まれている必要があります。#18356 を修正しました。#20133 (alesapin). MongoDBテーブルエンジンは、データを読み取る際にのみ接続を確立するようになりました。ATTACH TABLEでは、接続を試行しなくなりました。#20110 (Vitaly Baranov).- StorageJoin のバグ修正。 #20079 (vdimir).
- 負の数を小さな除数で割った余りを計算する際、負の結果を格納するには結果のデータ型が十分な大きさではなかったケースを修正しました。これにより #20052 をクローズします。 #20067 (alexey-milovidov).
- MaterializeMySQL: 複数のテーブルを更新するステートメントに対するレプリケーションの不具合を修正しました。 #20066 (Håvard Kvålen).
- 初期化スクリプトの実行中に、Docker で “Connection refused” が発生しないようにしました。 #20012 (filimonov).
EmbeddedRocksDBは Experimental のストレージです。適切な型チェックが行われていない問題を修正しました。コードを簡略化しました。これにより #19967 をクローズしました。#19972 (alexey-milovidov).- 引数の型が、Int32 を除く任意の整数型の
Nullable(T)である場合に関数fromModifiedJulianDayで発生するセグメンテーション違反を修正しました。#19959 (PHO). - BloomFilter 索引のクラッシュを修正しました。#19757 を解決します。#19884 (Maksim Kita).
- system.text_log が有効な場合、デッドロックが発生する可能性がありました。この問題は #19874 で修正されました。#19875 (alexey-milovidov).
- dictGet() を含むデフォルト式を持つテーブルがある場合に、server の起動に失敗する問題を修正しました。Dictionary を読み込まずに dictGet() の戻り値の型を取得できるようにしました。 #19805 (Vitaly Baranov).
selectのみ実行した際に、clickhouse-client で abort 例外が発生する問題を修正しました。#19790 (taiyang-li).- 複数の clickhouse-copier を起動した場合に、パーツの宛先テーブルへの移動が失敗することがある不具合を修正しました。 #19743 (madianjun).
ON CLUSTERクエリを実行するバックグラウンドスレッドが、削除されたレプリケートテーブルの処理待ちでハングすることがありましたが、修正されました。#19684 (yiguolei).
ビルド/テスト/パッケージングの改善
- AVX-2 をグローバルに有効化して ClickHouse をビルドできるようにしました。最新の CPU ではわずかな性能向上が見込めます。現時点では本番環境には推奨されず、公式ビルドとしてもサポートされません。#20180 (alexey-milovidov).
- Coverity で見つかったいくつかの問題を修正しました。#19964 を参照してください。#20010 (alexey-milovidov).
- gdb 上で変更したバイナリでも起動できるようにしました。以前のバージョンでは、起動前に gdb でブレークポイントを設定すると、整合性チェックに失敗してサーバーが起動を拒否していました。#21258 (alexey-milovidov).
- Kafka の異なる圧縮方式に対するテストを追加しました。#21111 (filimonov).
- test_storage_kerberized_hdfs テストで発生していたポート競合を修正しました。#19974 (Ilya Yatsishin).
- 結合テストで docker の起動に失敗した場合に、
stdoutとstderrをログに出力するようにしました。この PR 以前は、この場合のエラーメッセージが非常に短く、問題の調査に役立ちませんでした。#20631 (Vitaly Baranov).
ClickHouse リリース 21.2
ClickHouse リリース v21.2.2.8-stable, 2021-02-07
後方互換性を持たない変更
- ビット演算関数 (
bitAnd、bitOrなど) は、浮動小数点の argument では使用できなくなりました。今後は整数への明示的な CAST が必要です。#19853 (Azat Khuzhin). lcm/gcdは浮動小数点数に対して使用できなくなりました。#19532 (Azat Khuzhin).OPTIMIZE TABLE/merges のメモリ追跡を修正し、OPTIMIZE TABLE/merges に対してクエリのメモリ制限と sampling が考慮されるようにしました。#18772 (Azat Khuzhin).- 浮動小数点のカラムは partition key として使用できなくなりました。詳しくは #18421 を参照してください。#18464 (hexiaoting).
- 型定義内での過剰な括弧はサポートされなくなりました。例:
Array((UInt8)).
新機能
PostgreSQLテーブルエンジン (select/insertの両方に対応し、多次元配列をサポート) を追加し、あわせて table function も追加しました。PostgreSQLDictionary ソースを追加しました。PostgreSQLデータベースエンジンを追加しました。#18554 (Kseniia Sumarokova) 。- データ型
Nestedが、任意のレベルのネストをサポートするようになりました。Arrayのsize0、Nullableのnull、Tupleの要素名などの複合型サブカラムが導入され、カラム全体を読み込まなくても参照できるようになりました。#17310 (Anton Popov). FlatDictionary、HashedDictionary、ComplexKeyHashedDictionary、DirectDictionary、ComplexKeyDirectDictionary、RangeHashedDictionaryでNullableをサポートしました。#18236 (Maksim Kita) 。- DDLワーカーキュー内のクエリを表示する
system.distributed_ddl_queueという新しいテーブルが追加されました。#17656 (Bharat Nallan) 。 - LDAP ユーザーディレクトリ内のユーザーについて、LDAP グループ名や一般的な属性値をローカルロールにマッピングする機能を追加しました。 #17211 (Denis Glazachev).
- テーブル関数
clusterへの insert をサポートし、テーブル関数remoteおよびclusterの両方で、sharding key を指定してデータをノード間に分散できるようになりました。#16752 をクローズしました。#18264 (flynn). - XMLの文字参照をデコードする関数
decodeXMLComponentを追加しました。例:SELECT decodeXMLComponent('Hello,"world"!')#17659。#18542 (nauta) 。 - 関数
parseDateTimeBestEffortUSOrZeroとparseDateTimeBestEffortUSOrNullを追加しました。#19712 (Maksim Kita) 。 sign関数を追加しました。#19527 (flynn).- 使用された機能 (関数、テーブルエンジンなど) の情報を
system.query_logに追加しました。#18495。#19371 (Kseniia Sumarokova) 。 - 関数
formatDateTimeで、日付を四半期形式でフォーマットする%Q修飾子がサポートされました。#19224 (Jianmei Zhang). - play UI で MetaKey+Enter のホットキーのキーバインドをサポートしました。 #19012 (sundyli).
- map データ型向けに 3 つの関数が追加されました: 1.
mapContains(map, key)は、map.keys に 2 番目のパラメータである key が含まれているかどうかを確認します。 2.mapKeys(map)は、すべてのキーを Array 形式で返します 3.mapValues(map)は、すべての値を Array 形式で返します。 #18788 (hexiaoting). - #18494 に関連して
log_comment設定を追加しました。#18549 (Zijie Lu) 。 argMinおよびargMax関数で、Tuple 型の引数をサポートしました。#17359 (Ildus Kurbangaliev).EXISTS VIEW構文をサポートしました。#18552 (Du Chuan) 。SELECT ALL構文を追加しました。#18706 を修正しました。#18723 (flynn)。
パフォーマンス改善
statsyscalls の回数を減らすことで、パーツの削除を高速化しました。これは以前存在していた最適化を復活させるものです。また、IDiskのインターフェイスをより安全にしました。これにより #19065 をクローズします。#19086 (alexey-milovidov).WITHステートメントで宣言された別名が、索引解析で正しく使われるようになりました。WITH column AS alias SELECT ... WHERE alias = ...のようなクエリでも、索引を使用できるようになりました。#18896 (Amos Bird).optimize_alias_column_prediction(デフォルトで有効) を追加しました。これにより、次のことが可能になります。- パーティションプルーニングおよびセカンダリ索引によるデータスキップで、WHERE 句内の別名付きカラムを考慮します。-optimize_trivial_countの単純な count クエリで、WHERE 句内の別名付きカラムを考慮します。-optimize_aggregation_in_order/optimize_read_in_orderで、GROUP BY / ORDER BY 内の別名付きカラムを考慮します。#16995 (sundyli).- aggregate function
sumを高速化しました。この改善は合成 benchmark でのみ確認できるもので、実用面での効果はあまり大きくありません。#19216 (alexey-milovidov). - より高いパフォーマンスを実現するため、libc++ を更新し、別の ABI を使用するようにしました。#18914 (Danila Kutenin).
- 論理的に等価な場合、
sumIf()およびsum(if())関数をcountIf()関数に書き換えるようにしました。#17041 (flynn). s3_max_connections設定で制御される、S3 接続用の接続プールを使用するようにしました。#13405 (Vladimir Chebotarev).- 容量を節約するため、文字列カラムをより高効率に圧縮できる zstd long オプションのサポートを追加しました。#17184 (ygrek).
- 接続のたびに設定へアクセスしないようにすることで、サーバーのレイテンシをわずかに改善しました。#19863 (alexey-milovidov).
Bufferengine の複数レイヤーにおけるロック競合を低減しました。#19379 (Azat Khuzhin).- クエリプランの
Filterstep をExpression + Filterのペアに分割できるようにしました。Expression + Expressionのマージ最適化 (#17458) と組み合わせることで、一部の expression では実行をFilterstep の後まで遅らせられる可能性があります。#19253 (Nikolai Kochetov).
改善
SELECT count() FROM tableは、tableからいずれか1つのカラムしか選択できない場合でも実行できるようになりました。この PR で #10639 を修正しました。#18233 (Vitaly Baranov).- リモートのMySQLサーバーとやり取りする際の文字セットを
utf8mb4に設定するようにしました。#19795 を修正しました。#19800 (alexey-milovidov) 。 S3テーブル関数でauto圧縮モード (自動検出) がサポートされるようになりました。これにより #18754 はクローズされました。#19793 (Vladimir Chebotarev).formatReadableTimeDelta関数で、無限大の引数を正しく出力するようにしました。以前のバージョンでは、実装固有の整数値に暗黙的に変換されていました。#19791 (alexey-milovidov).- テーブル関数
S3は、リージョンを正確に判別できない場合、グローバルリージョンを使用するようになりました。これにより #10998 が修正されました。#19750 (Vladimir Chebotarev). - 分散クエリで設定
async_socket_for_remoteが有効な場合、テーブルで非常に深くネストされたデータ型 (例:Array(Array(Array(...more...)))) を使用すると、少なくとも debug ビルド構成ではスタックオーバーフローが発生する可能性がありました。これにより #19108 を修正しました。この変更には軽微な後方非互換性があります。型定義内の余分な括弧はサポートされなくなりました。例:Array((UInt8))。#19736 (alexey-milovidov). - メッセージブローカー (RabbitMQ および Kafka) 用に専用のプールを追加しました。#19722 (Azat Khuzhin) 。
- 非レプリケートの MergeTree で、まれに
max_number_of_merges_with_ttl_in_poolの上限を超過し (有効期限 (TTL) 付きのマージをより多く割り当てられてしまう) 問題を修正しました。#19708 (alesapin). - Dictionary: 属性のパース時に表示されるエラーメッセージを改善。 #19678 (Maksim Kita).
- 読み取り時のチェックサム検証を無効化するオプションを追加しました。本番環境では決して使用しないでください。無効化してもメリットは期待しないでください。利用は実験およびベンチマークに限るべきです。この設定は MergeTree family のテーブルにのみ適用されます。その他のテーブルエンジンや、ネットワーク経由でデータを受信する場合は、チェックサムは常に検証されます。私の観測では、性能差はないか、あっても 0.5% 未満です。#19588 (alexey-milovidov).
- 関数
multiIfで定数結果をサポートしました。#19533 (Maksim Kita). - データ型 Map で
length/empty/notEmpty関数を有効にし、Map 内のキーの数を返せるようにしました。#19530 (taiyang-li). clickhouse-benchmarkに--reconnectオプションを追加しました。このオプションを指定すると、各リクエストの前に再接続するようになります。これはテストに必要です。 #19872 (alexey-milovidov)..debugファイルの新しい配置場所に対応しました。これにより、#19348 が修正されました。#19520 (Amos Bird)。toIPv6関数でIPv4アドレスを解析できるようになりました。#19518 (Bharat Nallan) 。http_refererフィールドをsystem.query_log、system.processesなどに追加しました。これにより #19389 をクローズします。#19390 (alexey-milovidov).- より多くの関数で大文字・小文字を区別しないようにするとともに、別名を追加して、MySQL との互換性を向上させました。#19387 (Daniil Kondratyev) 。
- MergeTree パーツ (Wide/Compact/InMemory) の種類ごとのメトリクスを追加しました。#19381 (Azat Khuzhin) 。
- 任意のUIDでDockerを実行できるようにしました。 #19374 (filimonov).
IPv4データ型の値が Pretty フォーマットで誤って配置されていた問題を修正しました。従来は左寄せではなく右寄せになっていました。これにより #19184 がクローズされます。#19339 (alexey-milovidov)。- 再起動せずに
max_server_memory_usageを変更できるようになりました。これにより #18154 がクローズされます。#19186 (alexey-milovidov). - 以前のバージョンでは、関数
barを特定の NaN 引数で呼び出した際に発生する例外メッセージが、やや誤解を招くものでした。これにより #19088 が修正されます。#19107 (alexey-milovidov). - clickhouse-server イメージにおいて、clickhouse ユーザー/グループの uid / gid を固定値 (101) に明示的に設定しました。#19096 (filimonov) 。
- 巨大な文字列を含むデータの挿入時に発生していた
PeekableReadBuffer: Memory limit exceedエラーを修正しました。#18690 を修正。#18979 (tavplubix). - Dockerイメージ: clickhouse-server のエントリポイントをいくつか改善。#18954 (filimonov).
- 長い名前を
?でマスクすることなくクエリを正規化できるように、normalizeQueryKeepNamesとnormalizedQueryHashKeepNamesを追加しました。これにより、複雑なクエリログをより適切に分析できるようになります。#18910 (Amos Bird). - 送信前に送信側で分散Batchのblockごとのチェックサムを確認するようにしました (ファイルを2回読み込まなくても、読み込み中にチェックサムが検証されます) 。これにより、受信側でINSERTが停止する問題を回避できます (送信側の .bin ファイルが切り詰められている場合) 。また、Batch化されたINSERTで .bin ファイルを2回読み込むのを避けます (これまでは、まとめることを考慮して行数/バイト数を計算するために必要でしたが、現在はこの情報がheaderに含まれており、後方互換性も維持されています) 。 #18853 (Azat Khuzhin).
- 集約関数の state を持つテーブルに対する RIGHT JOIN および FULL JOIN の問題を修正しました。以前のバージョンでは、
cloneResizedメソッドに関する例外が発生していました。#18818 (templarzq). - プレフィックスに基づくS3エンドポイント設定を追加しました。#18812 (Vladimir Chebotarev) 。
- bitmapTransform、bitmapSubsetInRange、bitmapSubsetLimit、bitmapContains 関数で [UInt8, UInt16, UInt32, UInt64] 型の引数をサポートしました。これにより #18713 がクローズされました。#18791 (sundyli).
- CTE (共通テーブル式) にさらにエイリアスを付けられるようになりました。
enable_global_with_statement = 1の場合、同じレベルのサブクエリにも CSE (共通部分式の除去) が伝播されます。これにより #17378 が修正されます。これにより https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235 も修正されます。 #18684 (Amos Bird) 。 - librdkafka を v1.6.0-RC2 に更新。#18668 を修正。#18671 (filimonov) 。
- 予期しない例外が発生した場合に、distributed DDLクエリの実行を担当するバックグラウンドスレッドを自動的に再起動するようにしました。#17991 を修正しました。#18285 (徐炘)。
- S3でグローバルリージョンを利用できるよう、AWS C++ SDKを更新しました。#17870 (Vladimir Chebotarev) 。
LIVE VIEWテーブルの作成時に、WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec]句をサポートしました。 #14822 (vzakaznikov).- 古い構文で作成された
MergeTreeテーブルに対するMODIFY TTLクエリを制限しました。以前はこのクエリは成功していましたが、実際には何の効果もありませんでした。#19064 (Anton Popov).
バグ修正
- 定数引数を持つ二項関数の索引解析を修正し、誤ったクエリ結果を招く不具合を解消しました。これにより #18364 を修正しました。 #18373 (Amos Bird).
- dictGet() を含むデフォルト式を持つテーブルがある場合にサーバーを起動できない問題を修正しました。Dictionary をロードせずに dictGet() の戻り値の型を取得できるようにしました。 #19805 (Vitaly Baranov).
Tuple型の then/else 分岐の結果を持つif関数を含むクエリの実行後に発生するサーバークラッシュを修正しました。Tuple型にはArrayまたは別の複合型が含まれている必要があります。#18356 を修正しました。#20133 (alesapin).MaterializeMySQL(実験的機能) : 複数のテーブルを更新するステートメントでのレプリケーションを修正しました。#20066 (Håvard Kvålen) 。- 初期化スクリプトの実行中に Docker で “Connection refused” が発生しないよう修正しました。 #20012 (filimonov).
EmbeddedRocksDBはExperimentalなストレージです。適切な型チェックが行われていなかった問題を修正しました。コードを簡素化しました。これにより #19967 をクローズします。#19972 (alexey-milovidov).- 引数の型が Int32 以外の任意の整数型の
Nullable(T)の場合に、関数fromModifiedJulianDayで発生していたセグメンテーション違反を修正しました。#19959 (PHO). - 関数
greatCircleAngleは、以前のバージョンでは不正確な結果を返していました。これにより、#19769 が修正されました。#19789 (alexey-milovidov). - データ破損後に、一部のレプリケートされた操作 (mutation など) が一部のパーツを処理できなくなるまれなバグを修正しました。#19593 を修正します。#19702 (alesapin) 。
ON CLUSTERクエリを実行するバックグラウンドスレッドが、削除されたレプリケートテーブルの応答待ちでハングすることがありました。修正しました。 #19684 (yiguolei).- カラム記述のデシリアライゼーションの不具合を修正しました。これにより、
\という名前のカラムを持つテーブルに INSERT できなくなっていました。 #19479 (alexey-milovidov). - いずれかのファイルに空の data block がある場合、distributed batch を破損扱いにするようにしました。#19449 (Azat Khuzhin) 。
DROP/DETACH/REPLACE/MOVE PARTITIONの後にミューテーションがハングする可能性がある、非常にまれなバグを修正しました。この問題は、ほとんどのケースで #15537 により部分的に修正されていました。#19443 (tavplubix) 。- エラー
Extremes transform was already added to pipelineが発生する可能性がある問題を修正しました。#14100 を修正しました。#19430 (Nikolai Kochetov) 。 - デフォルト値がゼロ以外の join types (例: 一部の Enum) におけるデフォルト値を修正しました。#18197 をクローズしました。#19360 (vdimir) 。
- EOF時に distributed send 用の mark file を破損としてマークしないようにしました。#19290 (Azat Khuzhin).
async_socket_for_remoteにおける pipe fd のリークを修正しました。#19153 (Azat Khuzhin).- ファイルを
ORCフォーマットで読み取る際に無限に読み込み続ける問題を修正 (#10580で導入) 。#19095を修正。#19134 (Nikolai Kochetov) 。 - fixed granularity size を超えるサイズの mark が生成される可能性がある MergeTree data writer の問題を修正しました。#18913 を修正しました。#19123 (alesapin).
- ClickHouse が
LowCardinality(Nullable(...))から圧縮コーデックを読み取れず、例外Attempt to read after EOFが発生する起動時のバグを修正しました。#18340 を修正しました。#19101 (alesapin). tupleHammingDistanceの実装を簡素化しました。同じ長さの任意のタプルをサポートするようにしました。#19029 を修正しました。#19084 (Nikolai Kochetov).groupUniqArrayが Enum 型の引数に対して正しい型を返すように修正しました。これにより #17875 をクローズします。#19019 (alexey-milovidov).LowCardinality引数で関数ignoreを使用した際に発生する可能性のあるエラーExpected single dictionary argument for functionを修正しました。 #14275。 #19016 (Nikolai Kochetov)。TinyLogエンジンのテーブルへのLowCardinalityカラムの挿入に関する不具合を修正しました。#18629。#19010 (Nikolai Kochetov) 。- JOIN の軽微な問題を修正しました。Join は const カラムをマテリアライズしようとしますが、コードの他の箇所ではそれらがそのままであることを前提としています。 #18982 (Nikita Mikhaylov).
optimize_move_functions_out_of_anyは、最適化が常に正しいとは限らないため無効化しました。これにより #18051 をクローズしました。これにより #18973 をクローズしました。#18981 (alexey-milovidov).- クエリプランの
Expressionステップのマージによって発生する可能性がある例外QueryPipeline stream: different number of columnsを修正しました。#18190 を修正します。 #18980 (Nikolai Kochetov). - シャットダウン時にごくまれに発生するデッドロックを修正しました。#18977 (tavplubix).
- server がメモリ不足になった際にまれに発生していたクラッシュを修正しました。 #18976 (tavplubix).
ALTER TABLE ... DROP PART 'part_name'クエリで、パーティション全体のすべての重複排除ブロックが削除されてしまう不具合を修正しました。#18874。#18969 (alesapin)。- 問題 #18894 を修正しました。長いカラム別名 (
table.column形式で、通常は Looker のような BI ツールによって自動生成されます) が長いテーブル名と一致する場合に例外が発生しないよう、チェックを追加しました。#18968 (Daniel Qin) 。 - エラー
Task was not found in task queueを修正 (async_socket_for_remote = 1の場合にのみ、リモートクエリで発生する可能性があります) 。#18964 (Nikolai Kochetov). - 一部のエスケープされたテキスト (
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')など) を含むmutationが誤ってシリアライズされる不具合を修正しました。#18878 の修正です。#18944 (alesapin) 。 - ATTACH PARTITION を実行すると、mutations がリセットされます。 #18804。 #18935 (fastio)。
bitmapOrCardinalityで、nullptr の逆参照につながる可能性がある問題を修正しました。これにより #18911 をクローズします。#18912 (sundyli).Nullable(String)からNullable(Decimal(P, S))へNULLをCASTしようとした際に発生していたAttempt to read after eoferror を修正しました。これにより、nullable string から decimal を parse できない場合、関数CASTはNULLを返すようになりました。#7690 を修正。 #18718 (Winter Zhang).- MySQLエンジンのデータ型の変換に関する問題を修正しました。#18124 (bo zeng).
selectのみを実行した際にclickhouse-clientで abort 例外が発生する問題を修正しました。#19790 (taiyang-li).
ビルド/テスト/パッケージングの改善
- CI で SQLancer (論理 SQL fuzzer) を実行するようにしました。#19006 (Ilya Yatsishin).
- Query Fuzzer が新たに追加されたテストをより徹底的に fuzz するようになりました。これにより #18916 をクローズします。#19185 (alexey-milovidov).
- fuzzing を改善するため、Big List of Naughty Strings を統合しました。#19480 (alexey-milovidov).
- MSan で実行する結合テストを追加しました。#18974 (alesapin).
- cyrus-sasl と musl における MemorySanitizer エラーを修正しました。#19821 (Ilya Yatsishin).
positionCaseInsensitiveUTF8関数での引数チェック不足により、address sanitizer がトリガーされていました。#19720 (alexey-milovidov).- 結合テストで docker-compose の —project-directory を削除しました。Docker コンテナーからのログのフォーマットも修正しました。#19706 (Ilya Yatsishin).
- 結合テスト向けの macros.xml の生成を簡単にしました。dicttoxml からの過剰なロギングもなくなりました。dicttoxml プロジェクトは 5 年以上更新されていません。#19697 (Ilya Yatsishin).
- 環境変数
CLICKHOUSE_WATCHDOG_ENABLEで watchdog を明示的に有効化または無効化できるようにしました。デフォルトでは、server がターミナルに接続されていない場合に有効です。#19522 (alexey-milovidov). - arm64 で Kafka サポート付きの ClickHouse をビルドできるようにしました。#19369 (filimonov).
- SSL なしで librdkafka をビルドできるようにしました。#19337 (filimonov).
- FreeBSD ビルドで Kafka 入力を復元しました。#18924 (Alexandre Snarskii).
- table function
VALUESにおける潜在的な nullptr の逆参照を修正しました。#19357 (alexey-milovidov). arrayElement関数、substring、arraySumでの UBSan レポートを回避しました。#19305 を修正。#19287 を修正。これにより #19336 をクローズします。#19347 (alexey-milovidov).
ClickHouse リリース 21.1
ClickHouse リリース v21.1.3.32-stable、2021-02-03
バグ修正
- BloomFilter 索引のクラッシュを修正しました。#19757。#19884 (Maksim Kita) 。
- UNION DISTINCT サブクエリへの predicate プッシュダウン時に発生するクラッシュを修正しました。これにより #19855 が修正されます。#19861 (Amos Bird).
- UInt8 が 127 より大きい値に対するフィルタリングを修正しました。#19799 (Anton Popov) 。
- 以前のバージョンでは、関数
arrayEnumerateUniqに異常な引数を渡すと、クラッシュまたは無限ループが発生する可能性がありました。これにより、#19787 が修正されました。#19788 (alexey-milovidov) 。 - 算術型と文字列型を正確に比較した際に発生するスタックオーバーフローを修正しました。#19773 (tavplubix) 。
- ネストされたカラム名が
WHEREまたはPREWHEREで使用された場合にクラッシュする不具合を修正しました。#19755 を修正。#19763 (Nikolai Kochetov) 。 bitmapAndnot関数のセグメンテーションフォールトを修正しました。#19668 の修正です。#19713 (Maksim Kita).- 一部の関数では、大きな整数を扱うとセグメンテーションフォルトが発生する場合があります。大きな整数のサポートは実験的機能です。これにより #19667 がクローズされます。 #19672 (alexey-milovidov)。
LowCardinality引数に対する関数neighborの誤った結果を修正しました。#10333 を修正。#19617 (Nikolai Kochetov)。- disconnect 後の Connection で CompressedWriteBuffer の解放済みメモリが使用される問題を修正しました。 #19599 (Azat Khuzhin).
DROP/DETACH TABLE table ON CLUSTER cluster SYNCクエリがハングすることがある問題を修正しました。#19568。#19572 (tavplubix).- クエリの CREATE DICTIONARY における id 式を修正しました。#19571 (Maksim Kita).
- merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX のときに発生する SIGSEGV を修正しました。#19528 (Azat Khuzhin) 。
addMonth関数が細工された特定の引数で呼び出された場合、バッファオーバーフロー (メモリ読み取り時) が発生する可能性がありました。これにより #19441 が修正されました。これにより #19413 が修正されました。#19472 (alexey-milovidov)。- IV として空文字列が渡された場合、encrypt/decrypt 関数で未初期化メモリの読み取りが発生する可能性がありました。これにより #19391 が解決されました。#19397 (alexey-milovidov).
- Uber H3 ライブラリにおけるバッファオーバーフローの可能性を修正しました。詳しくは https://github.com/uber/h3/issues/392 を参照してください。これにより #19219 をクローズします。#19383 (alexey-milovidov).
- system.parts _state カラムを修正 (順序が誤っていたため、このカラムをクエリすると LOGICAL_ERROR が発生) 。#19346 (Azat Khuzhin) 。
- materialized view とそのターゲットテーブルの構造が異なる場合に、aggregation 時に誤った結果や segfault が発生する可能性があった問題を修正しました。 #18063 を修正。 #19322 (tavplubix).
- エラー
Cannot convert column now64() because it is constant but values of constants are different in source and resultを修正。#7156 の続き。#19316 (Nikolai Kochetov). - ReplicatedMergeTree テーブルの処理中に、同時実行された
ALTERおよびDROPクエリがハングすることがある不具合を修正しました。 #19237 (alesapin). TemplateまたはCustomSeparatedフォーマットを使用して HTTPインターフェイス経由でデータを挿入する際に発生していたThere is no checkpointエラーを修正しました。#19021. #19072 (tavplubix).- 結果を計算できない場合、解析段階でのサブクエリに対する定数畳み込みを無効化しました。#18446 (Azat Khuzhin).
MOVEまたはREPLACE PARTITIONの後、あるいはまれにDETACHまたはDROP PARTITIONの後に、存在しない part を待ち続けて Mutation がハングすることがありました。これは修正されました。 #15537 (tavplubix).
ClickHouse リリース v21.1.2.15-stable 2021-01-18
後方互換性を持たない変更
- 設定
input_format_null_as_defaultがデフォルトで有効になりました。#17525 (alexey-milovidov). - config 内の profile 設定に対して settings の制約をチェックするようになりました。users.xml に対応する制約を満たさない設定が含まれている場合、server は起動に失敗します。#18486 (tavplubix).
- データパーツに影響するストレージ設定 (
write_final_markおよびenable_mixed_granularity_parts) を変更するALTER MODIFY SETTINGを禁止しました。#18306 (Amos Bird). insert_quorum_parallelのデフォルト値を 1 にしました。これは “sequential” な quorum inserts よりも大幅に使いやすいためです。ただし、逐次整合性に依存している場合は、この設定を 0 に戻す必要があります。#17567 (alexey-milovidov).sumburConsistentHash関数を削除しました。これにより #18120 はクローズされます。#18656 (alexey-milovidov).- 集約関数
timeSeriesGroupSum、timeSeriesGroupRateSumを削除しました。知人いわく、これらは一度も正常に動作していなかったためです。これにより #16869 を修正します。もしこれらの関数を問題なく使えていた場合は、feedback@clickhouse.com までメールでお知らせください。#17423 (alexey-milovidov). toUnixTimestamp(Date())を禁止しました (以前は単に Date の UInt16 表現を返していました) 。#17376 (Azat Khuzhin).avgおよびavgWeighted関数で拡張整数型 (Int128、Int256、UInt256) を使用できるようにしました。また、avgWeighted関数では値と重みに異なる型 (整数、Decimal、浮動小数点) を使用できるようにしました。これは後方互換性を持たない変更です。avgおよびavgWeighted関数は、今後は常にFloat64を返します (ドキュメントどおり) 。この変更以前は、Decimal引数に対する戻り値の型もDecimalでした。#15419 (Mike).- 式
toUUID(N)は動作しなくなりました。代わりにtoUUID('00000000-0000-0000-0000-000000000000')を使用してください。この変更は、N が 0 以外の場合のtoUUID(N)の結果が分かりにくいためです。 - “key usage” が正しくない SSL 証明書は拒否されるようになりました。以前のバージョンでは使用できていました。#19262 を参照してください。
- substitutions file (
/etc/metrika.xml) へのincl参照が、デフォルト設定 (<remote_servers>、<zookeeper>、<macros>、<compression>、<networks>) から削除されました。substitutions file を使用していて、これらの暗黙的な参照に依存していた場合は、更新前に、対応するセクションをincl="..."属性付きで追加し、手動で明示的に元に戻す必要があります。#18740 (alexey-milovidov).
新機能
- ClickHouseで gRPC プロトコルを実装。 #15111 (Vitaly Baranov).
- 複数のZooKeeperクラスターを使用できるようになりました。 #17070 (fastio).
REPLACE TABLEおよびCREATE OR REPLACE TABLEクエリに対応しました。#18521 (tavplubix) 。UNION DISTINCTを実装し、通常のUNION句はデフォルトでUNION DISTINCTとして扱うようにしました。さらに、これをUNION ALLとして扱う、またはモードの明示的な指定を必須にできる設定union_default_modeを追加しました。 #16338 (flynn).- 関数
accurateCastOrNullを追加しました。これにより #10290 が解決されました。x IN (subquery)式での型変換を追加しました。これにより #10266 が解決されました。#16724 (Maksim Kita). - IP Dictionary で
IPv4/IPv6型が直接サポートされるようになりました。#17571 (vdimir) 。 - IP Dictionary がキーのフェッチをサポートしました。#18241 を解決しました。#18480 (vdimir)。
- データのインポートおよびエクスポート向けに、
*.zstの圧縮/伸張のサポートを追加しました。これにより、file()関数で*.zstを使用できるほか、HTTP クライアントでContent-encoding: zstdも利用できます。これにより #16791 をクローズします。#17144 (Abi Palagashvili). mannWitneyUTest、studentTTest、welchTTestの集約関数を追加しました。rankCorrを少しリファクタリングしました。#16883 (Nikita Mikhaylov) 。- 関数
countMatches/countMatchesCaseInsensitiveを追加。 #17459 (Azat Khuzhin). countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8()を実装しました (部分文字列の出現数を数えます) 。#17347 (Azat Khuzhin) 。- system.query_log に、使用されているデータベース、テーブル、カラムの情報を追加しました。
query_kindおよびnormalized_query_hashフィールドを追加しました。#17726 (Amos Bird). - 設定
optimize_on_insertを追加しました。有効にすると、INSERT されたデータブロックに対して、そのブロックで merge が実行された場合と同じ変換を行います (例: Replacing、折りたたみ、Aggregating…) 。この設定はデフォルトで有効です。これにより、materialized view および MaterializeMySQL の動作に影響する可能性があります (詳細な説明を参照) 。これにより #10683 がクローズされます。#16954 (Kruglov Pavel). - HDFS 向けの Kerberos 認証。 #16621 (Ilya Golshtein).
- system.settings のパラメータを表示する
SHOW SETTINGSステートメントに対応しました。SHOW CHANGED SETTINGSおよびLIKE/ILIKE句にも対応しています。#18056 (Jianmei Zhang). - 関数
positionで、SQL 互換性のためにPOSITION(needle IN haystack)構文がサポートされるようになりました。これにより #18701 が解決されます。 … #18779 (Jianmei Zhang). - MergeTree familyのテーブル向けに、新しいストレージ設定
max_partitions_to_readが追加されました。これにより、1つのクエリでアクセスできるパーティションの最大数が制限されます。この制約を適用するためのユーザー設定force_max_partition_limitも追加されました。#18712 (Amos Bird) 。 - 挿入されたパーツ向けに、
system.part_logにquery_idカラムを追加しました。#10097 をクローズしました。#18644 (flynn). - カラム指定付きの CREATE TABLE AS SELECT を許可しました。例:
CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;。#18060 (Maksim Kita). arrayMin、arrayMax、arrayAvgの集約関数が追加されました。#18032 (Maksim Kita).ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ...クエリを実装しました。指定した構造を持つ新しいテーブルを作成し、user_files内の指定したディレクトリからテーブルデータをアタッチします。#17903 (tavplubix).- StorageMemory で mutation をサポートしました。これにより #9117 がクローズされます。#15127 (flynn).
EXISTS DATABASE name構文のサポートを追加しました。#18458 (Du Chuan) 。- MySQL と同様に、組み込み関数
isIPv4String&&isIPv6Stringをサポートしました。#18349 (Du Chuan) 。 - 新しい設定
insert_distributed_one_random_shard = 1を追加し、分散キーがなくても複数の分片を持つ分散テーブルに挿入できるようにしました。 #18294 (Amos Bird). - MergeTreeSettings に
min_compress_block_sizeおよびmax_compress_block_size設定を追加しました。これらはグローバル設定よりも優先して適用され、設定されている場合に有効になります。close 13890。#17867 (flynn) 。 - 64ビットのroaring bitmapをサポートしました。#17858 (Andy Yang) 。
- 重複判定の対象となるカラムを、明示的に (またはアスタリスク/カラム変換子によって暗黙的に) 一覧指定できるよう、
OPTIMIZE ... DEDUPLICATE構文を拡張しました。… #17846 (Vasily Nemkov). - 関数
toModifiedJulianDay、fromModifiedJulianDay、toModifiedJulianDayOrNull、およびfromModifiedJulianDayOrNullを追加しました。これらの関数は、プロレプティック・グレゴリオ暦の日付と修正ユリウス日数の間で変換を行います。#17750 (PHO). - カスタム TLD リストを使用する機能を追加しました。関数
firstSignificantSubdomainCustomとcutToFirstSignificantSubdomainCustomを追加しました。#17748 (Azat Khuzhin). PROXYv1プロトコルのサポートを追加し、ネイティブ TCP インターフェイスをラップできるようにしました。クォータを、プロキシ経由で転送された IP アドレスをキーに設定できるようになりました (PROXYv1のアドレス、および HTTP インターフェイスのX-Forwarded-Forに適用) 。これは、信頼できるプロキシ (たとえば CloudFlare) 経由でのみ ClickHouse へのアクセスを提供しつつ、ユーザーのリソース使用量を元の IP アドレス単位で集計したい場合に便利です。これにより #17268 を修正しました。#17707 (alexey-milovidov).- clickhouse-client で
EDITORを開いてコマンドを編集できるようになりました。Alt-Shift-E。 #17665 (Amos Bird). - 文字列を XML のテキストノードまたは属性に埋め込めるよう、文字をエスケープする関数
encodeXMLComponentを追加しました。#17659 (nauta) 。 DETACH TABLE/VIEW ... PERMANENTLY構文を導入し、再起動してもテーブルが自動的に再表示されないようにしました (明示的に要求した場合のみ再度表示されます) 。テーブルは引き続き、短縮構文の ATTACH TABLE を使って再度アタッチできます。#5555 を実装。#13850 を修正。#17642 (filimonov)。- MergeTree テーブル内の行数、バイト数、パーツ総数に関する非同期メトリクスを追加しました。これにより #11714 の問題を修正しました。#17639 (flynn).
- SQL外のページネーション用に設定
limitとoffsetを追加: #16176 これらは API の構築に役立ちます。これら 2 つの設定は、select * from (your_original_select_query) t limit xxx offset xxx;を追加した場合と同様に、SELECT クエリに影響します。 #17633 (hexiaoting). -SimpleStateという新しい集約関数コンビネータを追加し、クエリ経由でSimpleAggregateFunction型を構築できるようにしました。これは AggregatingMergeTree エンジンのマテリアライズドビューを定義する際に有用で、プロジェクションにも役立ちます。#16853 (Amos Bird).clickhouse-clientとclickhouse-localにqueries-fileパラメータが追加されました。#15930 (Maksim Kita).clickhouse-benchmarkにqueryパラメーターが追加されました。#17832 (Maksim Kita).EXPLAIN ASTがSELECT以外のクエリもサポートするようになりました。 #18136 (taiyang-li).
実験的機能
- テキストのN-gramおよびシングルの minHash と simHash を計算する関数を追加しました。これらは準重複検索を目的としています。あわせて、
bitHammingDistance関数とtupleHammingDistance関数も追加しました。#7649 (flynn). - 新しいデータ型
Mapを追加しました。#1841 を参照してください。Map の最初のバージョンでは、キーと値の型としてStringのみをサポートします。#15806 (hexiaoting). - ANTLR4 ランタイムをベースとし、EBNF 文法から生成された代替 SQL パーサーを実装しました。#11298 (Ivan).
パフォーマンス改善
- メモリ使用量を抑えた新しい IP Dictionary 実装が追加され、一部のケースでパフォーマンスが向上し、不具合も修正されました。#16804 (vdimir).
- データエクスポート向けのフォーマットの並列化。 #11617 (Nikita Mikhaylov).
- LDAPインテグレーション: LDAPサーバー接続の設定に
verification_cooldownパラメーターを追加し、成功した “bind” 試行を設定可能な期間キャッシュできるようにしました。#15988 (Denis Glazachev). - システムテーブルを使わずに
clickhouse-localを実行できるよう、--no-system-tableオプションを追加しました。これにより、起動時に無視できない時間 (数十ミリ秒) を要することがあるDateLUTの初期化を回避できます。#18899 (alexey-milovidov). windowFunnel関数のパフォーマンスを向上させるため、AggregateFunctionWindowFunnelData内のPODArrayをPODArrayWithStackMemoryに置き換えました。 #18817 (flynn).- Distributed テーブルへの同期 INSERT 時に、空のブロックを分片に送信しないようにしました。これにより #14571 をクローズしました。#18775 (alexey-milovidov)。
- StorageMemory の読み取りを最適化。#18052 (Maksim Kita).
- 浮動小数点数から文字列への変換に、
ryuではなく Dragonbox アルゴリズムを使用するようになりました。これにより、浮動小数点数から文字列への変換の性能が大幅に向上しました。#17831 (Maksim Kita) 。 IPv6CIDRToRangeの実装を高速化。#17569 (vdimir).remerge_sort_lowered_memory_bytes_ratio設定を追加しました (remerge 後のメモリ使用量がこの比率まで減少しない場合、remerge は無効化されます) 。 #17539 (Azat Khuzhin).- PK 内で SimpleAggregateFunction(String) を使用する AggregatingMergeTree の性能を改善しました。 #17109 (Azat Khuzhin).
-Ifcombinator はデバーチャライズされ、countは正しくベクトル化されました。これはこの PRによるものです。#17043 (Amos Bird) 。- 大量の
MergeTreeテーブルにまたがるMergeテーブルからの読み取り性能を改善しました。#7748を修正しました。#16988 (Anton Popov) 。 - 関数
repeatのパフォーマンスが向上しました。 #16937 (satanson). - 浮動小数点のパース性能をわずかに改善しました。 #16809 (Maksim Kita).
OPTIMIZE TABLE ... FINALで、マージ済みのパーティションをスキップする機能を追加しました。#15939 (Kruglov Pavel) 。- 浮動小数点数をパースするために、Daniel Lemire による fast_floatを統合しました。#16787 (Maksim Kita) 。ただし、ClickHouse の簡易浮動小数点パーサーと比べると依然として性能が劣るため、有効にはなっていません。
- max_distributed_connections の不具合を修正 (
prefer_localhost_replica = 1およびmax_threads != max_distributed_connectionsに影響) 。#17848 (Azat Khuzhin) 。 - S3 へのデータ送信時に、シングルパートアップロードとマルチパートアップロードを適応的に選択するようになりました。シングルパートアップロードは、新しい設定
max_single_part_upload_sizeで制御されます。 #17934 (Pavel Kovalenko). PipelineExecutorで非同期タスクをサポート。リモートクエリ向けの非同期ソケットを初期サポート。#17868 (Nikolai Kochetov).- カラムのサイズが不明な場合でも、compact パーツで
optimize_move_to_prewhere最適化を利用できるようになりました。 #17330 (Anton Popov).
改善
TinyLogまたはLogテーブルエンジンを使用するテーブルに対し、そのテーブル自身を対象とする INSERT SELECT の実行時に発生するデッドロックを回避します。これにより #6802 をクローズします。これにより #18691 をクローズします。これにより #16812 をクローズします。これにより #14570 をクローズします。 #15260 (alexey-milovidov).- MySQLと同様に
SHOW CREATE VIEW name構文をサポートしました。#18095 (Du Chuan) 。 Decimal * Float型のすべてのクエリ、またはその逆の組み合わせのクエリが許可されるようになりました。これには集約クエリも含まれます (例:SELECT sum(decimal_field * 1.1)またはSELECT dec_col * float_col) 。結果の型は Float32 または Float64 です。#18145 (Mike).- 最小限の Web UI を改善: 履歴を追加し、共有に対応し、異なるリクエスト間での競合状態を回避し、リクエストの処理中および準備完了のインジケーターを追加し、favicon を追加し、
textareaにフォーカスがない場合の Ctrl+Enter を検出するようにしました。 #17293 #17770 (alexey-milovidov). - clickhouse-server が ZooKeeper サーバーに
closeリクエストを送信していなかった。#16837 (alesapin) 。 - メモリ制限が低すぎる場合 (
max_memory_usage = 1/max_untracked_memory = 1) に、サーバーが異常終了しないようにしました。#17453 (Azat Khuzhin) 。 - 異なるイベントで timestamp が同一の場合に、
windowFunnel関数が非決定論的な結果を返す問題を修正しました。#18884 (Fuwang Hu). - Docker: clickhouse-server の Docker イメージで、clickhouse ユーザーとグループの uid / gid を固定値 (101) に明示的に設定しました。 #19096 (filimonov).
Distributedテーブルへの非同期 INSERT: 2 つの新しい設定 (MergeTree family と同様) が追加されました: -fsync_after_insert- 挿入のたびに fsync を実行します。INSERT のパフォーマンスは低下します。 -fsync_directories- すべての操作 (書き込み、リネームなど) の後、一時ディレクトリ (非同期 INSERT でのみ使用) に対して fsync を実行します。 #18864 (Azat Khuzhin).SYSTEM KILLコマンドが Docker でも動作するようになりました。これにより #18847 がクローズされました。#18848 (alexey-milovidov).FETCH PARTITIONの実行時に zk パス内のマクロが展開されるようになりました。#18839 (fastio).- すべてのレプリカに
ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ...を適用します。これは、この種の ALTER コマンドはレプリケートされないためです。#18789 (Amos Bird). - カラム変換子
EXCEPTが、文字列を正規表現マッチャーとして受け付けるようにしました。これにより #18685 が解決されます。 #18699 (Amos Bird). - SummingMergeTree における SimpleAggregateFunction を修正しました。これで AggregateFunction と同様に動作するようになりました。以前のバージョンでは、集約関数に関係なく値が合計されていました。これにより #18564 が修正されます。#8052。#18637 (Amos Bird) 。
SummingMergeTreeでSimpleAggregateFunctionを使用する際の別の修正です。これにより #18676 が修正されます。#18677 (Amos Bird) 。 - 関数 bar の最後の引数が NaN の場合にアロケータ内部で発生していた assertion error を修正しました。これにより、通常の ClickHouse の例外がスローされるようになりました。これで #17876 が修正されます。#18520 (Nikita Mikhaylov).
- ユーザビリティの問題を修正: 一部のツールで、例外メッセージの後に改行が入らない問題を修正。 #18444 (alexey-milovidov).
- 主キーおよびパーティションキーのカラム型を
LowCardinality(Type)からTypeに、またその逆にも変更できるようにしました。さらに、主キーのカラム型をEnumXからIntX型に変更できるようにしました。#5604 を修正しました。#18362 (alesapin)。 untupleのフィールドアクセスに対応しました。#18133。#18309 (hexiaoting) 。- CSV で、ネストされた CSV としてシリアライズされた配列を含む文字列として表現されている場合に、Array フィールドをパースできるようにしました。例:
"[""Hello"", ""world"", ""42"""" TV""]"は['Hello', 'world', '42" TV']としてパースされます。CSV 内の配列については、文字列中で中括弧がなくてもパースできるようにしました。例:"'Hello', 'world', '42"" TV'"は['Hello', 'world', '42" TV']としてパースされます。 #18271 (alexey-milovidov). - MergeTree wide パーツの適応的な粒度計算を改善しました。#18223 (alesapin) 。
- これで
clickhouse installが Mac でも動作するようになりました。原因は、このプラットフォームには procfs がないことでした。#18201 (Nikita Mikhaylov) 。 SHOW ...クエリ構文に関するヒントを改善しました。 #18183 (Du Chuan).- Array 集約関数
arrayMin,arrayMax,arraySum,arrayAvgがInt128、Int256、UInt256に対応しました。#18147 (Maksim Kita). - Set および Join のストレージ設定に
diskを追加しました。 #18112 (Grigory Pervakov). - アクセス制御: テーブル関数
merge()は、現在のユーザーがデータの取得元となる各テーブルに対するSELECT権限を持っていることを必須とするようになりました。この PR で #16964 を修正します。 #18104 #17983 (Vitaly Baranov). - 一時テーブルは、そのテーブルが作成されたセッションでのみ、システムテーブル
system.tablesとsystem.columnsに表示されるようになりました。内部データベース_temporary_and_external_tablesはこれらのシステムテーブルでは非表示となり、代わりに一時テーブルは、is_temporaryフラグが設定されたデータベース名が空のテーブルとして表示されます。#18014 (Vitaly Baranov). - ターミナルウィンドウのサイズ変更時に発生する clickhouse-client の描画の問題を修正しました。#18009 (Amos Bird) 。
- クライアントが接続を切断した際のイベントログの詳細度を、Warning から Information に下げました。 #18005 (filimonov).
- DiskS3 向けに、ファイルシステム上の空または不正なメタデータファイルを強制的に削除するようにしました。S3 は実験的機能です。#17935 (Pavel Kovalenko).
- アクセス制御:
allow_introspection_functions=0はイントロスペクション関数の使用を禁止しますが、それらに対する権限の付与自体は、今後は禁止されません (その権限を付与されたユーザーが実際に使用するには、自身でallow_introspection_functions=1を設定する必要があります) 。同様に、allow_ddl=0は DDL コマンドの使用を禁止しますが、それらに対する権限の付与自体は、今後は禁止されません。#17908 (Vitaly Baranov). - ユーザビリティの改善: カラム名のヒント表示。 #17112。 #17857 (fastio)。
- 2 つの merge テーブルが互いのデータを読み込もうとした場合の診断情報を追加しました。 #17854 (徐炘).
- ClickHouseのDockerイメージを使用して実行するスクリプトで、タイムアウト値を上書きできるようにしました。 #17818 (Guillaume Tassery).
- 一部の設定エラーを防ぐため、システムログテーブルのエンジン定義の文法をチェックするようにしました。なお、この文法チェックは意味的な検証ではないため、存在しないカラムや式関数といった誤りは、テーブルが作成されるまで検出されません。#17739 (Du Chuan).
- 接続がない場合でも、
RabbitMQテーブルの初期化時に例外をスローしないようにしました (バックグラウンドで再接続します) 。 #17709 (Kseniia Sumarokova). - Buffer のフラッシュ時にサーバーのメモリ制限を無視しないようにしました。 #17646 (Azat Khuzhin).
- use-after-freeエラーを修正するため、RocksDB をパッチ適用済みバージョン (ClickHouse-Extras 提供) に切り替えました。#17643 (Nikita Mikhaylov).
- 並列パース時の例外メッセージにオフセットを追加しました。これにより #17457 を修正しました。 #17641 (Nikita Mikhaylov).
- INSERT クエリの途中で「パーツが多すぎる」エラーを返さないようにしました。 #17566 (alexey-milovidov).
- ALTER クエリの UPDATE ステートメントでクエリパラメータを使用できるようになりました。#10976 を修正しました。#17563 (alexey-milovidov).
- クエリ難読化機能: 識別子名として一部のSQLキーワードを使用しないようにしました。 #17526 (alexey-milovidov).
- DDLWorker が実行した現在の最大 DDL エントリを、サーバーのメトリクスとして公開しました。これにより、DDLWorker がどこかでハングしていないかを確認できます。#17464 (Amos Bird).
- すべてのサーバーの現在のスレッドに関する非同期メトリクスをエクスポートするようになりました。このような問題の追跡や原因特定に役立ちます。#17463 (Amos Bird) 。
- 設定
asterisk_include_materialized_columnsとasterisk_include_alias_columnsを有効にすると、ワイルドカードクエリに MATERIALIZED / ALIAS などの動的カラムが含まれるようになりました。 #17462 (Ken Chen) 。 config.xmlの<ttl>属性を使って、システムログテーブル から古いエントリを削除するための 有効期限 (TTL) を指定できるようになりました。 #17438 (Du Chuan).- 現在、MySQL および PostgreSQL プロトコル経由でサーバーに送られるクエリには、それぞれ固有のインターフェイス種別があります (これはテーブル
system.query_logのinterfaceカラムで確認できます) 。MySQL は4、PostgreSQL は5で、以前使われていた1ではありません。現在、1はネイティブプロトコル専用に使用されます。 #17437 (Vitaly Baranov). INSERT ... SELECT ... SETTINGSクエリの SETTINGS 句のパースを修正。#17414 (Azat Khuzhin) 。- RadixSort のメモリ使用量を正しく計上するようにしました。 #17412 (Nikita Mikhaylov).
- server 内の
receiveHelloに eof チェックを追加し、Attempt to read after eof例外の発生を防止しました。#17365 (Kruglov Pavel). - bigint 変換で発生する可能性があるスタックオーバーフローを回避しました。Big integers は実験的な機能です。 #17269 (flynn).
- これで
setインデックスがGLOBAL INでも動作するようになりました。これにより #17232、#5576 が修正されました。#17253 (Amos Bird). - S3ストレージへのリクエストにおける HTTP リダイレクト数の上限を追加しました (
s3_max_redirects) 。#17220 (ianton-ru) 。 -OrNullコンビネータを-If、-Merge、-MergeState、-Stateコンビネータと組み合わせる場合、-OrNullは先頭に置く必要があります。#16935 (flynn).- HTTPプロキシおよびHTTPS S3エンドポイントの設定をサポートしました。 #16861 (Pavel Kovalenko).
- S3クライアント向けに、環境変数、
~/.aws、およびAssumeRoleを使用した適切な認証を追加しました。#16856 (Vladimir Chebotarev) 。 - OpenTelemetryのスパンをさらに追加。スパンデータをZipkinにエクスポートする方法の例を追加。#16535 (Alexander Kuzmenkov) 。
- cache 辞書: 取得時のコールバックとロックを完全に排除しました。キーは “not found” と “expired” に分けず、クエリ中は同じマップに格納されます。#14958 (Nikita Mikhaylov) 。
fsync_part_directory/fsync_after_insert/in_memory_parts_insert_syncがこれまで一度も動作していなかった問題を修正しました (Experimental機能) 。#18845 (Azat Khuzhin) 。MaterializeMySQLエンジンのネストされたデータベースでAtomicエンジンを使用できるようにしました。#14849 (tavplubix) 。
バグ修正
- ごくまれにサーバーが接続を受け付けなくなる問題を修正しました。#17542 (Amos Bird, alexey-milovidov).
- 定数引数を持つ二項関数の索引解析を修正し、誤ったクエリ結果を招く問題を修正しました。これにより、#18364 を修正しました。 #18373 (Amos Bird).
- 索引比較の型が異なる場合に、索引解析が誤る可能性がある問題を修正しました。これにより #17122 の問題が修正されます。 #17145 (Amos Bird).
- マージ中は AIO による書き込みを無効にしました。これは、マージ中にごくまれに主キーカラムのデータ破損が発生する可能性があるためです。 #18481 (alesapin).
- wide パーツからcompact パーツへのマージを制限しました。vertical merge の場合、結果パーツが壊れる不具合がありました。 #18381 (Anton Popov).
- read backoff (logs 内のメッセージ
<Debug> MergeTreeReadPool: Will lower number of threads) が発生した場合に、MergeTree*からの読み取り中にクエリ結果が不完全になる可能性がある不具合を修正しました。この不具合は #16423 で導入されました。#18137 を修正しました。#18216 (Nikolai Kochetov) 。 rocksdbライブラリの use-after-free バグを修正しました。 #18862 (sundyli).ORCフォーマットのファイルで読み取りが無限に続く問題を修正 (この問題は #10580 で導入されました) 。#19095 を修正。#19134 (Nikolai Kochetov).- 固定グラニュラリティサイズより大きいマークが生成される可能性がある MergeTree データライターのバグを修正しました。#18913 の修正です。#19123 (alesapin).
- 起動時に、ClickHouse が
LowCardinality(Nullable(...))から圧縮 codec を読み取れず、Attempt to read after EOF例外をスローしていたバグを修正しました。#18340 を修正。#19101 (alesapin). - 古い構文で作成された
MergeTreeテーブルに対するMODIFY TTLクエリを制限しました。以前はこのクエリは成功していましたが、実際には何の効果もありませんでした。#19064 (Anton Popov). groupUniqArrayが Enum 型の引数に対して正しい型を返すように修正しました。これにより #17875 がクローズされます。#19019 (alexey-milovidov)。LowCardinality引数で関数ignoreを使用した際に発生する可能性のあるエラーExpected single dictionary argument for functionを修正しました。#14275 を修正。#19016 (Nikolai Kochetov).TinyLogエンジンのテーブルにLowCardinalityカラムを挿入する際の不具合を修正しました。#18629。#19010 (Nikolai Kochetov) 。- Join は const カラムを実体化しようとしますが、コードの他の箇所ではそれらをそのまま必要としています。 #18982 (Nikita Mikhaylov).
- 最適化が常に正しいとは限らないため、
optimize_move_functions_out_of_anyを無効にしました。これにより #18051 を解消しました。これにより #18973 を解消しました。#18981 (alexey-milovidov) 。 - クエリプランの
Expressionステップのマージが原因で発生する可能性のある例外QueryPipeline stream: different number of columnsを修正しました。#18190。#18980 (Nikolai Kochetov)。 - シャットダウン時にごくまれに発生していたデッドロックを修正しました。 #18977 (tavplubix).
ALTER TABLE ... DROP PART 'part_name'クエリで、パーティション全体のすべての重複排除ブロックが削除されてしまう不具合を修正しました。#18874 を修正しました。#18969 (alesapin)。- Attach partition 実行時に mutation がリセットされるようにしました。#18804。#18935 (fastio) 。
bitmapOrCardinalityで nullptr の逆参照を引き起こす可能性がある問題を修正しました。これにより #18911 をクローズします。#18912 (sundyli).clickhouse-localのシャットダウン時に発生する可能性があるハングを修正しました。これにより #18891 が修正されます。#18893 (alexey-milovidov).- 外部データベース (MySQL、ODBC、JDBC) 向けのクエリで、
x IN table形式の式が含まれている場合に、誤って書き換えられる問題を修正しました。これは #9756 の修正です。#18876 (alexey-milovidov) 。 - 単項関数および Nullable 型での *If combinator の不具合を修正しました。#18806 (Azat Khuzhin) 。
- 設定
network_compression_methodがグローバルに非デフォルト値に設定されている場合、非同期の分散 INSERT がサーバーによって拒否されることがある問題を修正しました。これにより #18741 を修正しています。#18776 (alexey-milovidov)。 Nullable(String)からNullable(Decimal(P, S))へNULLをCASTしようとした際に発生していたAttempt to read after eoferror を修正しました。これにより、nullable string から decimal を parse できない場合、関数CASTはNULLを返すようになりました。#7690 を修正しました。#18718 (Winter Zhang).- ログ関連の軽微な問題を修正しました。#18717 (sundyli).
- 古い構文で作成された
ReplicatedMergeTreeテーブルで、空のパーツが削除されない不具合を修正しました。#18582 を修正しています。#18614 (Anton Popov). - 異なる値で日付のオーバーフローが発生していた既存のバグを修正しました。Date の値の上限を厳密に “2106-02-07” とし、“2106-02-07” より大きい日付は値 0 にキャストします。#18565 (hexiaoting).
- MySQL からのレプリケーションでの FixedString データ型のサポートを追加しました。MySQL からのレプリケーションは実験的機能です。このパッチでは #18450 を修正しました。また、#6556 も修正しました。#18553 (awesomeleo).
RIGHTまたはFULLjoin を含むサブクエリの後にORDER BYを使用した際に発生する可能性のあるPipeline stuckエラーを修正しました。#18550 (Nikolai Kochetov).- 対応する mutation の kill 後に
ALTERクエリがハングする可能性があるバグを修正しました。thread fuzzer によって発見されました。#18518 (alesapin). parseDateTimeBestEffort関数で 12AM が適切にサポートされるようになりました。これにより #18402 が修正されました。#18449 (vladimir-golovchenko).- 型
Nullable(String)の引数でtoType(...)関数 (toDate、toUInt32など) を実行した際に発生していたvalue is too shortエラーを修正しました。これにより、この種の関数はパースエラー時に例外をスローする代わりにNULLを返すようになりました。#7673 を修正。#18445 (tavplubix) 。 SHOW TABLESの想定外の動作を修正しました。#18431 (fastio) 。- 修正: -SimpleState combinator が互換性のない引数型と戻り値型を生成する不具合を修正しました。#18404 (Amos Bird).
SetまたはJoinテーブルの同時実行時の使用、およびsystem.tablesからの選択時に発生する可能性のある競合状態を修正しました。 #18385 (alexey-milovidov).system.settings_profile_elementsテーブルへのデータ格納の不具合を修正しました。この PR で #18231 を修正しています。#18379 (Vitaly Baranov) 。- 二段階集約の使用時に、
Distinctコンビネータを伴う集約関数で発生する可能性があるクラッシュを修正しました。 #17682 を修正しています。 #18365 (Anton Popov). - デュアル IPv4/IPv6 スタックのマシンで、サーバーから
clickhouse-odbc-bridgeプロセスに到達できない問題を修正しました。ODBC Dictionary の更新時に不正なクエリが使用されたり、odbc-bridgeプロセスのクラッシュを引き起こしたりする問題も修正しました。#14489 を解決する可能性があります。#18278 (Denis Glazachev). - アクセス制御: ユーザーがテーブル内の少なくとも1つのカラムへのアクセス権を持っていれば、
SELECT count() FROM tableを実行できるようになりました。この PR で #10639 を修正しました。#18233 (Vitaly Baranov). - アクセス制御:
SELECT JOINで、結合対象の各テーブルに対するSELECT権限が必要になりました。この PR で #17654 を修正しました。#18232 (Vitaly Baranov). - Enum 型と Int 型のキー比較の不具合を修正しました。これにより #17989 が修正されます。#18214 (Amos Bird).
- MySQL からのレプリケーション (実験的機能) 。#18186 を修正。#16372 を修正。MaterializeMySQL データベースエンジンで一意キー変換の問題を修正。#18211 (Winter Zhang).
WITH FILLとWITH TIESの両方を含むクエリで発生していた不整合を修正しました #17466。 #18188 (hexiaoting).- 最後のカラムでパースエラーが発生した場合に、デフォルト値で行を insert するよう修正しました。 #17712。 #18182 (Jianmei Zhang).
- setting profile を設定しようとした際に発生する
Unknown setting profileerror を修正しました。#18167 (tavplubix) 。 - クエリ
MODIFY COLUMN ... REMOVE TTLで、実際にはカラムの有効期限 (TTL) が削除されない不具合を修正しました。#18130 (alesapin). - S3 URL のパース時の
std::out_of_range: basic_stringを修正しました。#18059 (Vladimir Chebotarev) 。 DateTime64とDateの比較を修正しました。#13804 および #11222 に対応しています。… #18050 (Vasily Nemkov) 。- MySQL からのレプリケーション (実験的機能) : #15187 を修正。#17912 を修正。MaterializeMySQL で MySQL のプレフィックス索引の変換をサポート。#17944 (Winter Zhang).
logger.sizeパラメーターに 2^32 を超える数値を指定してサーバーのログローテーションを設定した場合、ログが正しくローテーションされない問題がありました。これは修正されました。#17905 (Alexander Kuzmenkov).- クエリに ARRAY JOIN が含まれている場合 (つまり、実際にはクエリが非自明な場合) 、単純なクエリ最適化によって誤った結果が返されることがありました。 #17887 (sundyli).
topK集約関数で発生する可能性のある segfault を修正しました。これにより #17404 がクローズされます。#17845 (Maksim Kita).- WAL (実験的機能) :
in_memory_parts_enable_walが無効な場合は、WAL からパーツを復元しないようにしました。 #17802 (detailyang). - 削除可能なテーブルの最大サイズに関するExceptionメッセージが誤って表示されていました。 #17764 (alexey-milovidov).
- 空き領域が不足している状態で
Distributedテーブルに挿入した際に発生する可能性があった segfault を修正しました。#17737 (tavplubix) 。 - ClickHouse が MySQL サーバーへの接続を再確立できない問題を修正しました。#17681 (Alexander Kazakov) 。
- Windows: Windows Subsystem for Linux 上で ClickHouse を実行している環境で、
Atomicdatabase でRENAMEクエリを実行するとFunction not implementederror が発生する不具合を修正しました。#17661 を修正。 #17664 (tavplubix). pool_size> 1 の場合、競合状態により、ON CLUSTERクエリの実行時にクラスターが循環レプリケーション (相互レプリケーション) されているかどうかが誤って判定されることがありました。この問題を修正しました。#17640 (tavplubix) 。- server がデーモンモードで動作しているときに
system.stack_traceテーブルが空になる不具合を修正しました。#17630 (Amos Bird). - Exception
fmt::v7::format_errorが、MergeTree テーブルでバックグラウンド処理中にログに記録されるようになりました。これにより #17613 を修正しました。 #17615 (alexey-milovidov). clickhouse-clientを対話型モードで使用して複数行クエリを実行すると、単一行コメントが誤ってクエリの末尾まで続いてしまっていました。これにより #13654 を修正しました。#17565 (alexey-milovidov).- 対応するmutationが別のレプリカで停止された際に、ALTERクエリがハングする問題を修正しました。 #16953 を修正。 #17499 (alesapin) 。
- ClickHouse が mark cache のサイズを過小評価していた場合に発生する、メモリ計上の問題を修正しました。これは、marks を含むごく小さなファイルが大量にある場合に発生することがあります。#17496 (alesapin) 。
- 設定
optimize_redundant_functions_in_order_byが有効な場合のORDER BYを修正しました。#17471 (Anton Popov). - 不正確な最適化により発生する可能性があった
DISTINCT後の重複を修正しました。#17294 を修正。 #17296 (li chengxiang). #17439 (Nikolai Kochetov). - *MergeTree テーブルのバックグラウンドタスクで CPU 使用率が高くなる問題を修正しました。#17416 (tavplubix) 。
JOINtableからLowCardinality型を読み取る際に発生する可能性のあるクラッシュを修正しました。#17228 を修正。#17397 (Nikolai Kochetov).- MySQL からのレプリケーション (実験的機能) : MySQL の SHOW ステートメントとのヘッダー不一致を修正する試み #16835。#17366 (Winter Zhang)。
- 述語オプティマイザでの非決定論的関数の問題を修正しました。これにより #17244 が修正されます。#17273 (Winter Zhang).
LIMITを伴う分散クエリで発生する可能性があるUnexpected packet Data received from clientエラーを修正しました。#17254 (Azat Khuzhin).- サブクエリに const カラムがある場合に set 索引が無効化される問題を修正しました。これにより #17246 を修正しました。#17249 (Amos Bird)。
- clickhouse-copier: 非パーティションテーブル向けの修正 #15235。 #17248 (Qi Chen).
- S3ディスクに保存されたパーツに対するミューテーションが動作しないことがある問題を修正しました (実験的機能) 。#17227 (Pavel Kovalenko) 。
- 関数
fuzzBitsのバグを修正しました。関連 issue: #16980。 #17051 (hexiaoting). - OFFSET のみを含むクエリに対する
optimize_distributed_group_by_sharding_keyの不具合を修正しました。#16996 (Azat Khuzhin). Distributedテーブル上のMergeテーブルに対する JOIN を含むクエリを修正しました。#16993 (Azat Khuzhin).- 単調関数を使用した ORDER BY の最適化を修正しました。#16107 を修正。#16956 (Anton Popov) 。
- 異なるスケールを持つ
DateTime64型の誤った比較を修正しました。#16655 … #16952 (Vasily Nemkov). - 設定
optimize_aggregators_of_group_by_keysが有効な場合の GROUP BY と JOIN の最適化を修正しました。#12604 を修正します。#16951 (Anton Popov). - SHOW ACCESSクエリの軽微な修正。 #16866 (tavplubix).
- パーティション述語使用時に
optimize_trivial_count_query設定が有効な場合の動作を修正しました。#16767 (Azat Khuzhin) 。 - MySQL wire protocol 経由の INSERT クエリで、影響を受けた行数が返されるようになりました。これまで ClickHouse は常に 0 を返していましたが、この問題を修正しました。#16605。#16715 (Winter Zhang).
select_sequential_consistencyが原因で、最適化された単純な count クエリとシステムテーブルで発生していた不整合な動作を修正しました。 #16309 (Hao Chen).- 存在しないカラムに対して
REPLACEカラム変換が実行された場合に、エラーをスローする。 #16183 (hexiaoting). - RIGH|FULL JOIN の ON 式が非等価 JOIN の場合は、例外を発生させる。 #15162 (Artem Zuikov).
ビルド/テスト/パッケージングの改善
- ClickHouse binary 向けの簡易的な整合性チェックを追加しました。これにより、ハードウェア障害による破損 (ストレージ媒体でのビットロットや RAM でのビット反転) を検出できます。#18811 (alexey-milovidov).
OpenSSLをBoringSSLに変更しました。これにより、サニタイザ関連の問題を回避できます。これにより #12490 が修正されます。これにより #17502 が修正されます。これにより #12952 が修正されます。#18129 (alexey-milovidov).Sys/Vinit script を簡素化しました。Ubuntu 12.04 以前では動作していなかったためです。#17428 (alexey-milovidov)../clickhouse installスクリプトに複数の改良が加えられました。#17421 (alexey-milovidov).- これで ClickHouse は擬似的な ZooKeeper として振る舞えるようになりました。現時点では、ストレージ実装は単なるインメモリのハッシュテーブルで、server は ZooKeeper プロトコルを部分的にサポートしているだけです。 #16877 (alesapin).
- TestKeeperStorage (ZooKeeper のモック) で、dead list ウォッチの削除を修正しました。#18065 (alesapin) 。
- 障害挿入用の
SYSTEM SUSPENDコマンドを追加しました。フェイルオーバーテストを容易にするために使用できます。これにより #15979 がクローズされます。 #18850 (alexey-milovidov). - ClickHouse を
lldでリンクする際に、build id を生成するようにしました。私の環境では、lldはデフォルトではこれを生成しないことが判明しました。build id はクラッシュレポートや内部診断に使用されます。#18808 (alexey-milovidov). - Style check の shellcheck エラーを修正。#18566 (Ilya Yatsishin).
- タイムゾーン情報を2020eに更新しました。 #18531 (alesapin).
- codespell の警告を修正しました。スタイルチェックを別々の項目に分割しました。スタイルチェック用の Docker イメージを更新しました。#18463 (Ilya Yatsishin).
- ドキュメント内に残っているコンフリクトマーカーを自動チェック。#18332 (alexey-milovidov).
- stateless tests の flaky check で Thread Fuzzer を有効化。 #18299 (alesapin).
- スレッドセーフではない関数
strerrorを使用しないように変更しました。#18204 (alexey-milovidov). anchore/scan-action@mainのワークフローアクションを更新 (masterからmainに移行) 。#18192 (Stig Bakken) 。- 今後、
clickhouse-testはタイムアウト付きでデータベースの DROP/CREATE を行うようになりました。 #18098 (alesapin). - stateless tests向けに、Pytestフレームワークの実験的サポートを有効にしました。#17902 (Ivan).
- 現在、結合テストでは最新版の Docker デーモンを使用しています。#17671 (alesapin) 。
- 有効になっている場合、公式ビルド、メモリ、CPU、空きディスク容量に関する情報を Sentry に送信します。Sentry は ClickHouse 開発者を支援するためのオプトイン機能です。これにより #17279 がクローズされます。#17543 (alexey-milovidov).
- clickhouse-copier のコードに未初期化の変数がありました。 #17363 (Nikita Mikhaylov).
- #17309 の MSan レポート 1 件を修正しました。#17344 (Nikita Mikhaylov) 。
- Arrow Flight ライブラリにおける IPv6 の問題を修正しました。詳しくはコメントを参照してください。#16664 (Zhanna).
- 一部の
libc関数を、プロセスを終了させるトラップに置き換えるライブラリが追加されました。 #16366 (alexey-milovidov). - スタックオーバーフローが発生した場合にサーバーログに診断情報を出力し、
clickhouse-clientにエラーメッセージを送信するようにしました。これにより #14840 がクローズされます。#16346 (alexey-milovidov). - これで、ステートレスな機能テストのほぼすべてを並列に実行できるようになりました。#15236 (alesapin).
librdkafkaの snappy 解凍時の破損を修正 (問題が発生していたのは gcc10 ビルドのみですが、公式ビルドではすでに clang を使用しているため、少なくとも最近の公式リリースには影響ありません) 。 #18053 (Azat Khuzhin).- サーバーがOOMキラーによって終了された場合、ログにメッセージを出力します。 #13516 (alexey-milovidov).
- PODArray:
memcpyが (nullptr, 0) 引数で呼び出されないようにしました (UBSan のレポートを修正) 。これにより #18525 が修正されます。#18526 (alexey-milovidov). - DDLWorker 内での zookeeper パス連結処理を軽微に改善。 #17767 (Bharat Nallan).
- デバッグファイルからシンボルを再読み込みできるようになりました。あわせて、このPRでは build-id の問題も修正しています。#17637 (Amos Bird).