メインコンテンツへスキップ

ClickHouse リリース v21.12、2021-12-15。 プレゼンテーションビデオ

後方互換性を持たない変更

  • これまで望ましくない挙動があった機能の修正。 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_representationoutput_format_tsv_null_representation は、それぞれ format_csv_null_representationformat_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: テキストフォーマットの完全性と一貫性を大幅に改善。 TSVTSVRawCSVJSONCompactEachRowJSONCompactStringsEachRow の各フォーマットをリファクタリングし、コードの重複を削除するとともに、-WithNames および -WithNamesAndTypes 接尾辞付きフォーマット向けの基本インターフェイスを追加しました。CSVWithNamesAndTypesTSVRawWithNamesTSVRawWithNamesAndTypesJSONCompactEachRowWIthNamesJSONCompactStringsEachRowWIthNamesRowBinaryWithNames の各フォーマットを追加しました。TSVWithNamesAndTypesTSVRaw(WithNames/WIthNamesAndTypes)CSVWithNamesAndTypesJSONCompactEachRow(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 と比べて、より大きなウィンドウで効果を発揮するウィンドウ関数 exponentialTimeDecayedSumexponentialTimeDecayedMaxexponentialTimeDecayedCountexponentialTimeDecayedAvg が導入されました。あわせて、対応するユースケースも拡充されました。#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- Mapsum-, min-, max- MappedArrays に名称変更。#24539 (Ildus Kurbangaliev).
  • HTTP からの読み取りを再試行可能にしました。#29696 をクローズします。#29894 (Kseniia Sumarokova).

実験的機能

  • ClickHouse でストリーム処理を有効にするための WINDOW VIEW を追加。 #8331 (vxider).
  • MaterializedMySQLOrdinary データベースを使用するサポートを廃止。 #31292 (Stig Bakken).
  • Logファミリー向けに BACKUP および RESTORE コマンドを実装。この機能は開発中です。 #30688 (Vitaly Baranov).

パフォーマンス改善

  • s3 / url / hdfs フォーマットの ParquetORCArrow の読み取り時のメモリ使用量を削減しました (設定 input_format_allow_seeks で制御され、デフォルトで有効です) 。あわせて、seek を制御する設定 remote_read_min_bytes_for_seek も追加しました。#10461 および #16857 をクローズしました。#30936 (Kseniia Sumarokova).
  • JOIN ON 内の定数条件に対する最適化を追加しました。参考: #26928#27021 (Vladimir C).
  • JSONEachRowWithProgressPrettyCompactMonoBlock を除くすべてのテキストフォーマットで、並列フォーマットをサポートしました。#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) 。
  • RangeHashedDictionaryComplexKeyRangeHashedDictionaryupdate_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) 。
  • Int256LowCardinality を作成できない不具合を修正しました。#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 を返し、EDITORclickhouse-local/clickhouse-client は同時実行されます) 。#31456 (Azat Khuzhin) 。
  • JSONCompactStrings(EachRow) フォーマットで、フィールドの後ろにゴミデータがある場合は例外を発生させる。#31455 (Kruglov Pavel).
  • http_send_timeouthttp_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_secondsmerge_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_numinput_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-ngcassandramariadb-connector-cxzre2sentrygsaslarrowprotobuf に独自の 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)。

ClickHouse リリース v21.11 (2021-11-09) 。プレゼンテーションビデオ

後方互換性を持たない変更

  • SQL/JSON 関数における json_path 引数と json 引数の順序を変更しました (標準に合わせるため) 。これにより #30449 をクローズします。#30474 (Kseniia Sumarokova).
  • MergeTree テーブル設定 write_final_mark を削除しました。今後は常に true になります。#30455 (Kseniia Sumarokova). 対応は不要で、すべてのテーブルは新しいバージョンとの互換性があります。
  • 関数 bayesAB は削除されました。更新したうえでこの関数を復活させるため、ご協力をお願いします。これにより #26233 をクローズします。#29934 (alexey-milovidov).
  • これは、実験的な clickhouse-keeper サポートをすでに使い始めている場合にのみ関係します。ClickHouse Keeper のスナップショットは、独自の ClickHouse LZ4 block 圧縮ではなく、デフォルトで ZSTD codec によって圧縮されるようになりました。この動作は、協調設定 compress_snapshots_with_zstd_format で無効にできます (すべてのクォーラム レプリカで同じ値である必要があります) 。後方互換性の問題はかなりまれで、新しいノードが古いノードにスナップショットを送信した場合にのみ発生する可能性があります (復旧時に発生します) 。古いノードは ZSTD フォーマットのスナップショットを読み取れません。#29417 (alesapin).

新機能

  • 新しい非同期 INSERT モードでは、挿入されたデータを蓄積し、バックグラウンドで 1 つのバッチとして保存できます。クライアント側では、クエリ内にデータが埋め込まれた INSERT クエリや、別のバッファ内のデータを使用する INSERT クエリ (たとえば HTTP protocol 経由の INSERT クエリ) で async_insert を設定することで有効にできます。wait_for_async_insert が true の場合 (デフォルト) 、クライアントはデータがテーブルに flush されるまで待機します。サーバー側では、設定 async_insert_threadsasync_insert_max_data_sizeasync_insert_busy_timeout_ms によって制御されます。#18282 を実装しました。#27537 (Anton Popov). #20557 (Ivan). パフォーマンスに関する注記: 非同期挿入では、1 秒あたり最大約 10,000 件の個別の INSERT クエリを実行できます。そのため、1 秒あたり数百万行の挿入性能を実現したい場合は、引き続きバッチで挿入することを推奨します。
  • clickhouse-local に対話型モードを追加しました。これにより、clickhouse-local を実行するだけで、サーバーに接続せずに ClickHouse のコマンドラインインターフェイスを利用し、ファイルや外部データソースのデータを処理できます。あわせて、clickhouse-clientclickhouse-local のコードを統合しました。#7203 をクローズ。#25516 をクローズ。#22401 をクローズ。#26231 (Kseniia Sumarokova).
  • 実行可能 (スクリプト化可能) なユーザー定義関数のサポートが追加されました。これらは、任意のプログラミング言語で記述できるUDFです。#28803 (Maksim Kita).
  • 外部データソースへの定義済み接続を許可しました。これにより、外部データソースの利用時に認証情報やアドレスを指定する必要がなくなり、代わりに名前で参照できるようになります。#28367 をクローズしました。#28577 (Kseniia Sumarokova).
  • system データベース内の対応するテーブルに対応する SCHEMATATABLESVIEWSCOLUMNS ビューを持つ 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正規化関数 normalizeUTF8NFCnormalizeUTF8NFDnormalizeUTF8NFKCnormalizeUTF8NFKD を追加しました。#28633 (darkkeks).
  • FileLog table engine を使用した、ClickHouse におけるアプリケーションのログファイルのストリーミング消費。KafkaRabbitMQ engine に似ていますが、ローカルファイルシステム上の追記専用ログやローテーションされるログを対象としています。#6953 をクローズ。#25969 (flynn) (Kseniia Sumarokova).
  • CapnProto 出力フォーマットを追加し、CapnProto 入力フォーマットをリファクタリングしました。 #29291 (Kruglov Pavel).
  • クエリ内で数値を2進数リテラルとして記述できるようになりました。例: SELECT 0b001;#29304 (Maksim Kita).
  • hashed_array Dictionary 型を追加しました。複数の属性を持つ Dictionary で使用した場合のメモリ使用量を削減します。#30236 をクローズしました。#30242 (Maksim Kita).
  • JSONExtractKeys 関数が追加されました。#30056 (Vitaly) 。
  • 関数 getOSKernelVersion を追加しました。OS カーネルのバージョンを含む文字列を返します。#29755 (Memo) 。
  • MD4 および SHA384 関数を追加しました。MD4 は廃止された安全でないハッシュ関数であり、すでに一部のレガシーシステムで MD4 が使用されていて、まったく同じ結果を得る必要があるまれな場合にのみ使用できます。#29602 (Nikita Tikhomirov).
  • 設定ファイルで hsts_max_age に正の値を設定すると、ClickHouse HTTPサーバーで HSTS を有効にできます。#29516 (凌涛) 。
  • Huawei OBS Storage のサポートを追加しました。 #24294 をクローズしました。 #29511 (kevin wan).
  • キーが単純な正規表現に一致する要素を含むかどうかを調べる新しい関数 mapContainsKeyLike#29471 (凌涛). 指定したパターンに一致する要素だけを保持した map を取得する新しい関数 mapExtractKeyLike#30793 (凌涛).
  • ALTER TABLE x MODIFY COMMENT に対応しました。#29264 (Vasily Nemkov) 。
  • ClickHouse にはないものの H3 API では利用できる、H3 の情報取得関数を追加しました: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
  • Replicated データベースで、非レプリケートの ALTER TABLE FETCH および ATTACH を許可。 #29202 (Kevin Michel).
  • 設定 output_format_csv_null_representation を追加しました。output_format_tsv_null_representation と同様の設定ですが、CSV 出力向けです。#29123 (PHO).
  • 現在のZooKeeperセッションのuptimeを秒単位で返す関数 zookeeperSessionUptime() を追加しました。#28983 (tavplubix).
  • h3ToGeoBoundary 関数を実装。#28952 (Ivan Veselov) 。
  • ウィンドウ関数として使用できる集約関数 exponentialMovingAverage を追加しました。これにより #27511 が解決されます。#28914 (alexey-milovidov)。
  • テーブルのカラムのサブカラムをDESCRIBEクエリの結果に含められるようになりました (describe_include_subcolumns設定で有効化できます) 。 #28905 (Anton Popov).
  • Executable, ExecutablePool にオプション send_chunk_header が追加されました。このオプションが true の場合、chunk の前に、改行付きの chunk の行数 rows&#95;count がクライアントに送信されます。#28833 (Maksim Kita).
  • tokenbf_v1ngram は、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 がスキップされます。もちろん、スキップされる行数は、設定した granularityindex_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)。
  • 関数 toUUIDOrDefaulttoUInt8/16/32/64/256OrDefaulttoInt8/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-clientINTO 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/isNotNullIS 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 REPLACECREATE 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_indicesdata_compressed_bytesdata_uncompressed_bytesmarks_bytes の各カラムを追加しました。system.partssecondary_indices_compressed_bytessecondary_indices_uncompressed_bytessecondary_indices_marks_bytes の各カラムを追加しました。#29697 をクローズしました。#29896 (Maksim Kita)。
  • system.tables に table エイリアスを、system.databases に database エイリアスを追加 #29677#29882 (kevin wan)。
  • serverの起動時に、table間の相互依存関係を正しく解決するようにしました。#8004#15170 をクローズしました。#28373 (tavplubix) 。
  • 関数 divideintDivmodulo で、分母が 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).
  • Date32DateDateTimeDateTime64String の比較に関する不具合を修正しました。#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) 。
  • polygon dictionaries (逆ジオコーディング) : 設定 store_polygon_key_column = true の場合に、SELECTクエリで辞書の内容を読み取れるようサポートを追加しました。#30090 をクローズしました。#30142 (Maksim Kita) 。
  • Play UI に ClickHouse のロゴを追加。 #29674 (alexey-milovidov).
  • ArrowArrowStreamParquetORC などの Arrow 対応フォーマットからカラムを読み取る際の例外メッセージが改善されました。これにより #29926 をクローズしました。#29927 (alexey-milovidov).
  • Buffer テーブルにおけるフラッシュと起動時の間のデータ競合を修正しました。これはテストで発生することがあります。#29930 (Azat Khuzhin) 。
  • DatabaseMemoryLiveView に対する 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_queries server setting を追加しました。これは #24451 に対応するものです。#29914 (Amos Bird).
  • ピークメモリ使用量を追跡する機能を追加 (system.trace_log に新しい trace_type MemoryPeak を追加) 。#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_configmodels_configuser_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_idinitial_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).
  • 関数 hasMap データ型のサポートが追加されました。#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) 。
  • MergeTreemax_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-bridgelibrary-bridge、CatBoost とのインテグレーション、および一部ライブラリのビルドはサポートされていません。 #30248 (alexey-milovidov).
  • AArch64 および Darwin (macOS) ビルドで ProtobufArrowORCParquet を有効にしました。これにより #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).

バグ修正

  • positionCaseInsensitiveUTF8countSubstringsCaseInsensitiveUTF8 などの 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).
  • TOFROM が設定されていて、結果セットに行がない場合の 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 granuleLOGICAL_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 INWITH 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).
  • FileCheckerStorageLog/StorageStripeLog の間で発生する可能性があるデータ競合を修正しました。#29959 (Azat Khuzhin).
  • StorageLog における LogSink::writeMarks()LogSource の間のデータ競合を修正しました。#29946 (Azat Khuzhin) 。
  • https://github.com/ClickHouse/ClickHouse/pull/19544 で導入された MergeTree テーブルの同時実行クエリ制限における、潜在的なリソースリークの問題を修正しました。 #29879 (Amos Bird).
  • システムテーブル再作成チェックを修正 (enum値の変更を検出できない問題) 。 #29857 (Azat Khuzhin).
  • MaterializedMySQL: MySQL への接続が失われた際に、トランザクションの一部しか処理されないことがある問題を修正しました。#29837 (Håvard Kvålen).
  • おそらくカーネルのバグが原因で、ごくまれに発生する可能性がある Timeout exceeded: elapsed 18446744073.709553 seconds error を回避します。#29154 を修正しました。#29811 (tavplubix).
  • ATTACH TABLE ... FROM 'path'クエリで、path の代わりに文字列以外のリテラルを使用した場合に発生する不正な型変換を修正しました。これにより、未初期化メモリを読み取る可能性がありました。#29790 (alexey-milovidov).
  • GROUP BY 時の LowCardinality への同時アクセスを修正しました (Buffer テーブルと組み合わせると問題が発生する可能性があります) 。 #29782 (Azat Khuzhin).
  • 分片で <= 21.3>= 21.4 のバージョンが混在し、GROUP BY キーがすべて固定長の複数のカラムで構成され、かつ二段階集約が有効化されている場合 (group_by_two_level_threshold および group_by_two_level_threshold_bytes を参照) に、分散クエリで GROUP BY の結果が不正になり (結果に同じキーを持つ複数の行が含まれる) 、問題を修正しました。#29580#29735 (Nikolai Kochetov) 。
  • サーバーの再起動時に、設定 materialized_postgresql_tables_list が正しく動作しない不具合を修正しました。#28529 で報告されています。#29686 (Kseniia Sumarokova).
  • filter predicate 内の条件が、push-down 最適化後に失われることがありました。#29625 (Nikolai Kochetov) 。
  • 別名を含む JIT 式コンパイルおよび短絡式評価の問題を修正しました。#29403 をクローズしました。#29574 (Maksim Kita).
  • DEFAULT 式で x.y.z... のような不正なテーブル識別子を使用した際に、ALTER MODIFY クエリでまれに発生するセグメンテーション違反を修正しました。#29184#29573 (alesapin).
  • GROUP BY WITH TOTALS HAVING におけるヌルポインタ逆参照を修正 (HAVING のカラムが選択されていない場合) 。#29553 (Azat Khuzhin) 。
  • Joinテーブルエンジンのテーブルに対して読み取りと書き込みを同時に行う際のデッドロックを回避します。 #29544 (Raúl Marín).
  • std::mismatch の使い方に問題があったため、チェック pathStartsWith のバグを修正しました: The behavior is undefined if the second range is shorter than the first range.#29531 (Kseniia Sumarokova).
  • ODBC bridge において、error Invalid cursor state に対する再試行を追加しました。これは再試行可能なエラーです。#29473 を修正しました。#29518 (Kseniia Sumarokova).
  • Lazyデータベースのロード時に、テーブル名のパースが誤っていた問題を修正しました。#29456 を修正。#29476 (tavplubix)。
  • プッシュダウンされたHAVING述語を持つサブクエリで発生する可能性のあるBlock structure mismatchを修正しました。#29010 を修正。#29475 (Nikolai Kochetov) 。
  • greatest/least 関数で発生する論理エラー Cannot capture columns を修正しました。#29334 をクローズしました。#29454 (Kruglov Pavel).
  • RocksDBテーブルエンジン: 複数のDBを開く際に発生するレースコンディションを修正 (CIでこの問題を再現する一部のテストも復活) 。#29393 (Azat Khuzhin) 。
  • 設定に不備がある場合に、Replicated アクセスストレージが正常にシャットダウンしない問題を修正しました。 #29388 (Kevin Michel).
  • メモリ安全ではないため、ウィンドウ関数 nth_value を削除しました。これにより #29347 をクローズしました。#29348 (alexey-milovidov) 。
  • projection part の vertical merge を修正しました。これにより #29253 の問題も修正されます。さらに、この PR では https://github.com/ClickHouse/ClickHouse/pull/25165 で導入された projection の merge/mutation に関する複数の問題も修正しています。#29337 (Amos Bird).
  • 新しいレプリカの追加時に、ReplicatedデータベースでDDLクエリがハングする問題を修正しました。#29328 (Kevin Michel) 。
  • 接続タイムアウト (send_timeout/receive_timeout) の問題を修正しました。 #29282 (Azat Khuzhin).
  • テーブルのカラムのいずれかに、大文字と小文字を区別しない関数を含むデフォルト式がある場合、ReplicatedMergeTree の新しいレプリカの再作成または作成時に発生する可能性がある Table columns structure in ZooKeeper is different from local table structure 例外を修正しました。#29266 (Anton Popov).
  • Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF) ではなく、通常の Database doesn't exist error (UNKNOWN_DATABASE) をクライアントに (TCP 経由で) 返すようにしました。#29229 (Azat Khuzhin).
  • Avro入力フォーマットで、LowCardinality(Nullable) 型のカラムへの挿入時に発生する segfault を修正しました。 #29132 (Kruglov Pavel).
  • inter-server secret の場合に、以前の認証情報が再利用されないようにした (そのクラスターで interserver secret が設定されていると、Buffer/Kafka 経由で分散テーブルに INSERT する前に、その接続で以前設定されたユーザーが再利用されることがあった) 。#29060 (Azat Khuzhin).
  • Dictionary との join 時に any_join_distinct_right_table_keys を処理するようにし、#29007 をクローズしました。 #29014 (Vladimir C).
  • エイリアスカラムで JOIN した際に発生する “block 内にカラム … が見つかりません” エラーを修正しました。#26980 をクローズしました。#29008 (Vladimir C).
  • GLOBAL IN サブクエリで使用されるスレッド数を修正しました (#19414 のバグ修正以降、単一スレッドで実行されていました) 。 #28997 (Nikolai Kochetov).
  • ORDER BY に WITH FILL が含まれている場合に発生する不適切な最適化を修正しました。これにより #28908 をクローズしました。これにより #26049 をクローズしました。#28910 (alexey-milovidov)。
  • 定数を使用した場合の高階配列関数 (arrayCompactSIGSEGVarrayDifference/arrayCumSumNonNegativeILLEGAL_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 PARTREPLACE/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) 。

ClickHouse リリース v21.10、2021-10-16。 プレゼンテーション, ビデオ

後方互換性を持たない変更

  • 現在、以下の MergeTree テーブルレベル設定 replicated_max_parallel_sendsreplicated_max_parallel_sends_for_tablereplicated_max_parallel_fetchesreplicated_max_parallel_fetches_for_table は何の効果もありません。これらは以前から適切に機能しておらず、max_replicated_fetches_network_bandwidthmax_replicated_sends_network_bandwidthbackground_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 圧縮フォーマット (gzbz2xzzstd に加えて) をサポートしました。 #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” と DateTimeDateTime64 の間で変換する関数を追加しました。 #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までは使用を推奨しません。
  • 新しいコマンド BACKUPRESTORE を追加しました。#21945 (Vitaly Baranov)。これは現在も開発中であり、現行バージョンでの使用は想定されていません。

パフォーマンス改善

  • sumIf および countIf 集約関数を高速化しました。#28272 (Raúl Marín).
  • minmax 索引用の仮想 PROJECTION を作成します。これにより、allow_experimental_projection_optimization が有効な場合、可能なケースではクエリはデータを読み取る代わりに minmax 索引を使用します。#26286 (Amos Bird).
  • sequenceMatchsequenceCount に 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 型、StringFixedString) をサポート。 #28096 (Anton Popov).
  • PostgreSQL table engine またはテーブル関数への insert 時に ON CONFLICT 句をサポートしました。#27727 をクローズしました。#28081 (Kseniia Sumarokova)。
  • 互換性のあるデータをアタッチできるよう、Enumデータ型の制限を緩和しました。#26672 を解決しました。#28028 (Dmitry Novik) 。
  • 空集合に対して定数キーでグループ化する際の動作を制御する設定 empty_result_for_aggregation_by_constant_keys_on_empty_set を追加しました。これは #6842 の従来の動作を復元するためです。#27932 (Amos Bird).
  • replication_wait_for_inactive_replica_timeout 設定が追加されました。これにより、非アクティブなレプリカが ALTER/OPTIMZE/TRUNCATE クエリを実行するまでの待機時間を指定できます (デフォルトは 120 秒です) 。replication_alter_partitions_sync が 2 で、一部のレプリカが replication_wait_for_inactive_replica_timeout 秒を超えて非アクティブな場合、UNFINISHED 例外がスローされます。#27931 (tavplubix).
  • APPLYカラム変換子でラムダ引数をサポートし、複数の引数を持つ関数を適用できるようにしました。これは #27877 に対応するものです。#27901 (Amos Bird) 。
  • tcp_keep_alive_timeout がデフォルトで有効になりました。#27882 (Azat Khuzhin) 。
  • リモートクエリのキャンセルを改善 (リモートサーバーが異常終了した場合) 。#27881 (Azat Khuzhin).
  • 大容量のS3オブジェクトには、マルチパートコピーアップロードを使用します。 #27858 (ianton-ru).
  • ライブラリ辞書のパスでシンボリックリンクをたどれるようにしました。#27815 (Kseniia Sumarokova).
  • これで、ALTER MODIFY COLUM TNullable(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 BYMerge テーブルを使用し、設定 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 に対して -Merge combinator を適用する際、異なるパラメータを持つ aggregate function によって生成された state は許可しないようにしました。たとえば、fooState(42)(x) の state は fooMerge(s)fooMerge(123)(s) では確定できず、fooMerge(42)(s) のようにパラメータを明示的に指定し、その値も一致している必要があります。これは、パラメータを最終化のためだけに使う quantilesequence* などの一部の特殊な 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 サブクエリ (ArrayTuple など) は、現在ではエラーを 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) 。
  • MySQLPostgreSQLClickHouseJDBCCassandra の 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_hashed Dictionary を追加しました。#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.usersdefault_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).
  • ArrowORCParquet の入力フォーマットで、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)。今後書き直される予定のため、使用しないでください。
  • MaterializeMySQLMaterializedMySQL に名称変更しました。#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 を追加しました。normalizeQuerynormalizeQueryKeepNames などの関数は、パフォーマンス向上のためにクエリの解析やフォーマットを行わないため、これは正規化クエリの分析に役立ちます。#27380 (Amos Bird).
  • multiMatchAny などの hyperscan 関連関数で巨大な正規表現が使用されるのを防ぐため、2 つの設定 max_hyperscan_regexp_lengthmax_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_logquery_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).
  • 実行可能辞書 (executableexecutable_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_limitoptimize_distributed_group_by_sharding_key 最適化でも考慮されるようになりました。#26466 (Azat Khuzhin).
  • protobuf を 3.17.3 に更新しました。変更履歴は https://github.com/protocolbuffers/protobuf/releases で公開されています。#26424 (Ilya Yatsishin).
  • 大規模なクラスターでテールレイテンシを軽減できる use_hedged_requests 設定を有効にしました。 #26380 (alexey-milovidov).
  • ユーザーの許可ホスト一覧に存在しないホストが含まれる場合の動作を改善しました。#26368 (ianton-ru).
  • CREATE TABLE 経由で Distributed のディレクトリモニター設定を指定できるようになりました (例: CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 など) 。#26336 (Azat Khuzhin) 。
  • web UI のオリジンと異なる場合、server アドレスを web UI の履歴 URL に保存するようにしました。これにより #26044 をクローズします。 #26322 (alexey-milovidov).
  • sleep / sleepEachRow の呼び出しをプロファイリングするイベントを追加しました。 #26320 (Raúl Marín).
  • 異なるクラスター間で分片の接続を再利用できるようになりました。また、cluster table function の使用時に新しい接続が作成されるのも回避します。#26318 (Amos Bird).
  • 古い一時ディレクトリの削除実行間隔を、デフォルト値付きのパラメータで制御できるようにしました。 #26212. #26313 (fastio).
  • 関数 range によって生成されるデータ量の安全しきい値を調整するための設定 function_range_max_elements_in_block を追加しました。これにより #26303 がクローズされます。#26305 (alexey-milovidov).
  • テーブル作成時にハッシュ関数をチェックし、サンプリング時にはチェックしないようにしました。MergeTree 用の設定を追加しました。誤ったサンプリングカラムでテーブルが作成されていても、サンプリングが一度も使われない場合は、この設定を無効にすることで、例外を出さずにサーバーを起動できます。 #26256 (zhaoyu).
  • 指定した String カラムを、デフォルトの bytes ではなく string として Avro に出力するための設定 output_format_avro_string_column_pattern を追加しました。#22414 に対応しています。#26245 (Ilya Golshtein).
  • Log および TinyLog テーブルの system.columns テーブルに、カラムサイズの情報を追加しました。これにより #9001 が解決されました。#26241 (Nikolay Degterinsky).
  • カスタムのdisk構成があり、一部のdiskにdetachedディレクトリが存在しない場合でも、system.detached_partsテーブルをクエリしてもExceptionをスローしないようにしました。これにより #26078 を解決します。 #26236 (alexey-milovidov).
  • now()today() のような定数式を含む、キー内の非決定論的関数をチェックするようにしました。これにより #25875 をクローズしました。これにより #11333 をクローズしました。#26235 (alexey-milovidov).
  • PostgreSQLテーブルエンジンで、timestamp および timestamptz データ型を DateTime64 に変換するようにしました。#26234 (jasine).
  • より適切なプロジェクション候補を選択できるよう、プロジェクションに対して積極的な IN 索引解析を適用しました。 #26218 (Amos Bird).
  • スカラー関数が渡された場合、IN から GLOBAL キーワードを削除するようにしました。以前のバージョンでは、GLOBAL IN f(x) を指定すると例外が発生していました。#26217 (Amos Bird).
  • 例外メッセージにエラー ID (BAD_ARGUMENTS など) を追加しました。これにより #25862 がクローズされました。#26172 (alexey-milovidov) 。
  • clickhouse-local の —progress オプションで誤った出力がされる問題を修正しました。プログレスバーは 100% に達すると、clickhouse-client と同様に消去されます。#17484 をクローズしました。#26128 (Kseniia Sumarokova).
  • 設定 merge_selecting_sleep_ms を追加しました。#26120 (lthaooo).
  • Linux AIO の 1 ブロック先読みを伴う複雑な使用を廃止し、O_DIRECT を用いたごく単純な同期 IO に置き換えました。以前のバージョンでは、max_threads が 1 より大きい場合、設定 min_bytes_to_use_direct_io が正しく機能しないことがありました。direct IO による読み取り (クエリでは既定で無効、大規模なマージでは既定で有効) は、効率がやや低い形で動作します。これにより #25997 をクローズします。#26003 (alexey-milovidov)。
  • REPLACE TABLE クエリ時に Distributed テーブルをフラッシュするようにしました。#24566 を解決しました。新しいテーブルへの挿入に失敗した場合、[CREATE OR] REPLACE TABLE ... AS SELECT クエリでテーブルを置き換えたり (または作成したり) しないようにしました。#23175 を解決しました。#25895 (tavplubix).
  • クエリによって実行された (マテリアライズドまたはライブ) ビューの名前を含む views カラムを system.query_log に追加しました。クエリ中に実行された各ビューに関する情報を含む新しいログテーブル (system.query_views_log) を追加しました。ビューの実行動作を変更しました。ビューの実行中に例外がスローされた場合、すでに開始されているビューは完了するまで実行を継続します。これは以前は parallel_view_processing=true の場合の挙動でしたが、現在は常にこの挙動になります。 - 依存ビューが読み取りの進捗をコンテキストに報告するようになりました。#25714 (Raúl Marín).
  • 分散クエリの実行完了時に、接続のドレインを非同期で行うようにしました。新しいサーバー設定 max_threads_for_connection_collector が追加され、バックグラウンドで接続を回収する worker 数を指定できるようになりました。プールがいっぱいの場合、接続のドレインは同期的に行われますが、従来とは少し動作が異なります。クライアントに EOS を送信した後にドレインされるため、クエリは十分なデータを受信した時点ですぐに成功し、例外はクライアントに送出されるのではなくログに記録されます。設定 drain_timeout も追加されました (デフォルトは 3 秒です) 。接続のドレインは、タイムアウト時に切断されます。 #25674 (Amos Bird).
  • 設定で複数の include をサポートしました。複数のソースからユーザー設定やリモートサーバー設定を include できるようになりました。<include /> 要素に from_zkfrom_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 のような関数を、DateTimeDateTime64 などの異なる非数値型の 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, gotUInt8Bad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinality といったエラーを修正しました。さらに重要な点として、エラーメッセージ内で空白が欠落していた問題も修正しました。#23515 を修正。#27298 (Nikolai Kochetov)。
  • distributed_group_by_no_merge = 2distributed_push_down_limit = 1 の組み合わせ、または optimize_distributed_group_by_sharding_key = 1LIMIT 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) 。
  • cachecomplex_key_cachessd_cachecomplex_key_ssd_cache の設定のパースを修正しました。allow_read_expired_keysmax_update_queue_sizeupdate_queue_push_timeout_millisecondsquery_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).
  • library Dictionary ソースの 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_logREMOVE_PARTevent_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-testJinja2 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_logsystem.query_thread_logsystem.processessystem.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 関数で MapUInt128, 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_logsystem.query_thread_logsystem.processessystem.opentelemetry_span_log) で Map データ型を使用するようになりました。これらのテーブルは、新しいデータ型で自動作成されます。古いクエリをサポートするために、仮想カラムが作成されます。#18698 を解決しました。#23934, #25773 (hexiaoting, sundy-li, Maksim Kita).
  • 複合キーを持ち、attribute が 1 つだけの Dictionary で、dictGetdictHas 関数において 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_prewhereoptimize_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_zkfrom_env、または incl 属性を持つ <include /> 要素を配置するだけで、その内容が置換先の内容に差し替えられます。#24404 (nvartolomei).
  • "null" という名前のカラムを持つクエリ (バッククォートまたはダブルクォートで指定する必要があります) および ON CLUSTER をサポートしました。#24035 をクローズしました。#25907 (alexey-milovidov).
  • JSONExtractLowCardinalityDecimalUUID をサポートしました。#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).
  • ReplicatedMergeTreeDROP 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).
  • StorageMergeDatabase 引数で正規表現をサポート。#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 型のタイムゾーンが使われていませんでした。これは、DateDateTime の比較にも影響する可能性があります。DateDateTime の共通型の推論でも、対応するタイムゾーンが使われていませんでした。そのため、関数 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_timeinitial_query_start_time_microsecond が追加され、分散クエリがある場合はその開始時刻を記録するようになりました。#25022 (Amos Bird)。
  • 集約関数 segmentLengthSum を追加しました。#24250 (flynn)。
  • すべての IN/JOIN をデフォルトで GLOBAL IN/JOIN にする新しい boolean 設定 prefer_global_in_and_join を追加しました。#23434 (Amos Bird)。
  • Join table engine に対する ALTER DELETE クエリをサポートしました。#23260 (foolchi)。
  • 集約関数 quantileBFloat16 と、それに対応する quantilesBFloat16 および medianBFloat16 を追加しました。これは非常にシンプルで高速な分位点推定器で、相対誤差は 0.390625% 以下です。これにより #16641 をクローズしました。#23204 (Ivan Novitskiy)。
  • flow analysis に有用な sequenceNextNode() 関数を実装しました。#19766 (achimbab)。

実験的機能

  • HDFS 上の仮想ファイルシステムのサポートを追加しました。#11058 (overshov) (Kseniia Sumarokova).
  • clickhouse-keeper (ZooKeeper の実験的な代替機能) が、ZooKeeper 互換の digest ACL をサポートするようになりました。#24448 (alesapin).

パフォーマンス改善

  • 一部の関数を subcolumn の読み取りに変換し、読み取るデータ量を削減する最適化を追加しました。たとえば、ステートメント col IS NULL は subcolumn col.null の読み取りに変換されます。この最適化は設定 optimize_functions_to_subcolumns により有効化できますが、現時点ではデフォルトで無効です。 #24406 (Anton Popov).
  • より多くのカラムを、可能な場合はエイリアス式に書き換えるようにしました。これにより、プロジェクションなどの、より高度な最適化が有効になる場合があります。 #24405 (Amos Bird).
  • bloom_filter の索引を、定数 Array を伴う hasAny 関数の式で使用できるようになりました。これにより #24291 が解決されます。 #24900 (Vasily Nemkov).
  • RabbitMQ のキューが空の場合に読み取り試行を再スケジュールするため、指数バックオフを追加しました。 (ClickHouse は RabbitMQ からのデータ取り込みをサポートしています。) これにより #24340 が解決されます。 #24415 (Kseniia Sumarokova).

改善

  • レプリケーションの帯域幅を制限できるようになりました。2 つの Replicated*MergeTree 設定 max_replicated_fetches_network_bandwidthmax_replicated_sends_network_bandwidth を追加し、テーブルごとのレプリケーション fetch/send の最大速度を制限できるようにしました。さらに、サーバー全体に適用される 2 つの設定 (default user profile 内) max_replicated_fetches_network_bandwidth_for_servermax_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 VIEWSELECT の設定が異なるとエラーが発生していました。現時点では、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).
  • LowCardinalityInterval 型がサポートされました。これは一部の式の中間値に必要です。#21730 をクローズしました。#25410 (Vladimir).
  • sequenceMatch および sequenceCount 関数の時間条件で == 演算子が使えるようになりました。例: sequenceMatch(’(?1)(?t==1)(?2)’)(time, data = 1, data = 2)。 #25299 (Christophe Kalenzaga).
  • 設定項目 http_max_fieldshttp_max_field_name_sizehttp_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_syncmax_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-localFile テーブルエンジン、およびデータが stdin 経由で渡された場合の clickhouse-client の INSERT クエリで、進行状況が表示されるようになりました。#18209 をクローズしました。#23656 (Kseniia Sumarokova) 。
  • clickhouse-copier のバグ修正と改善。異なる (ただし互換性のあるスキーマの) テーブルをコピーできるようにしました。#9159 をクローズ。ReplacingMergeTree をコピーするためのテストを追加。#22711 をクローズ。カラムの有効期限 (TTL) とデータスキッピングインデックスをサポート。内部の Distributed テーブルを作成する際には、これらは単純に削除されます (有効期限 (TTL) とスキッピングインデックスは基になるテーブルに残ります) 。#19384 をクローズ。MATERIALIZED カラムと ALIAS カラムをコピーできるようにしました。これが役立つケースもあります (たとえば、このカラムが PRIMARY KEY に含まれている場合) 。これにより、タスク設定で allow_to_copy_alias_and_materialized_columns プロパティを true に設定すると許可されます。#9177 をクローズ。[#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007) をクローズ。#9514 をクローズ。補助テーブルを移動する前に元のテーブルのパーティションを削除するための allow_to_drop_target_partitions プロパティをタスク設定に追加。#20957 をクローズ。OPTIMIZE DEDUPLICATE クエリを廃止。この回避策が必要だったのは、ALTER TABLE MOVE PARTITION が何度も再試行され、通常の MergeTree テーブルには重複排除機能がないためです。#17966 をクローズ。進行状況をパス task_path + /status の ZooKeeper ノードに JSON フォーマットで書き込むようにしました。#20955 をクローズ。引数なしの ReplicatedTables をサポート。#24834 をクローズ 。#23518 (Nikita Mikhaylov).
  • S3 からの読み取りを再試行する際、各再試行の間にバックオフを伴う待機を追加しました。#23461 (Vladimir Chebotarev) 。
  • Distributed table への INSERT で、insert_allow_materialized_columns (マテリアライズドカラムを許可) が反映されるようにしました。#23349 (Azat Khuzhin).
  • 分散クエリでLIMITのプッシュダウンを可能にしました。#23027 (Azat Khuzhin) 。
  • 複数の S3 ボリュームを使用する zero-copy レプリケーションの問題を修正 (#22679 を修正) 。#22864 (ianton-ru) 。
  • ユーザーがオペレーティングシステムに任意の空きポートを要求した際にバインドされた実際のポート番号を特定し、それをログメッセージに表示するようにしました。 #25569 (bnaecker).
  • attndims が場合によっては正しく動作しないため、postgres配列の変換結果が n 次元配列ではなく String データ型になってしまうことがある問題を修正しました。#24804 をクローズしました。#25538 (Kseniia Sumarokova).
  • MySQL、PostgreSQL、ODBC における、timezone 付き DateTime の変換を修正しました。#5057 をクローズしました。#25528 (Kseniia Sumarokova) 。
  • テーブルごとに KILL MUTATION を区別するようにしました (これにより、予期しない Cancelled mutating parts エラーを修正) 。#25025 (Azat Khuzhin) 。
  • bucket のルートに S3 disk を宣言できるようになりました (S3 仮想ファイルシステムは開発中の実験的機能です) 。#24898 (Vladimir Chebotarev) 。
  • 分散テーブルでサブカラム (例:Tuple の部分) を読み取れるようにしました。#24472 (Anton Popov) 。
  • MySQL互換プロトコル向けの機能改善: user 関数が正しい出力を返すようにしました。#25697 をクローズしました。#25697 (sundyli).

バグ修正

  • 後方互換性を改善。パーティションキーで使用される場合は、古い modulo 関数バージョンを使用します。#23508 をクローズ。#24157 (Kseniia Sumarokova) 。
  • 低メモリのサーバーでごくまれに発生し、再起動しないとマージを実行できなくなる不具合を修正しました。おそらく #24603 も修正されます。 #24872 (alesapin).
  • alter move/replace partition の同時実行時に、レプリケーションキューで発生することがある極めてまれなエラー Tagging already tagged part を修正しました。これにより、#22142 も修正される可能性があります。#24961 (alesapin).
  • 他の集約関数の集約関数 state を集約して集約関数 state を計算する際に発生する可能性のあるクラッシュを修正しました (実用的なユースケースではありません) 。#24523 を参照してください。#25015 (alexey-milovidov)。
  • クエリ SYSTEM RESTART REPLICA または SYSTEM SYNC REPLICA が完了しない場合の挙動を修正しました。この問題は、RAM 容量が極端に少ないサーバーで確認されました。#24457 (Nikita Mikhaylov).
  • clickhouse-server 内で ZooKeeper クライアントがハングする可能性がある不具合を修正しました。 #24721 (alesapin).
  • ZooKeeper への connection が失われ、connection の復元後にレプリカが複製された場合、replication queue に outdated な エントリ が含まれることがありました。replication queue に 交差する 仮想パーツ が含まれている際に、アサーションが失敗する問題を修正しました。これは、一部の data part が失われた場合にまれに発生することがあります。終了するのではなく、Log に error を出力するようにしました。 #24777 (tavplubix).
  • クエリプランの式プッシュダウン最適化で WHERE 条件が失われる問題を修正しました (設定 query_plan_filter_push_down = 1 をデフォルトで有効化) 。#25368 を修正します。#25370 (Nikolai Kochetov)。
  • 有効期限 (TTL) を伴うマージ後に交差するパーツが生じる可能性があるバグを修正しました:Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin).
  • ZooKeeper との接続が失われた場合、ReplicatedMergeTree テーブルは再接続を試みる前にバックグラウンド処理の完了を待つことがありました。この問題は修正され、現在はバックグラウンド処理が強制的に停止されます。#25306 (tavplubix).
  • 配列が主キーに使用されている場合に、ARRAY JOIN を含むクエリで発生するエラー Key expression contains comparison between inconvertible types を修正しました。#8247 を修正します。#25546 (Anton Popov).
  • クエリ WITH TOTALS および WITH FILL で totals が誤っていた問題を修正しました。#20872 を修正しました。#25539 (Anton Popov).
  • クラスター設定の再読み込みと同時に system.clusters にクエリした際に発生するデータレースを修正しました。#25737 (Amos Bird) 。
  • データベース間で Distributed テーブルを移動する際の No such file or directory エラーを修正しました。#24971 を修正。#25667 (tavplubix) 。
  • REPLACE PARTITION は、まれにソースパーティションが空の場合に無視されることがありましたが、この問題は修正されました。#24869#25665 (tavplubix).
  • まれに一部のレプリカでエンキューされたDDLクエリがスキップされることがある、Replicated データベースエンジンのバグを修正しました。 #24805 (tavplubix).
  • クエリを伴わない EXPLAIN AST でのヌルポインタ逆参照を修正しました。#25631 (Nikolai Kochetov) 。
  • 空のパーツの自動削除を待機する処理を修正しました。これにより、background pool が完全に埋まり、レプリケーションが停止する可能性がありました。#23315 (Anton Popov).
  • S3仮想ファイルシステムに保存されたテーブルの復元を修正しました (これは本番環境には未対応の実験的機能です) 。#25601 (ianton-ru) 。
  • Decimal256 使用時の Arrow フォーマットにおける nullptr の逆参照を修正。Arrow フォーマットで Decimal256 をサポート。#25531 (Kruglov Pavel).
  • 前処理済みの設定ファイル名の前に余分なアンダースコアが付く問題を修正しました。 #25431 (Vitaly Baranov) 。
  • clickhouse-copier ツールの修正: copier のタスク設定に sharding&#95;key がない場合に発生するセグメンテーションフォルトを修正しました。#25419 (Nikita Mikhaylov).
  • DDL で使用した際の REPLACE カラム変換子について、フォーマット済みのクエリを正しくクォートするよう修正しました。これにより #23925 が修正されます。#25391 (Amos Bird).
  • quantileDeterministic 関数および同様の関数で、非決定論的な挙動が生じる可能性を修正しました。これにより #20480 がクローズされます。#25313 (alexey-milovidov).
  • SummingMergeTreeSimpleAggregateFunction(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 + 1b 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).
  • ArrowParquetORC フォーマットでのデータの挿入および選択で、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_tracethread_name カラムを追加しました。これにより #23256 をクローズします。#24124 (abel-cheng)。
  • insert_null_as_default = 1 の場合、INSERT ... SELECT および INSERT ... SELECT ... UNION ALL ... クエリで、NULL の代わりにデフォルト値を挿入します。#22832 を解決しました。#23524 (Kseniia Sumarokova).
  • clickhouse-local--progress オプションによる進捗表示のサポートが追加されました。#23196 (Egor Savin) 。
  • http Dictionary ソースで、HTTP 圧縮 (Content-Encoding HTTP ヘッダーで判定) のサポートを追加しました。これにより、#8912 が修正されます。#23946 (FArthur-cmd).
  • SYSTEM QUERY RELOAD MODELSYSTEM QUERY RELOAD MODELS を追加しました。#18722 を解決します。#23182 (Maksim Kita) 。
  • EXPLAIN PLAN クエリに設定 json (boolean、デフォルトは 0) を追加しました。有効にすると、クエリの出力は JSON 1 行のみになります。不要なエスケープを避けるため、TSVRaw フォーマットの使用を推奨します。#23082 (Nikolai Kochetov).
  • EXPLAIN PIPELINE クエリに設定 indexes (ブール値、デフォルトでは無効) を追加しました。有効にすると、使用された索引と、適用された各索引についてフィルタリングされたパーツ数およびグラニュール数が表示されます。MergeTree* テーブルでサポートされています。#22352 (Nikolai Kochetov).
  • LDAP: Active Directory グループを ClickHouse のロールにマッピングする際に使用するユーザー DN の検出機能を実装しました。#22228 (Denis Glazachev).
  • 連続する行の差分を合計し、タイムスタンプを保存することでマージ時の順序を維持する新しい集約関数 deltaSumTimestamp#21888 (Russ Frank).
  • 安全性は低いものの、Docker 環境で正しく動作する S3 用の IMDS 認証情報プロバイダーを追加しました。#21852 (Vladimir Chebotarev) 。
  • indexHint 関数を復活させました。これは #21238 に対応するものです。これにより #9542 が差し戻されます。これで #9540 が修正されます。#21304 (Amos Bird)。

実験的機能

  • MergeTree* テーブルで PROJECTION をサポートしました。#20202 (Amos Bird) 。

パフォーマンス改善

  • デフォルトで compile_expressions 設定を有効にしました。この設定を有効にすると、単純な関数や演算子の組み合わせが実行時に LLVM によってネイティブコードへコンパイルされます。#8482 (Maksim Kita, alexey-milovidov). 注: 問題が発生した場合は、このオプションを無効にしてください。
  • re2 ライブラリを更新しました。正規表現マッチングのパフォーマンスが向上しました。また、この PR で gcc-11 との互換性も追加されました。#24196 (Raúl Marín).
  • ORC 入力フォーマットで、ファイルサイズが非常に大きい場合にメモリ消費の大きいテーブル全体の一括読み込みではなく、ストライプ単位で読み込むようになりました。#23102 (Chao Ma).
  • クエリ内の集約関数 sumcountavg を単一の集約関数に融合するようにしました。この最適化は optimize_fuse_sum_count_avg 設定で制御されます。これは新しい集約関数 sumCount によって実装されています。この関数は sumcount という 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 byhavingorder by においてもカラム名が優先されるようになります。これで #23882 が修正されます。#24022 (Amos Bird).
  • DateTime64ORDER BY WITH FILL をサポートしました。#24016 (kevin wan) 。
  • ReplacingMergeTreeDateTime64 をバージョンカラムとして使えるようになりました。#23992 (kevin wan) 。
  • サーバー起動時に、OS 名、カーネルバージョン、CPU アーキテクチャの情報をログに記録するようにしました。#23988 (Azat Khuzhin).
  • postgresql Dictionary ソースでテーブルスキーマを指定できるようになりました。#23958 をクローズします。#23980 (Kseniia Sumarokova).
  • Enum 要素名のヒントを追加 (タイプミスがある場合に候補名を提示) 。 #17112 をクローズ。 #23919 (flynn).
  • 辞書について、検出率 (値が見つかった割合) を測定するようになりました (system.dictionariesfound_rate を参照) 。 #23916 (Azat Khuzhin).
  • テーブル設定 rabbitmq_queue_settings_list を使用して、特定のキュー設定を追加できるようにしました。 (#23737 および #23918 をクローズ) 。RabbitMQ のセットアップ全体をユーザーが制御できるようにしました。テーブル設定 rabbitmq_queue_consume1 に設定されている場合、RabbitMQ テーブルエンジンは指定されたキューにのみ接続し、exchange、キュー、バインディングの宣言など、RabbitMQ コンシューマー側のセットアップを一切行いません。 (#21757 をクローズ) 。RabbitMQ テーブルが削除された際に適切にクリーンアップするようにしました。テーブルによって作成された場合は、そのテーブルが宣言したキューと、それにバインドされたすべての exchange を削除します。#23887 (Kseniia Sumarokova) 。
  • system.distribution_queuebroken_data_files/broken_data_compressed_bytes を追加しました。破損としてマークされた、分散テーブルへの非同期挿入用ファイル数のメトリック (BrokenDistributedFilesToInsert) を追加しました。#23885 (Azat Khuzhin) 。
  • system.tables へのクエリで、ZooKeeper にアクセスすることはなくなりました。#23793 (Fuwang Hu) 。
  • OPTIMIZE クエリで lock_acquire_timeout_for_background_operations が適用されるようにしました。#23623 (Azat Khuzhin) 。
  • 新しい SYSTEM RESTART DISK SQL コマンドにより、実行時に S3 ディスクの設定を変更できるようになりました。#23429 (Pavel Kovalenko).
  • ユーザーが誤って max_distributed_connections を 0 に設定してしまうと、Distributed テーブルに対するすべてのクエリで、“logical error” を含むメッセージの例外がスローされます。しかし、これは実際には想定内の動作であり、logical error ではないため、例外メッセージはやや不正確でした。また、logical error が決して発生しないことを保証する CI 環境内のチェックもトリガーしていました。今後は、max_distributed_connections が 0 に誤設定されている場合、それを取り得る最小値 (1) として扱います。#23348 (Azat Khuzhin).
  • デフォルトで min_bytes_to_use_mmap_io を無効にしました。#23322 (Azat Khuzhin).
  • join_use_nullsLowCardinality の NULL 許容をサポートし、#15101 をクローズしました。#23237 (vdimir) 。
  • S3 ディスクで、MergeTree のパーツを detached ディレクトリに復元できるようになりました。#23112 (Pavel Kovalenko) 。
  • S3 で HTTP 接続が切断された際の再試行。 #22988 (Vladimir Chebotarev).
  • MySQL table engine、Dictionary ソース、および MaterializeMySQL の小規模なデータフェッチ向けに、設定 external_storage_max_read_rowsexternal_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 PIPELINESELECT xxx FINAL を実行した際に、誤ったパイプラインが表示されていました。(hexiaoting).
  • WHERE 句で const DateTime 値と DateTime64 カラムを使用した際の問題を修正しました。#24100 (Vasily Nemkov) 。
  • merge JOIN で発生するクラッシュを修正し、#24010 をクローズしました。#24013 (vdimir).
  • 一部のALTER PARTITIONクエリで、レプリケーションキューにPart A intersects previous part BおよびUnexpected merged part C intersecting drop range Dエラーが発生することがありました。この問題を修正しました。#23296#23997 (tavplubix).
  • 外部 GROUP BY およびオーバーフロー行 (つまり、SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having' のようなクエリ) で発生する SIGSEGV を修正しました。#23962 (Azat Khuzhin).
  • ソースに重複がある CACHE Dictionary におけるキー関連メトリクスの計上を修正しました (DictCacheKeysRequestedMiss のオーバーフローの原因となる問題) 。 #23929 (Azat Khuzhin).
  • PostgreSQL engine の接続プール実装を修正しました。#23897 をクローズしました。#23909 (Kseniia Sumarokova).
  • GROUP BY と、通常の関数でラップされた aggregate function を含む場合の distributed_group_by_no_merge = 2 の問題を修正しました (#23546 で壊れていました) 。distributed_group_by_no_merge = 2 を window functions とともに使おうとした場合は、例外を投げるようにしました。window functions を含む queries では optimize_distributed_group_by_sharding_key を無効にしました。#23906 (Azat Khuzhin)。
  • s3 テーブル関数の修正: HTTP エラーの処理を改善しました。以前は HTTP エラーのレスポンス本文が無視されていました。#23844 (Vladimir Chebotarev).
  • s3 テーブル関数の修正: URI の処理を改善しました。+ 記号を含む URL との非互換性を修正し、このようなキーを持つデータを以前は読み取れなかった問題を解消しました。#23822 (Vladimir Chebotarev).
  • GLOBAL IN/JOINuse_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).
  • JoinWITH 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.09223372036854776000.0 に丸められます) 。一方、以前のバージョンではこれらは等しいと判定されていました。これは、浮動小数点数 9223372036854776000.0 を UInt64 に変換し直すと 9223372036854775808 になるためです。参考までに、Python でもこれらの数値は等しいものとして扱われます。ただし、この挙動は CPU モデルに依存していました (範囲外の一部の数値では AMD64 と AArch64 で結果が異なります) 。そのため、比較をより正確にしました。今後は、整数が浮動小数点型で正確に表現できる場合にのみ、整数と浮動小数点数を等しいものとして扱います。#22595 (alexey-milovidov).
  • 単一の Tuple 引数に対する argMinargMax のサポートを削除しました。このコードはメモリセーフではありませんでした。この機能は誤って追加されたもので、利用者に混乱を招いていました。これらの関数は、今後別の名前で再導入される可能性があります。これにより #22384 を修正し、#17359 を取り消します。#23393 (alexey-milovidov).

新機能

  • 関数 dictGetChildren(dictionary, key)dictGetDescendants(dictionary, key, level) を追加しました。dictGetChildren は、子のインデックスをすべて Array として返します。これは dictGetHierarchy の逆変換です。dictGetDescendants は、dictGetChildrenlevel 回再帰的に適用した場合と同様に、すべての子孫を返します。level の値が 0 の場合は無限大と同等です。dictGetHierarchydictIsIn 関数の性能も改善しました。Closes #14656. #22096 (Maksim Kita).
  • 関数 dictGetOrNull を追加しました。これは dictGet と同様に動作しますが、Dictionary 内にキーが見つからない場合は Null を返します。Closes #22375. #22413 (Maksim Kita).
  • table function s3Cluster を追加しました。これにより、指定したクラスターの各ノードで s3 上のファイルを並列に処理できます。#22012 (Nikita Mikhaylov).
  • MySQL/PostgreSQL テーブルエンジン / table function で、レプリカと分片をサポートしました。SELECT * FROM mysql('host{1,2}-{1|2}', ...) のように記述できます。Closes #20969. #22217 (Kseniia Sumarokova).
  • ALTER TABLE ... FETCH PART ... クエリを追加しました。これは FETCH PARTITION に似ていますが、1 つの part だけを fetch します。#22706 (turbo jason).
  • Distributed table に対する再帰クエリの深さを制限する設定 max_distributed_depth を追加しました。Closes #20229. #21942 (flynn).

パフォーマンス改善

  • AVX2 向けの動的ディスパッチにより、intDiv のパフォーマンスを改善しました。これにより #22314 をクローズしました。#23000 (alexey-milovidov)。
  • ローカルファイル以外のソース (例: URL) に対する ArrowStream 入力フォーマットの読み取りパフォーマンスを改善しました。#22673 (nvartolomei)。
  • localhost とやり取りする場合 (clickhouse-client 使用時、またはサーバー間で分散クエリを実行する場合) に、ネイティブプロトコル経由の圧縮をデフォルトで無効化しました。これにより、一部のインポート/エクスポート処理のパフォーマンスが向上する場合があります。これにより #22234 をクローズしました。#22237 (alexey-milovidov)。
  • 分散クエリでは、IN 句の右辺からその分片に属さない値を除外するようにしました (optimize_skip_unused_shards_rewrite_in で有効。デフォルトで有効ですが、引き続き optimize_skip_unused_shards が必要です) 。#21511 (Azat Khuzhin)。
  • File 系のテーブルエンジンと、Parquet、Arrow、ORC などの列指向フォーマットで、カラムの一部を読み取る際のパフォーマンスを改善しました。これにより #issue:20129 をクローズしました。#21302 (keenwolf)。
  • バージョン 21.1 より前と同様に、より多くの条件を PREWHERE に移動できるようにしました (内部ヒューリスティクスの調整) 。移動される条件の数が不十分だと、パフォーマンスが低下する可能性がありました。#23397 (Anton Popov)。
  • ODBC 接続のパフォーマンスを改善し、バックログに残っていた未解決の問題をすべて修正しました。Poco::ODBC の代わりに nanodbc ライブラリを使用するようにしました。#9678 をクローズしました。ODBC テーブルエンジンで DateTime64 と Decimal* をサポートしました。#21961 をクローズしました。キリル文字のテキストが切り詰められる問題を修正しました。#16246 をクローズしました。ODBC bridge に接続プールを追加しました。#21972 (Kseniia Sumarokova)。

改善

  • デフォルトでmax_uri_size (HTTPインターフェイスにおけるURLの最大長) を 1 MiB に引き上げました。これにより #21197 がクローズされました。#22997 (alexey-milovidov) 。
  • background_fetches_pool_size8 に設定しました。これは、頻繁に小規模な insert が発生する場合や ZooKeeper クラスターが低速な場合の本番環境により適しています。#22945 (alexey-milovidov) 。
  • FlatDictionary に initial_array_sizemax_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).
  • 配列要素の型が異なる一般的なケースで、関数 arrayHasAnyarrayHasAllhasindexOfcountEqual を実装しました。以前のバージョンでは、arrayHasAnyarrayHasAll は false を返し、hasindexOfcountEqual は例外をスローしていました。また、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).
  • ReplicatedMergeTreemax_part_removal_threads が適用されるようになりました。 #22971 (Azat Khuzhin).
  • inactive_parts_to_throw_insert = 0 かつ inactive_parts_to_delay_insert > 0 の場合に発生する、MergeTree設定のわかりにくいコーナーケースを修正しました。#22947 (Azat Khuzhin) 。
  • dateDiffDateTime64 引数でも動作するようになりました (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&#95;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()&quot;%C&quot; フォーマット指定子の問題を修正し、さらに大きな値および非ゼロの scale に対する toDateTime64() も修正しました。 #22937 (Vasily Nemkov).
  • mannWhitneyUTestrankCorr をウィンドウ関数と一緒に使用した際に発生していたクラッシュを修正しました。これにより #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=OFF CMake オプションを使用して、バンドルされていない 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:5911:00:00..21:59:5922:00:00..23:59:59 の 3 つのインターバルに分割します。この動作のほうが実運用のニーズに適しています。これにより #9510 が修正されます。#22060 (alexey-milovidov).
  • graphite のロールアップ設定では、AgePrecision は保持期間が進むごとに増加している必要があります。現在はこれが検証され、不正な設定では例外が発生します。#21496 (Mikhail f. Shiryaev).
  • カスタムトップレベルドメインのリストに含まれる 3 階層以上のドメインに対して、cutToFirstSignificantSubdomainCustom() / firstSignificantSubdomainCustom() が誤った結果を返す問題を修正しました。これらのカスタムトップレベルドメインに一致する入力ドメインでは、第 3 レベルドメインが最初の有意なドメインと見なされていました。現在は修正されています。この変更により、たとえばこの関数を分片キーで使用している場合は非互換が生じる可能性があります。#21946 (Azat Khuzhin).
  • テーブル system.dictionaries のカラム keys は、カラム key.names および key.types に置き換えられました。system.dictionaries テーブルのカラム key.nameskey.typesattribute.namesattribute.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 は、dictGetChildrenlevel 回再帰的に適用した場合と同様に、すべての子孫要素を返します。level の値が 0 の場合は無限大と同等です。#14656 をクローズしました。#22096 (Maksim Kita).
  • executable_pool Dictionary ソースを追加しました。#14528 をクローズしました。#21321 (Maksim Kita).
  • dictionary table function を追加しました。Dictionary engine と同様に動作します。#21560 をクローズしました。#21910 (Maksim Kita) 。
  • PolygonDictionary 属性で Nullable 型を利用できるようになりました。#21890 (Maksim Kita) 。
  • 関数 dictGetdictHas は、DDL で作成された辞書でデータベース名が指定されていない場合、現在のデータベース名を使用します。#21632 をクローズしました。#21859 (Maksim Kita) 。
  • 関数 dictGetOrNull を追加しました。dictGet と同様に動作しますが、Dictionary 内でキーが見つからない場合は Null を返します。#22375 をクローズしました。#22413 (Maksim Kita).
  • ComplexKeyCacheSSDCacheSSDComplexKeyCache 辞書に非同期更新を追加しました。CacheComplexKeyCacheSSDCacheSSDComplexKeyCache 辞書で Nullable 型をサポートしました。dictGetdictGetOrDefault 関数で複数属性の取得をサポートしました。#21517 を修正しました。#20595 (Maksim Kita)。
  • RangeHashedDictionarydictHas 関数をサポートしました。#6680 を修正。#19816 (Maksim Kita).
  • DateTime または DateTime64 データ型の timezone 名を返す関数 timezoneOf を追加しました。これによって #9959 はクローズされません。関数名の不整合を修正し、timezonetimeZonetoTimezonetoTimeZone、および timezoneOftimeZoneOf の別名を追加しました。#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.clusterserrors_count の実際の値も表示されるようになりました。#21480 (Kruglov Pavel).
  • MergeTree* エンジンに _partition_id 仮想カラムを追加しました。_partition_id によるパーティションのプルーニングが可能になりました。パーティション ID 文字列を計算する partitionID() 関数を追加しました。#21401 (Amos Bird) 。
  • 指定したCIDRネットワークプレフィックスにIPv4またはIPv6アドレスが含まれているかを判定する関数 isIPAddressInRange を追加しました。#21329 (PHO).
  • 新しいSQLコマンド ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name' を追加しました。このコマンドは、すべてのディスクから凍結されたパーティションを適切に削除するために必要です。#21142 (Pavel Kovalenko)。
  • JOIN におけるキー型の暗黙的な変換をサポートしました。#19885 (Vladimir).

実験的機能

  • 浮動小数点型の RANGE OFFSET フレーム (ウィンドウ関数向け) をサポートしました。lag/lead に似ていますが、ウィンドウフレームを考慮する lagInFrame/leadInFrame ウィンドウ関数を実装しました。フレームが between unbounded preceding and unbounded following の場合、これらは lag/lead と同一です。これにより #5485 を解決しました。#21895 (Alexander Kuzmenkov).
  • S3ストレージ上の ReplicatedMergeTree に対するゼロコピーレプリケーション。#16240 (ianton-ru).
  • 既存の S3ディスクを、バックアップ/復元機能を備えたスキーマへ移行できるようにしました。#22070 (Pavel Kovalenko).

パフォーマンス改善

  • clickhouse-local など全体で、並列フォーマットをサポートしました。 #21630 (Nikita Mikhaylov).
  • CSVWithNames および TSVWithNames フォーマットでの並列パースをサポートしました。これにより #21085 を解決します。 #21149 (Nikita Mikhaylov).
  • 64 MiB 以上のファイル範囲について、mmap IO による読み取りを有効にしました (設定 min_bytes_to_use_mmap_io) 。中程度の性能向上が見込まれます。 #22326 (alexey-milovidov).
  • min_bytes_to_use_mmap_io 設定で読み取るファイル向けに cache を追加しました。設定値が小さい場合でも、頻繁な mmap/munmap 呼び出しとそれに伴うページフォールトを回避できるため、大幅な (2 倍以上の) 性能向上が得られます。なお、mmap IO には本番環境での信頼性を下げる大きな欠点があります (例: 障害のあるディスクでのハングや SIGBUS、制御しづらい memory usage) 。それでも、ベンチマークでは有効です。 #22206 (alexey-milovidov).
  • codec NONE 使用時の不要なデータコピーを回避しました。なお、codec NONE はたいてい有用ではないため、常に圧縮 (デフォルトでは LZ4) を使用することを推奨します。一般的な認識に反して、圧縮を無効にしても性能が向上するとは限らず、逆効果になることもあります。NONE codec が有用なのは次のような場合です: - データが圧縮できない場合。 - 合成ベンチマーク。 #22145 (alexey-milovidov).
  • max_rows_to_group_by が小さく、group_by_overflow_mode='any' の場合の GROUP BY を高速化しました。 #21856 (Nikolai Kochetov).
  • SELECT ... FINAL ... WHERE のようなクエリの性能を最適化しました。これにより、FINAL を含むクエリでは、sorting key に含まれるカラムを PREWHERE に移動できるようになりました。 #21830 (foolchi).
  • memcpy を別の実装に置き換えることで性能を改善しました。これにより #18583 を解決します。 #21520 (alexey-milovidov).
  • sorting key 順での aggregation の性能を改善しました (設定 optimize_aggregation_in_order が有効な場合) 。 #19401 (Anton Popov).

改善

  • PostgreSQL のテーブル/データベースエンジンおよび Dictionary ソース向けの接続プールを追加しました。これにより #21444 が修正されるはずです。#21839 (Kseniia Sumarokova).
  • postgres ストレージ/テーブル関数で、デフォルト以外のテーブルスキーマをサポートしました。#21701 をクローズしました。#21711 (Kseniia Sumarokova).
  • Postgres Dictionary ソースで、レプリカの優先順位に対応しました。#21710 (Kseniia Sumarokova) 。
  • 新しいMergeTree設定 min_bytes_to_rebalance_partition_over_jbod を導入しました。これにより、JBODボリューム上の異なるディスクに新しいパーツを均等に割り当てられるようになります。#16481 (Amos Bird) 。
  • 対応するクエリに対して、system.query_logquery_kind カラムに GrantRevokeSystem の値を追加しました。 #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_increasewindowFunnel 関数に追加しました (#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 設定が追加されました。サポートされるモードは、nonethrow (デフォルト) 、null_status_on_timeoutnever_throw です。Replicated データベースエンジンに関するその他の修正と改善。#21535 (tavplubix).
  • PODArray が、16 の約数でも倍数でもない要素サイズでインスタンス化された場合、バッファオーバーフローが発生する可能性がありました。現行リリースにはこの不具合はありません。#21533 (alexey-milovidov).
  • system.errorslast_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 JOININNER 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).
  • JOINTOTALSarrayJoin におけるエラー 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).
  • ReplicatedMergeTreeOPTIMIZEDROP を同時に実行した際に、無限に待機する可能性がある問題を修正しました。 #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)。ppc64lejemalloc を使用したビルドを有効化しました。#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_locationsingle_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-treectime オプションを追加しました。これにより、ノードの作成時刻をダンプできるようになりました。#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_log table に新しい event_time_microseconds カラムを追加しました。 #20027 (Bharat Nallan).
  • UTC からのオフセットを秒単位で返す timezoneOffset(datetime) function を追加しました。これにより #issue:19850 をクローズします。 #19962 (keenwolf).
  • 分散テーブルから特定の分片にデータを insert できるようにする設定 insert_shard_id を追加しました。 #19961 (flynn).
  • big integer をサポートするように function reinterpretAs を更新しました。 #19691 を修正します。 #19858 (Maksim Kita).
  • S3 client で Server Side Encryption Customer Keys (x-amz-server-side-encryption-customer-(key/md5) header) をサポートするようになりました。the link を参照してください。 #19428 をクローズします。 #19748 (Vladimir Chebotarev).
  • executable Dictionary ソース向けに implicit_key オプションを追加しました。これにより、レコードが入力オプションと同じ順序で到着する場合、各レコードごとに key を出力する必要がなくなります。 #14527 を実装します。 #19677 (Maksim Kita).
  • quota type query_selects および query_inserts を追加しました。 #19603 (JackyWoo).
  • function extractTextFromHTML を追加しました。 #19600 (zlx19950903), (alexey-milovidov).
  • MergeTree* engine を使用する table に、クエリの Concurrency 制御のための table レベル設定が 2 つ追加されました。設定 max_concurrent_queries は、この table に関連する同時実行クエリ数を制限します。設定 min_marks_to_honor_max_concurrent_queries は、クエリが少なくともこの数の marks を読み取る場合にのみ前者の設定を適用します。 #19544 (Amos Bird).
  • user_files directory から file を String として読み込む file function を追加しました。これは file table function とは異なります。これにより #issue:18851 を実装します。 #19204 (keenwolf).

実験的機能

  • 実験的な Replicated データベースエンジンを追加しました。これは複数のホスト間で DDL クエリをレプリケートします。#16193 (tavplubix).
  • allow_experimental_window_functions = 1 で有効になる、ウィンドウ関数の実験的サポートを導入しました。これは初期段階のアルファ品質の実装であり、本番環境での使用には適しておらず、今後のリリースで後方互換性のない変更が加えられる予定です。サポートされている機能の一覧については、ドキュメントを参照してください。#20337 (Alexander Kuzmenkov).
  • DiskS3 のメタデータファイルをバックアップ/リストアできるようになりました。#18377 (Pavel Kovalenko).

パフォーマンス改善

  • リモートクエリ向けのヘッジドリクエスト。use_hedged_requests を有効にすると (デフォルトはオフ) 、クエリに対して異なるレプリカへ複数の接続を確立できるようになります。既存のレプリカへの接続が hedged_connection_timeout 以内に確立されなかった場合、または receive_data_timeout 以内にデータを受信できなかった場合は、新しい接続が有効になります。クエリは、最初に空でない Progress パケット (allow_changing_replica_until_first_data_packet の場合は Data パケット) を送信した接続を使用し、他の接続はキャンセルされます。max_parallel_replicas > 1 のクエリをサポートしています。#19291 (Kruglov Pavel)。これにより、非常に大規模なクラスターでテールレイテンシを大幅に低減できます。
  • テーブルに行レベルセキュリティの式が指定されている場合の PREWHERE サポートを追加し、対応する最適化も有効にしました。#19576 (Denis Glazachev).
  • 設定 distributed_aggregation_memory_efficient はデフォルトで有効です。これにより、メモリ使用量が削減され、分散クエリのパフォーマンスが向上します。 #20599 (alexey-milovidov).
  • 複数の固定長キーを用いる GROUP BY の性能を改善しました。 #20472 (alexey-milovidov).
  • より厳格なエイリアシングにより、集計関数のパフォーマンスを改善。 #19946 (alexey-milovidov).
  • パイプラインを簡素化し、これによりパイプラインのスケジューリングにおけるロック競合を減らすことで、極端なケース (読み取り速度が 50 GB/秒級に達する場合) での Memory テーブルからの読み取りを高速化しました。 #20468 (alexey-milovidov).
  • HTTPサーバーを部分的に再実装し、送受信データのコピーを減らしました。これにより、HTTP 経由で長いレコードを INSERT する際のパフォーマンスが最大 1.5 倍向上します。#19516 (Ivan).
  • Memoryテーブルにcompress設定を追加しました。これを有効にすると、テーブルが使用するRAMを削減できます。環境やデータセットによっては、SELECT時の処理が高速になることもありますが、常にそうなるとは限りません。これにより#20093をクローズします。注: MemoryテーブルがMergeTreeより遅くなる理由はいくつかあります。(1) 圧縮がない (2) ブロックサイズが固定である (3) インデックスやprewhereがない… #20168 (alexey-milovidov).
  • aggregation のコードを若干改善しました。#20978 (alexey-milovidov) 。
  • パフォーマンス向上のため、intDiv/modulo の特殊化を再度追加しました。これにより #21293 を修正しました。このリグレッションは https://github.com/ClickHouse/ClickHouse/pull/18145 で導入されました。#21307 (Amos Bird).
  • Memory テーブルに INSERT SELECT で挿入する場合、ブロックを過度にまとめないようにしました。以前のバージョンでは、INSERT SELECT の後、Memory テーブルで非効率なデータ表現が生成されていました。これにより #13052 を修正しました。#20169 (alexey-milovidov)。
  • DataType パーサーの計算量が指数的になる少なくとも 1 つのケースを修正しました (fuzzer により発見) 。これにより #20096 がクローズされます。#20132 (alexey-milovidov).
  • do_not_merge_across_partitions_select_final 設定が 1 の場合、レベルが > 0 の単一の part に対する FINAL 付き SELECT の並列実行に対応しました。#19375 (Kruglov Pavel) 。
  • system.parts および system.parts_columns のクエリ時に、要求されたカラムのみを読み込むようにしました。#19570 を解決しました。#21035 (Anmol Arora).
  • avg 集約関数内の算術式に対する代数的最適化を行いました。#20092 をクローズ。#20183 (flynn).

改善

  • テーブル関数の圧縮方式で、大文字と小文字を区別しないようにしました。あわせて、大文字表記でチェックされていたLZMA圧縮方式も修正しました。#21416 (Vladimir Chebotarev) 。
  • 非アクティブなパーツが多すぎる場合、挿入時に遅延させるか、エラーを返すための 2 つの設定を追加しました。これは、サーバーがパーツを十分な速さでクリーンアップできない場合に有用です。#20178 (Amos Bird) 。
  • mysql クライアントとの互換性を改善。1. mysql jdbc 2. mycli。 #21367 (Amos Bird).
  • materialized view で参照されているカラムは削除できないようにしました。#21164 をクローズ。#21303 (flynn).
  • MySQL の Dictionary ソースでは、SSL/TLS 接続でときどき発生する予期しない接続失敗 (クエリ実行中に MySQL server への接続が失われた) が起きた場合に、再試行するようになりました。#21237 (Alexander Kazakov) 。
  • ユーザビリティの向上: DateTime64 のパースの一貫性を改善し、秒未満の精度を持つ Unix timestamp がスケーリングされた整数 (1111111111.222 ではなく 1111111111222 のような値) として指定された場合も認識できるようになりました。これにより #13194 はクローズされました。 #21053 (alexey-milovidov).
  • distributed_group_by_no_merge 使用時、イニシエーターではソート済みブロックのマージだけを行うようにしました。 #20882 (Azat Khuzhin).
  • mysql ソースの設定を読み込む際、ClickHouse は、mysql エンドポイントをラウンドロビンで選択するロジックが正しく機能するよう、同じ優先度のレプリカのリストをランダム化するようになりました。これにより #20629 がクローズされます。 #20632 (Alexander Kazakov).
  • 関数 ‘reinterpretAs(x, Type)’ の名称が ‘reinterpret(x, Type)’ に変更されました。#20611 (Maksim Kita) 。
  • RabbitMQ engine で vhost をサポート #20576#20596 (Kseniia Sumarokova).
  • Array と Tuple を組み合わせたデータ型のシリアライゼーションを改善しました。enum データ型と protobuf の enum 型との対応付けを改善しました。Map データ型のシリアライゼーションを修正しました。省略された値にはデフォルト値が設定されるようになりました。#20506 (Vitaly Baranov).
  • 分散DDLタスクの実行とDDLキューのクリーンアップの間で発生していた競合状態を修正しました。これにより、アクティブなワーカーが存在する場合、DDLタスクはZooKeeperから削除されなくなりました。 #20016 を修正しました。#20448 (tavplubix).
  • Alpineイメージで、FQDNやその他のDNS関連関数が正しく動作するようにしました。#20336 (filimonov) 。
  • 明示的に禁止された関数に対して、早期の定数畳み込みを行わないようにしました。 #20303 (Azat Khuzhin).
  • 整数値が Decimal 型に収まらない場合でも、整数から Decimal 型への暗黙的な変換が成功してしまうことがありました。現在は ARGUMENT_OUT_OF_BOUND をスローします。 #20232 (tavplubix).
  • ロック不要の SYSTEM FLUSH DISTRIBUTED#20215 (Azat Khuzhin).
  • count(constant) と sum(1) を count() に正規化しました。これは、プロジェクションのクエリルーティングに必要です。#20175 (Amos Bird) 。
  • bitmap関数で、すべてのネイティブ整数型をサポート。#20171 (Amos Bird).
  • CacheDictionaryComplexCacheDictionarySSDCacheDictionarySSDComplexKeyDictionary が、内部索引として 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.tablesMaterializeMySQL table の詳細情報をすべて表示するようになりました。 #20051 (Stig Bakken).
  • 誤った使い方をした場合にのみ発生し得た、実行可能 Dictionary のデータ競合を修正しました (スクリプトが入力を無視してデータを返す場合) 。 #20045 (alexey-milovidov).
  • MYSQL_OPT_RECONNECT オプションの値を、mysql レプリカの config セクションにある “opt_reconnect” パラメータで制御できるようになりました。#19998 (Alexander Kazakov) 。
  • ユーザーが JSONExtract 関数を呼び出して Float32 型を要求した場合、結果型への不正確な変換を許可するようにしました。たとえば、JSON 内の数値 0.1 は倍精度であり、Float32 では表現できませんが、それでもユーザーはこれを取得したい場合があります。以前のバージョンでは、変換が不正確であることを示すため、非 Nullable 型には 0 を、Nullable 型には NULL を返していました。このロジックは 100% 正しかったものの、ユーザーにとっては意外で、疑問を招いていました。これにより #13962 が解決されました。 #19960 (alexey-milovidov).
  • 一致しない場合に、分散テーブルへのINSERT向けにブロック構造を変換する処理を追加しました。#19947 (Azat Khuzhin) 。
  • system.distributed_ddl_queue テーブルを改善しました。再起動後、MaxDDLEntryID が最後の値で初期化されるようになりました。この PR より前は、新しい DDLTask が処理されるまで MaxDDLEntryID は 0 のままでした。#19924 (Amos Bird) 。
  • MaterializeMySQL テーブルを system.parts に表示する。#19770 (Stig Bakken) 。
  • Buffer プロファイル用に個別の設定ディレクティブを追加しました。 #19721 (Azat Khuzhin).
  • JOIN に関連しない条件を WHERE 句に移動します。#18720#19685 (hexiaoting) 。
  • 非同期送信の保留バイト数に応じて Distributed への INSERT をスロットルできるようになりました (Distributed エンジン向けに bytes_to_delay_insert/max_delay_to_insert および bytes_to_throw_insert 設定が追加されました) 。 #19673 (Azat Khuzhin).
  • デストラクタ内で書き込みエラーが無視されることがある、まれなケースをいくつか修正しました。 #19451 (Azat Khuzhin).
  • 致命的なエラーのスタックトレースでインラインフレームを出力します。 #19317 (Ivan).

バグ修正

  • 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).
  • EXPLAINUNION を含むクエリがクラッシュする不具合を修正しました。#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 の起動に失敗した場合に、stdoutstderr をログに出力するようにしました。この PR 以前は、この場合のエラーメッセージが非常に短く、問題の調査に役立ちませんでした。#20631 (Vitaly Baranov).

ClickHouse リリース 21.2

ClickHouse リリース v21.2.2.8-stable, 2021-02-07

後方互換性を持たない変更

  • ビット演算関数 (bitAndbitOr など) は、浮動小数点の argument では使用できなくなりました。今後は整数への明示的な CAST が必要です。#19853 (Azat Khuzhin).
  • lcm/gcd は浮動小数点数に対して使用できなくなりました。#19532 (Azat Khuzhin).
  • OPTIMIZE TABLE/merges のメモリ追跡を修正し、OPTIMIZE TABLE/merges に対してクエリのメモリ制限と sampling が考慮されるようにしました。#18772 (Azat Khuzhin).
  • 浮動小数点のカラムは partition key として使用できなくなりました。詳しくは #18421 を参照してください。#18464 (hexiaoting).
  • 型定義内での過剰な括弧はサポートされなくなりました。例: Array((UInt8)).

新機能

  • PostgreSQL テーブルエンジン (select/insert の両方に対応し、多次元配列をサポート) を追加し、あわせて table function も追加しました。PostgreSQL Dictionary ソースを追加しました。PostgreSQL データベースエンジンを追加しました。#18554 (Kseniia Sumarokova) 。
  • データ型 Nested が、任意のレベルのネストをサポートするようになりました。Arraysize0NullablenullTuple の要素名などの複合型サブカラムが導入され、カラム全体を読み込まなくても参照できるようになりました。#17310 (Anton Popov).
  • FlatDictionaryHashedDictionaryComplexKeyHashedDictionaryDirectDictionaryComplexKeyDirectDictionaryRangeHashedDictionaryNullable をサポートしました。#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,&quot;world&quot;!') #17659#18542 (nauta) 。
  • 関数 parseDateTimeBestEffortUSOrZeroparseDateTimeBestEffortUSOrNull を追加しました。#19712 (Maksim Kita) 。
  • sign 関数を追加しました。#19527 (flynn).
  • 使用された機能 (関数、テーブルエンジンなど) の情報を system.query&#95;log に追加しました。#18495#19371 (Kseniia Sumarokova) 。
  • 関数 formatDateTime で、日付を四半期形式でフォーマットする %Q 修飾子がサポートされました。#19224 (Jianmei Zhang).
  • play UI で MetaKey+Enter のホットキーのキーバインドをサポートしました。 #19012 (sundyli).
  • map データ型向けに 3 つの関数が追加されました: 1. mapContains(map, key) は、map.keys に 2 番目のパラメータである key が含まれているかどうかを確認します。 2. mapKeys(map) は、すべてのキーを Array 形式で返します 3. mapValues(map) は、すべての値を Array 形式で返します。 #18788 (hexiaoting).
  • #18494 に関連して log_comment 設定を追加しました。#18549 (Zijie Lu) 。
  • argMin および argMax 関数で、Tuple 型の引数をサポートしました。#17359 (Ildus Kurbangaliev).
  • EXISTS VIEW 構文をサポートしました。#18552 (Du Chuan) 。
  • SELECT ALL 構文を追加しました。#18706 を修正しました。#18723 (flynn)。

パフォーマンス改善

  • stat syscalls の回数を減らすことで、パーツの削除を高速化しました。これは以前存在していた最適化を復活させるものです。また、IDisk のインターフェイスをより安全にしました。これにより #19065 をクローズします。#19086 (alexey-milovidov).
  • WITH ステートメントで宣言された別名が、索引解析で正しく使われるようになりました。WITH column AS alias SELECT ... WHERE alias = ... のようなクエリでも、索引を使用できるようになりました。#18896 (Amos Bird).
  • optimize_alias_column_prediction (デフォルトで有効) を追加しました。これにより、次のことが可能になります。- パーティションプルーニングおよびセカンダリ索引によるデータスキップで、WHERE 句内の別名付きカラムを考慮します。- optimize_trivial_count の単純な count クエリで、WHERE 句内の別名付きカラムを考慮します。- optimize_aggregation_in_order / optimize_read_in_order で、GROUP BY / ORDER BY 内の別名付きカラムを考慮します。#16995 (sundyli).
  • aggregate function sum を高速化しました。この改善は合成 benchmark でのみ確認できるもので、実用面での効果はあまり大きくありません。#19216 (alexey-milovidov).
  • より高いパフォーマンスを実現するため、libc++ を更新し、別の ABI を使用するようにしました。#18914 (Danila Kutenin).
  • 論理的に等価な場合、sumIf() および sum(if()) 関数を countIf() 関数に書き換えるようにしました。#17041 (flynn).
  • s3_max_connections 設定で制御される、S3 接続用の接続プールを使用するようにしました。#13405 (Vladimir Chebotarev).
  • 容量を節約するため、文字列カラムをより高効率に圧縮できる zstd long オプションのサポートを追加しました。#17184 (ygrek).
  • 接続のたびに設定へアクセスしないようにすることで、サーバーのレイテンシをわずかに改善しました。#19863 (alexey-milovidov).
  • Buffer engine の複数レイヤーにおけるロック競合を低減しました。#19379 (Azat Khuzhin).
  • クエリプランの Filter step を Expression + Filter のペアに分割できるようにしました。Expression + Expression のマージ最適化 (#17458) と組み合わせることで、一部の expression では実行を Filter step の後まで遅らせられる可能性があります。#19253 (Nikolai Kochetov).

改善

  • 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_logsystem.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).
  • 長い名前を ? でマスクすることなくクエリを正規化できるように、normalizeQueryKeepNamesnormalizedQueryHashKeepNames を追加しました。これにより、複雑なクエリログをより適切に分析できるようになります。#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))NULLCAST しようとした際に発生していた Attempt to read after eof error を修正しました。これにより、nullable string から decimal を parse できない場合、関数 CASTNULL を返すようになりました。#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 関数、substringarraySum での 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).
  • 集約関数 timeSeriesGroupSumtimeSeriesGroupRateSum を削除しました。知人いわく、これらは一度も正常に動作していなかったためです。これにより #16869 を修正します。もしこれらの関数を問題なく使えていた場合は、feedback@clickhouse.com までメールでお知らせください。#17423 (alexey-milovidov).
  • toUnixTimestamp(Date()) を禁止しました (以前は単に Date の UInt16 表現を返していました) 。#17376 (Azat Khuzhin).
  • avg および avgWeighted 関数で拡張整数型 (Int128Int256UInt256) を使用できるようにしました。また、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).
  • mannWitneyUTeststudentTTestwelchTTest の集約関数を追加しました。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_logquery_id カラムを追加しました。#10097 をクローズしました。#18644 (flynn).
  • カラム指定付きの CREATE TABLE AS SELECT を許可しました。例: CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;#18060 (Maksim Kita).
  • arrayMinarrayMaxarrayAvg の集約関数が追加されました。#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).
  • 関数 toModifiedJulianDayfromModifiedJulianDaytoModifiedJulianDayOrNull、および fromModifiedJulianDayOrNull を追加しました。これらの関数は、プロレプティック・グレゴリオ暦の日付と修正ユリウス日数の間で変換を行います。#17750 (PHO).
  • カスタム TLD リストを使用する機能を追加しました。関数 firstSignificantSubdomainCustomcutToFirstSignificantSubdomainCustom を追加しました。#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外のページネーション用に設定 limitoffset を追加: #16176 これらは API の構築に役立ちます。これら 2 つの設定は、select * from (your_original_select_query) t limit xxx offset xxx; を追加した場合と同様に、SELECT クエリに影響します。 #17633 (hexiaoting).
  • -SimpleState という新しい集約関数コンビネータを追加し、クエリ経由で SimpleAggregateFunction 型を構築できるようにしました。これは AggregatingMergeTree エンジンのマテリアライズドビューを定義する際に有用で、プロジェクションにも役立ちます。#16853 (Amos Bird).
  • clickhouse-clientclickhouse-localqueries-file パラメータが追加されました。#15930 (Maksim Kita).
  • clickhouse-benchmarkquery パラメーターが追加されました。#17832 (Maksim Kita).
  • EXPLAIN ASTSELECT 以外のクエリもサポートするようになりました。 #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 内の PODArrayPODArrayWithStackMemory に置き換えました。 #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).
  • -If combinator はデバーチャライズされ、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) 。SummingMergeTreeSimpleAggregateFunction を使用する際の別の修正です。これにより #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, arrayAvgInt128Int256UInt256 に対応しました。#18147 (Maksim Kita).
  • Set および Join のストレージ設定に disk を追加しました。 #18112 (Grigory Pervakov).
  • アクセス制御: テーブル関数 merge() は、現在のユーザーがデータの取得元となる各テーブルに対する SELECT 権限を持っていることを必須とするようになりました。この PR で #16964 を修正します。 #18104 #17983 (Vitaly Baranov).
  • 一時テーブルは、そのテーブルが作成されたセッションでのみ、システムテーブル system.tablessystem.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_columnsasterisk_include_alias_columns を有効にすると、ワイルドカードクエリに MATERIALIZED / ALIAS などの動的カラムが含まれるようになりました。 #17462 (Ken Chen) 。
  • config.xml<ttl> 属性を使って、システムログテーブル から古いエントリを削除するための 有効期限 (TTL) を指定できるようになりました。 #17438 (Du Chuan).
  • 現在、MySQL および PostgreSQL プロトコル経由でサーバーに送られるクエリには、それぞれ固有のインターフェイス種別があります (これはテーブルsystem.query_loginterfaceカラムで確認できます) 。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))NULLCAST しようとした際に発生していた Attempt to read after eof error を修正しました。これにより、nullable string から decimal を parse できない場合、関数 CASTNULL を返すようになりました。#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 または FULL join を含むサブクエリの後に ORDER BY を使用した際に発生する可能性のある Pipeline stuck エラーを修正しました。#18550 (Nikolai Kochetov).
  • 対応する mutation の kill 後に ALTER クエリがハングする可能性があるバグを修正しました。thread fuzzer によって発見されました。#18518 (alesapin).
  • parseDateTimeBestEffort 関数で 12AM が適切にサポートされるようになりました。これにより #18402 が修正されました。#18449 (vladimir-golovchenko).
  • Nullable(String) の引数で toType(...) 関数 (toDatetoUInt32 など) を実行した際に発生していた 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 FILLWITH TIES の両方を含むクエリで発生していた不整合を修正しました #17466#18188 (hexiaoting).
  • 最後のカラムでパースエラーが発生した場合に、デフォルト値で行を insert するよう修正しました。 #17712#18182 (Jianmei Zhang).
  • setting profile を設定しようとした際に発生する Unknown setting profile error を修正しました。#18167 (tavplubix) 。
  • クエリ MODIFY COLUMN ... REMOVE TTL で、実際にはカラムの有効期限 (TTL) が削除されない不具合を修正しました。#18130 (alesapin).
  • S3 URL のパース時の std::out_of_range: basic_string を修正しました。#18059 (Vladimir Chebotarev) 。
  • DateTime64Date の比較を修正しました。#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 を実行している環境で、Atomic database で RENAME クエリを実行すると Function not implemented error が発生する不具合を修正しました。#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) 。
  • JOIN tableから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).
  • OpenSSLBoringSSL に変更しました。これにより、サニタイザ関連の問題を回避できます。これにより #12490 が修正されます。これにより #17502 が修正されます。これにより #12952 が修正されます。#18129 (alexey-milovidov).
  • Sys/V init 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).
  • #17309MSan レポート 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).
最終更新日 2026年6月10日