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

2021年変更履歴

ClickHouse リリース v21.12, 2021-12-15

後方互換性のない変更

  • 以前、望ましくない動作をしていた機能に対する修正。 Kafka/RabbitMQ/FileLog に対する直接 SELECT は許可されなくなりました。stream_like_engine_allow_direct_select を設定することで有効化できます。マテリアライズドビューがアタッチされている場合は、設定で有効化されていても直接 SELECT は許可されません。Kafka および RabbitMQ では、直接 SELECT が許可されている場合でも、デフォルトではメッセージをコミットしません。直接 SELECT でコミットを有効にするには、ユーザーはストレージレベルの設定 kafka{rabbitmq}_commit_on_select=1(デフォルトは 0)を使用する必要があります。#31053Kseniia Sumarokova)。
  • 新しい関数の動作のわずかな変更。 JSON_VALUE でクオートされていない文字列を返すように変更しました。#27965 をクローズします。#31008Kseniia 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 にリネームしました。#30497Kruglov Pavel)。
  • すでに未使用となっているコードのさらなる廃止。 これは、20.6 より古いバージョンの ClickHouse を使用しているユーザーのみに影響します。「リーダー選出」メカニズムは、20.6 以降は複数のリーダーがサポートされているため、ReplicatedMergeTree から削除されました。より古いバージョンからアップグレードしており、旧バージョンのレプリカの一部がリーダーである場合、アップグレード後にサーバーは起動に失敗します。新しいバージョンを起動できるようにするには、旧バージョンのレプリカを停止してください。その後は、20.6 より古いバージョンへダウングレードすることはできなくなります。#32140tavplubix)。

新機能

  • clickhouse-keeper で ZooKeeper の Four Letter Words コマンドの実装をさらに拡充しました: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands#28981 (JackyWoo)。これにより、clickhouse-keeper は機能的に一通り揃い、feature complete な状態になりました。
  • Bool データ型のサポート。#31072kevin wan)。
  • File、URL、HDFS ストレージおよび INSERT INTO テーブル関数での PARTITION BY 対応を追加。 #30273 をクローズ。 #30690Kseniia Sumarokova)。
  • INSERT 時にはチェックを行わない CONSTRAINT ... ASSUME ... を追加しました。より便利に最適化できるよう、クエリを CNF(https://github.com/ClickHouse/ClickHouse/issues/11749)に変換する機能を追加しました。制約を用いた単純なクエリ書き換えを追加しました(現在は単純なマッチングのみ対応しており、今後 <,=,> などをサポートするよう改善予定です)。可能な場合に重いカラムを軽いカラムに置き換えられる機能を追加しました。#18787Nikita Vasilev)。
  • http/url 関数向けの Basic 認証をサポート。 #31648 (michael1589)。
  • WITH FILL 修飾子の STEP 句で INTERVAL 型をサポートしました。 #30927 (Anton Popov).
  • 複数ファイルからの並列読み取りおよび FROM INFILE 句でのグロブパターンのサポートを追加しました。 #30135 (Filatenkov Artur).
  • Identifier テーブルおよびデータベースクエリパラメータのサポートを追加し、#27226 をクローズ。 #28668Nikolay Degterinsky)。
  • 要約: テキストフォーマットの網羅性と一貫性が大きく改善されました。 フォーマット TSVTSVRawCSV および JSONCompactEachRowJSONCompactStringsEachRow をリファクタリングし、コードの重複を削除し、-WithNames および -WithNamesAndTypes サフィックスを持つフォーマット向けの共通ベースインターフェースを追加しました。CSVWithNamesAndTypesTSVRawWithNamesTSVRawWithNamesAndTypesJSONCompactEachRowWIthNamesJSONCompactStringsEachRowWIthNamesRowBinaryWithNames フォーマットを追加しました。TSVWithNamesAndTypesTSVRaw(WithNames/WIthNamesAndTypes)CSVWithNamesAndTypesJSONCompactEachRow(WithNames/WIthNamesAndTypes)JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes) フォーマットで並列パースをサポートしました。RowBinaryWithNamesAndTypes フォーマットでカラムのマッピングと型チェックをサポートしました。input_format_with_types_use_header 設定を追加し、&lt;format_name&gt;WIthNamesAndTypes フォーマットに書かれている型がテーブル構造と一致しているかどうかをチェックするかどうかを指定できるようにしました。input_format_csv_empty_as_default 設定を追加し、CSV フォーマットで input_format_defaults_for_omitted_fields の代わりに使用するようにしました(この設定は csv_empty_as_default を制御すべきではないため)。input_format_defaults_for_omitted_fields 設定の使用方法を修正しました(以前は csv_empty_as_default としてのみ使われていましたが、本来は省略されたフィールドに対するデフォルト式の計算を制御するものです)。TSVRaw フォーマットの Nullable 入出力を修正し、このフォーマットが TSV への挿入と完全互換になるようにしました。input_format_null_as_default が有効な場合に LowCardinality(Nullable) へ NULL を挿入する処理を修正しました(以前は実際の NULL ではなくデフォルト値が挿入されていました)。JSONStringsEachRow / JSONCompactStringsEachRow フォーマットでの文字列デシリアライズを修正しました(文字列が最初の '\n' または '\t' までしかパースされていませんでした)。Template 入力フォーマットで Raw エスケープルールを使用できるようにしました。JSONCompactEachRow(WithNames/WIthNamesAndTypes) 入力フォーマット向けの診断情報を追加しました。min_chunk_bytes_for_parallel_parsing 設定値が 1 行分のバイト数より小さい場合に、-WithNames フォーマットの並列パースで発生するバグを修正しました。#30178Kruglov Pavel)。CustomSeparated 入出力フォーマットでカラムの名前と型を出力/パースできるようにしました。TSVWithNames/WithNamesAndTypes と同様の CustomSeparatedWithNames/WithNamesAndTypes フォーマットを追加しました。#31434Kruglov Pavel)。
  • Aliyun OSS Storage をサポート。 #31286 (cfcz48).
  • 設定ファイルでグローバルスレッドプールのすべての設定を行えるようにしました。 #31285 (Tomáš Hromada).
  • ウィンドウ関数 exponentialTimeDecayedSumexponentialTimeDecayedMaxexponentialTimeDecayedCountexponentialTimeDecayedAvg が導入されました。これらは大きなウィンドウに対しては exponentialMovingAverage よりも効果的です。また、さらに多くのユースケースをカバーできるようになりました。 #29799 (Vladimir Chebotarev)。
  • LZ4 を使用してログをファイルに書き込む前に圧縮するオプションを追加しました。#23860 をクローズしました。#29219Nikolay Degterinsky)。
  • CROSS JOIN と同等の意味を持つ JOIN ON 1 = 1 をサポートしました。これにより #25578 がクローズされました。#25894Vladimir C)。
  • Map 型用の Map コンビネータを追加。既存のマップされた配列用の sum-, min-, max- Mapsum-, min-, max- MappedArrays に名称変更。 #24539 (Ildus Kurbangaliev).
  • HTTP からの読み取りを再試行可能にしました。#29696 をクローズしました。#29894Kseniia Sumarokova)。

実験的機能

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

パフォーマンスの改善

  • s3 / url / hdfs 形式で ParquetORCArrow を読み取る際のメモリ使用量を削減しました(設定 input_format_allow_seeks によって制御され、デフォルトで有効です)。また、シークを制御するための設定 remote_read_min_bytes_for_seek を追加しました。 #10461 をクローズ。 #16857 をクローズ。 #30936Kseniia Sumarokova)。
  • JOIN ON における定数条件の最適化を追加しました。#26928 を参照。 #27021Vladimir C)。
  • JSONEachRowWithProgressPrettyCompactMonoBlock を除くすべてのテキストフォーマットで、並列でのフォーマット処理をサポートしました。 #31489Kruglov Pavel)。
  • Nullable カラムに対する count の実行を高速化しました。 #31806Raúl Marín)。
  • 集約関数 avgsumCount の実行を高速化しました。 #31694Raúl Marín)。
  • JSON および XML 出力フォーマットのパフォーマンスを改善しました。 #31673alexey-milovidov)。
  • ブロックデバイスへのデータ同期のパフォーマンスを改善しました。これにより #31181 が解決されました。 #31229zhanglistar)。
  • LiveView テーブルでのクエリ実行時のパフォーマンス問題を修正しました。 #30831 を修正。 #31006vzakaznikov)。
  • クエリのパース処理を高速化しました。 #31949Raúl Marín)。
  • プレーン/タグ付きメトリクス用に GraphiteMergeTree のロールアップルールを分割できるようにしました(オプションの rule_type フィールド)。 #25122Michail Safronov)。
  • remote() に対する不要な DESC TABLE リクエストを削除しました(remote('127.1', system.one)(すなわち、文字列ではなく識別子を db.table として指定した場合)で不要な DESC TABLE リクエストが発生していました)。 #32019Azat Khuzhin)。
  • 設定 optimize_functions_to_subcolumns が有効な場合、サブカラムの読み取りを行うように関数 tupleElement を最適化しました。 #31261Anton Popov)。
  • 設定 optimize_functions_to_subcolumns が有効な場合、サブカラム key の読み取りを行うように関数 mapContains を最適化しました。 #31218Anton Popov)。
  • 設定 merge_tree_min_rows_for_concurrent_read_for_remote_filesystem および merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem を追加しました。 #30970Kseniia Sumarokova)。
  • StorageMergeTree において、異なるパーティションに対する mutation をスキップするようにしました。 #21326Vladimir Chebotarev)。

改善

  • あるテーブルまたはディクショナリに依存するテーブルまたはディクショナリが存在する場合、そのテーブルやディクショナリを DROP できないようにしました。 #30977 (tavplubix).
  • 集約関数の状態にバージョニングを導入しました。これにより、集約関数状態のシリアライズ形式に後方互換性を保った変更を加えられるようになりました。#12552 をクローズ。#24820Kseniia Sumarokova)。
  • PostgreSQL 互換の ALTER MODIFY COLUMN 構文をサポートしました。 #32003 (SuperDJY).
  • RangeHashedDictionaryComplexKeyRangeHashedDictionaryupdate_field のサポートを追加しました。 #32185 (Maksim Kita)
  • murmurHash3_128 関数と sipHash128 関数は、任意の数の引数を受け付けるようになりました。これにより #28774 が解決されました。 #28965小路)。
  • HDFS ストレージのデフォルト式をサポートし、ソースがカラム指向の場合のフェッチ処理を最適化しました。 #32256 (李扬)。
  • OpenTelemetry のスパンのオペレーション名を改善しました。 #32234 (Frank Chen).
  • 出力フォーマット JSONEachRow の場合は、Content-Type: application/x-ndjsonhttp://ndjson.org/)を指定します。#32223Dmitriy Dorofeev)。
  • Template/CustomSeparated フォーマットにおける、クオートによるエスケープ規則を用いた未知のフィールドのスキップ処理を改善しました。これまではクオートされた文字列のみスキップ可能でしたが、今ではあらゆる型の値をスキップできます。 #32204 (Kruglov Pavel).
  • clickhouse-keeper は、重複した ID またはエンドポイントを含む場合には起動せず、設定変更の適用も拒否するようになりました。#31339 を修正しました。#32121alesapin)。
  • URL エンジンが送信する 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 をクローズ。#32049leosunli)。
  • ClickHouse の exception および exception_code フィールドを OpenTelemetry のスパンログに追加しました。 #32040 (Frank Chen).
  • クエリ例外が発生した場合にクエリレベルで duration が 0 になっていた OpenTelemetry の span ログを改善しました。#32038 (Frank Chen).
  • Int256LowCardinality を作成できなかった問題を修正しました。 #31832 (alexey-milovidov).
  • engine / partition_by が異なる場合に system.*_log テーブルを再作成するようにしました。 #31824 (Azat Khuzhin).
  • MaterializedMySQL: 'table' という名前のテーブルに関する不具合を修正。 #31781 (Håvard Kvålen).
  • ClickHouse の辞書ソース: 事前定義済み接続をサポート。#31705 を解決。#31749Kseniia Sumarokova)。
  • Kafka および RabbitMQ エンジンに対して、(他の統合テーブルエンジンと同様に)事前定義された接続設定を使用できるようにしました。 #31691 (Kseniia Sumarokova).
  • 履歴をたどっている間は、常に clickhouse-client のプロンプトを再描画するようになりました。これにより、画面に収まりきらない非常に長いクエリを操作する際の使い勝手が向上します。 #31675 (alexey-milovidov) (author: Amos Bird).
  • 履歴(行/履歴ではなく)を移動するためのキーバインドを追加しました。 #31641 (Azat Khuzhin).
  • max_execution_time のチェックを改善しました。タイムアウトチェックが行われず、クエリが過度に長時間実行されてしまう場合があった問題を修正しました。 #31636 (Raúl Marín).
  • パスワードハッシュが無効なために users.xml を読み込めない場合の例外メッセージを改善しました。これにより #24126 がクローズされました。 #31557 (Vitaly Baranov).
  • config でこれらのマクロが定義されていない場合、ReplicatedMergeTree の引数内でマクロを展開するときに、Replicated データベースの引数からシャード名とレプリカ名を使用するようにしました。#31471 をクローズしました。#31488tavplubix)。
  • min/max/count projection の解析が改善されました。allow_experimental_projection_optimization を有効にすると、パーティションキーのカラムと併せて仮想 min/max/count projection を使用できるようになりました。#31474 (Amos Bird).
  • clickhouse-local--pager サポートを追加しました。 #31457 (Azat Khuzhin).
  • 対話的なクエリ編集時のエディタ待機処理を修正(SIGWINCHwaitpid() が -1 を返し、EDITORclickhouse-local / clickhouse-client が並行実行される状況での不具合)。#31456 (Azat Khuzhin).
  • JSONCompactStrings(EachRow) フォーマットでフィールドの後ろに余分なデータがある場合は、例外をスローするように変更しました。 #31455 (Kruglov Pavel)。
  • http_send_timeout および http_receive_timeout のデフォルト値が 1800(30 分)から 180(3 分)に変更されました。 #31450 (tavplubix)。
  • MaterializedMySQLCREATE TABLE ... LIKE ... DDL クエリを処理できるようになりました。 #31410 (Stig Bakken)。
  • system テーブルに対して show create table を実行した際に、擬似的な CREATE TABLE クエリを返すようにしました。 #31391 (SuperDJY).
  • 以前は numbers テーブル関数に対してのみ進捗が表示されていましたが、現在は numbers_mt に対しても表示されるようになりました。 #31318 (Kseniia Sumarokova).
  • セッション開始時のユーザーのロールが行ポリシーの判定に使用されるようになりました。#31080#31262Vitaly Baranov)。
  • 非推奨の設定が変更された場合は、system.warnings に警告を表示するようにしました。 #31252 (tavplubix).
  • MergeTree のバックグラウンドクリーンアップタスクに対するバックオフ処理を改善しました。設定 merge_tree_clear_old_temporary_directories_interval_secondsmerge_tree_clear_old_parts_interval_seconds をユーザー設定から MergeTree 設定に移動しました。#31180 (tavplubix)。
  • これにより、すべてのレプリカはプロファイルイベントのカウンタについて、クライアントに差分情報のみを送信するようになります。 #31155Dmitry Novik)。これによって clickhouse-client--hardware_utilization オプションが実用的になります。
  • clickhouse-client で複数行編集をデフォルトで有効化。 #31121 に対処。 #31123 (Amos Bird)。
  • ALTER クエリにおける関数名の正規化。これにより、インデックスやプロジェクション付きでテーブルを作成する場合と、ALTER コマンドでインデックスやプロジェクションを追加する場合との間でメタデータの不整合が発生するのを防ぎます。これは https://github.com/ClickHouse/ClickHouse/pull/20174 の後続 PR です。バグ報告もなく、このシナリオ自体も比較的まれであるため、改善として扱います。#31095Amos 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 のフォローアップである。#31057Amos Bird)。
  • ClickHouse の辞書ソース内のローカルセッションは、セッションログにイベントを送信しなくなりました。これにより、シャットダウン時に発生する可能性のあったデッドロック(tsan アラート)を解消します。また、この PR では不安定だった test_dictionaries_dependency_xml/ も修正しています。 #31013 (Vitaly Baranov)。
  • ALTER コマンドでのロックを削減しました。 #31010 (Amos Bird).
  • clickhouse-local のインタラクティブモードにおける --verbose オプションを修正し、ファイルへのログ出力を可能にしました。 #30881 (Kseniia Sumarokova).
  • MySQL や PostgreSQL と同様に、clickhouse-client\l\d\c コマンドを追加しました。 #30876 (Pavel Medvedev).
  • clickhouse-local または clickhouse-client の場合: --query または --queries-file と一緒に --interactive オプションが指定されている場合は、まず非インタラクティブモードと同様にそれらを実行してから、インタラクティブモードを開始します。 #30851 (Kseniia Sumarokova).
  • 「The local set of parts of X doesn't look like the set of parts in ZooKeeper」(DROP が ZooKeeper から znode を削除する際に失敗した場合)というエラーが発生する可能性を修正しました。 #30826 (Azat Khuzhin).
  • Avro フォーマットが Kafka に対応しました。output_format_avro_rows_in_file 設定が追加されました。 #30351 (Ilya Golshtein).
  • 1 つまたは任意の数の PostgreSQL スキーマを 1 つの MaterializedPostgreSQL データベースに対して指定できるようにしました。 #28901 をクローズしました。 #29324 をクローズしました。 #28933Kseniia Sumarokova)。
  • clickhouse-keeper の内部通信に使用するデフォルトポートを 44444 から 9234 に変更しました。#30879 を修正しました。#31799alesapin)。
  • Decimal 引数をサポートする transform 関数を実装。 #31839 (李帅).
  • 不正な hdfs URL の場合に hdfs URL 構造の追加チェックを行うことで、デバッグサーバーの異常終了とリリースサーバーでの DB::Exception: std::out_of_range: basic_string エラーを修正しました。 #31042 (Kruglov Pavel).
  • hdfs テーブル関数/エンジンで起こりうるアサートを修正し、テストを追加。 #31036 (Kruglov Pavel)。

不具合修正

  • 位置引数が有効な場合の GROUP BY / ORDER BY / LIMIT BY におけるエイリアスの扱いを修正。#31173 をクローズ。#31741Kseniia Sumarokova)。
  • Map 型を使用した Buffer テーブルエンジンの挙動を修正。 #30546 を解決。 #31742Anton Popov)。
  • use_uncompressed_cache を有効にした MergeTree テーブルからの読み取り処理を修正。 #31826 (Anton Popov).
  • empty_result_for_aggregation_by_empty_set 設定が有効な場合に、実行する処理がない mutation がスタックしたままになる問題を修正しました。 #32358 (Nikita Mikhaylov).
  • Protobuf 書き込み時にカラムがスキップされる問題を修正しました。この PR は #31160 を解決するもので、コメント #31160#issuecomment-980595318 を参照してください。#31988Vitaly Baranov)。
  • サブクエリ内の不要なカラムを削除する際のバグを修正。GROUP BY を持たないクエリ内に集約関数がある場合、その列が不要と判断されても削除しないようにしました。 #32289 (dongyifeng).
  • クォータの上限には達していなかったにもかかわらず、超過と判定されていた。この PR は #31174 を修正する。#31337sunny)。
  • 部分的な権限の取り消しが使用されている場合の SHOW GRANTS を修正。 この PR は #31138 を修正します。 #31249Vitaly Baranov)。
  • cgroup 制限付きのコンテナ内で ClickHouse を実行した場合、メモリ使用量が正しく見積もられていませんでした。 #31157 (Pavel Medvedev)。
  • ALTER ... MATERIALIZE COLUMN ... クエリで、デフォルト式のデータ型がカラムのデータ型と一致しない場合に正しく処理されない問題を修正しました。 #32348 (Anton Popov).
  • Decimal 引数を取る集約関数 avgWeighted で発生していた SIGFPE によるクラッシュを修正しました。#32053 を解決。#32303tavplubix)。
  • Dictionary テーブルが同名の XML 辞書を参照している場合に、Cannot attach 1 tables due to cyclic dependencies エラーでサーバーの起動に失敗することがありましたが、修正されました。Fixes #31315. #32288 (tavplubix).
  • Quoted エスケープルールにおいて、Nullable(Float) の NaN 値をデシリアライズする際に発生するパースエラーを修正しました。 #32190 (Kruglov Pavel)。
  • XML 辞書: テーブル作成クエリで使用される識別子は、より新しいバージョンへのアップグレード時に default_database で修飾できるようになりました。#31963 をクローズ。 #32187 (Maksim Kita).
  • 一部のレプリカで replicated_can_become_leader 設定が無効化されている場合、クォーラム付きで挿入する際のアクティブなレプリカ数が正しく判定されないことがありました。この問題を修正しました。 #32157 (tavplubix)。
  • 辞書: カスタムデータベースクエリで {condition} が機能しない問題を修正。 #32117 (Maksim Kita).
  • cast_keep_nullable を用いた Nullable からの CAST を修正(たとえば toUInt32OrDefault(toNullable(toUInt32(1))) で発生していた PARAMETER_OUT_OF_BOUND エラーを解消)。 #32080 (Azat Khuzhin).
  • 一部の特殊なケースにおける Join ストレージの CREATE TABLE を修正。#31680 をクローズ。#32066SuperDJY)。
  • パーツをデタッチする際に発生していた Directory ... already exists and is not empty エラーを修正しました。 #32063 (tavplubix).
  • MaterializedMySQL(実験的機能):MySQL からの DECIMAL データの解釈誤りを修正。 #31990 (Håvard Kvålen)。
  • FileLog(実験的機能)エンジンが、テーブルの作成に失敗した際に不要なメタデータディレクトリを作成してしまう問題を修正しました。Fix #31962. #31967 (flynn).
  • すべてのレプリカでパーツが失われ、同じパーティション内に他のパーツが存在しない場合、一部の GET_PART エントリがレプリケーションキュー内でハングすることがあります。パーティションキーが整数型のカラムまたは Date[Time] のみを含む場合については、この問題は修正済みです。#31485 を修正。#31887tavplubix)。
  • UUID 型の引数を取る関数 empty および notEmpty の不具合を修正。#31819 を修正。#31883Anton Popov)。
  • KeeperTCPHandler を構築する際、設定パスを keeper_server.session_timeout_ms から keeper_server.coordination_settings.session_timeout_ms に変更します。operation_timeout についても同様に変更します。 #31859 (JackyWoo)。
  • NULL を許容する主キーが使用されている場合の Nullable 型の無効なキャストを修正しました(NULL を許容する主キーは推奨されない機能ですので、使用しないでください)。これにより #31075 が修正されました。#31823Amos Bird)。
  • SQL の再帰 UDF で発生していたクラッシュの不具合を修正。#30856 をクローズ。#31820Maksim Kita)。
  • 型指定ありの関数 dictGet が、属性の型が Nullable の辞書に対して使用されたときにクラッシュする不具合を修正しました。#30980 を修正します。#31800Maksim Kita)。
  • ODBC クエリの結果が空の場合(一部の ODBC ドライバーで発生)、クラッシュする問題を修正しました。 #31465 をクローズしました。 #31766Kseniia 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 が解決されました。#31707alexey-milovidov)。
  • UTF-8 文字を含む文字列に対する ngrams 関数の動作を修正しました。 #31706 (yandd).
  • input_format_allow_errors_num および input_format_allow_errors_ratio 設定が IPv4 などのドメイン型の解析時に機能していなかった問題を修正しました。#31686 を修正。#31697tavplubix)。
  • MATERIALIZE COLUMN における null ポインタ例外を修正しました。 #31679 (Nikolai Kochetov).
  • Ordinary データベース内の DDL dictionary の名前変更を試みた際に、RENAME TABLE クエリが正しく動作していなかった問題を修正しました。 #31638 (tavplubix).
  • sparkbar 集約関数を本来意図されていたとおりに実装しました。詳細は #26175#issuecomment-960353867 および comment を参照してください。#31624小路)。
  • 列名のみが無効な UTF-8 シーケンスを含む場合に、生成される JSON が不正になる問題を修正しました。 #31534 (Kevin Michel).
  • この最適化に存在するバグが修正されるまで、partial_merge_join_left_table_buffer_bytes を無効にしました。#31009 を参照してください。冗長なオプション partial_merge_join_optimizations を削除しました。#31528Vladimir C)。
  • 短い INSERT SELECT クエリの進行状況表示を修正。 #31510Azat Khuzhin)。
  • GROUP BY および位置指定引数における誤動作を修正。#31280#issuecomment-968696186 をクローズ。#31420Kseniia Sumarokova)。
  • S3 用 STS クレデンシャルプロバイダで nullptr が発生する問題を解消。 #31409 (Vladimir Chebotarev).
  • 誤っていたため、インデックス解析での notLike 関数の使用を削除しました。 #31169 (sundyli).
  • 一部の coordination ログが失われ、最新のログよりも新しいスナップショットが存在する場合に起動できなくなる不具合があった Keeper のバグを修正。 #31150 (alesapin).
  • ローカル join において右側の Distributed テーブルを書き換えるようにしました。 #25809 を解決しました。 #31105 (abel-cheng).
  • Merge テーブルでのエイリアスおよび WHERE 句の処理を修正しました(以前はまったく動作していませんでした)。#28802 をクローズ。#31044Kseniia Sumarokova)。
  • 引用符付き識別子を使用する JSON_VALUE/JSON_QUERY を修正しました。これにより、JSON パス内でスペースを使用できるようになります。#30971 をクローズしました。#31003Kseniia Sumarokova)。
  • 行指向ではないフォーマットで formatRow 関数を使用するとセグメンテーションフォルトが発生していました。そのようなフォーマットではこの関数を使用できないようにしました(意味をなさないため)。 #31001 (Kruglov Pavel)。
  • マテリアライズドビューを削除した後に SELECT クエリを実行すると失敗する不具合を修正しました。#30691 で発見された問題です。#30997Kseniia Sumarokova)。
  • ATTACH PARTITION ... FROM および MOVE PARTITION ... の場合には max_partition_size_to_drop チェックをスキップするようにしました #30995Amr Alaa)。
  • INTERSECTEXCEPT 演算子に関するいくつかのコーナーケースを修正しました。#30803 をクローズしました。 #30965 (Kseniia Sumarokova)。

ビルド/テスト/パッケージングの改善

  • 非 x86 ビルドでの誤ったフィルタリング結果を修正しました。これにより #31417 がクローズされます。また #31524 もクローズされます。#31574alexey-milovidov)。
  • ClickHouse のビルドを完全に再現可能(異なるマシンでもバイト単位で同一)にしました。これにより #22113 がクローズされます。#31899alexey-milovidov)。再現可能ビルドを可能にするため、バイナリからビルドディレクトリへのファイルシステムパスを削除しました。これは #22113 のために必要でした。#31838alexey-milovidov)。
  • zlib-ngcassandramariadb-connector-c および xzre2sentrygsaslarrowprotobuf について、自前の CMakeLists を使用するようにしました。これは #20151 のために必要です。#9226 の一部です。ビルドシステムから煩わしい不要物を取り除くための小さな一歩です。#30599alexey-milovidov)。
  • Hermetic ビルド: 固定バージョンの libc を使用し、ビルド中にホスト OS 由来のソースファイルやバイナリファイルが一切使用されないようにしました。これにより #27133 がクローズされます。#21435 がクローズされます。#30462 がクローズされます。#30011alexey-milovidov)。
  • 特定の関数を容易にファジングできるようにするため、getFuzzerData() 関数を追加しました。これにより #23227 がクローズされます。#27526Alexey Boykov)。
  • Docker 内での capabilities 設定をより正確に行うようにしました。#31802Constantine Peresypkin)。
  • clang のコンパイルオプション -fstrict-vtable-pointers-fwhole-program-vtables を有効化しました。#20151Maksim Kita)。
  • FreeBSD 向けクロスコンパイル用のツールチェーン tarball をダウンロードしないようにしました。#31672alexey-milovidov)。
  • RISC-V の初期サポートを追加しました。既知の注意点およびテスト済みのビルドコマンドについては development/build-cross-riscv を参照してください。#31309Vladimir Smirnov)。
  • パラメータ -DENABLE_TESTS=OFF を指定した場合に、ARM マシン上でコンパイルできるようにしました。#31007zhanghuajie)。

ClickHouse リリース v21.11, 2021-11-09

後方互換性のない変更

  • SQL/JSON 関数における json_path 引数と json 引数の順序を、標準仕様に合わせて変更しました。#30449 をクローズします。 #30474Kseniia Sumarokova)。
  • MergeTree テーブル設定 write_final_mark を削除しました。今後は常に true になります。 #30455Kseniia Sumarokova)。対応は不要で、すべてのテーブルは新しいバージョンと互換性があります。
  • 関数 bayesAB は削除されました。この関数の改訂版を再度提供することにぜひご協力ください。これにより #26233 がクローズされます。 #29934alexey-milovidov)。
  • これは、すでに実験的な clickhouse-keeper サポートの利用を開始している場合にのみ該当します。ClickHouse Keeper のスナップショットは、独自の ClickHouse LZ4 ブロック圧縮ではなく、デフォルトで ZSTD コーデックを使って圧縮されるようになりました。この挙動は、compress_snapshots_with_zstd_format コーディネーション設定(すべてのクォーラムレプリカで同じ値である必要があります)で無効化できます。後方互換性の問題が発生する可能性はかなり低く、新しいノードが(復旧時などに)ZSTD 形式のスナップショットを、ZSTD 形式のスナップショットを読み取れない古いノードに送信した場合にのみ発生し得ます。 #29417alesapin)。

新機能

  • 新しい非同期 INSERT モードでは、挿入されたデータを蓄積し、バックグラウンドで単一のバッチとして書き込むことができます。クライアント側では、クエリ内にインラインでデータを含める INSERT クエリ、または別のバッファに格納されたデータを用いる INSERT クエリ(例:HTTP プロトコル経由の INSERT クエリ)に対して async_insert を設定することで有効化できます。wait_for_async_insert が true(デフォルト)の場合、クライアントはデータがテーブルにフラッシュされるまで待機します。サーバー側では、async_insert_threadsasync_insert_max_data_sizeasync_insert_busy_timeout_ms の各設定によって制御されます。#18282 を実装しています。#27537Anton Popov)。#20557Ivan)。パフォーマンスに関する注意点:非同期 INSERT を使用すると、1 秒あたり最大で約 10,000 件の個別の INSERT クエリを実行できます。そのため、1 秒あたり数百万行の挿入パフォーマンスを達成したい場合は、依然としてバッチ単位での挿入を推奨します。
  • clickhouse-local にインタラクティブモードを追加しました。これにより、サーバーへ接続することなく clickhouse-local を実行するだけで、コマンドラインの ClickHouse インターフェースを利用して、ファイルおよび外部データソースからデータを処理できるようになります。また、clickhouse-clientclickhouse-local のコードを統合しました。#7203 をクローズ。#25516 をクローズ。#22401 をクローズ。#26231Kseniia Sumarokova)。
  • 実行可能(スクリプト可能)なユーザー定義関数のサポートを追加しました。これらの UDF は任意のプログラミング言語で記述できます。 #28803 (Maksim Kita)。
  • 外部データソースへの事前定義済み接続を許可します。これにより、外部データソースを使用するたびに認証情報やアドレスを指定する必要がなくなり、代わりに名前で参照できるようになります。 #28367 をクローズ。 #28577Kseniia Sumarokova)。
  • system データベース内の対応するテーブルに対して、SCHEMATATABLESVIEWSCOLUMNS ビューを含む INFORMATION_SCHEMA データベースを追加しました。 #9770 をクローズしました。 #28691 (tavplubix)。
  • EXISTS (subquery) をサポート。 #6852 を解決。 #29731Kseniia Sumarokova)。
  • 監査用のセッションログ。成功および失敗したすべてのログイン/ログアウトイベントを新しい system.session_log テーブルに記録します。 #22415 (Vasily Nemkov) (Vitaly Baranov).
  • 多次元コサイン距離およびユークリッド距離関数、L1・L2・Lp・Linf 距離およびノルムをサポート。タプルに対するスカラー積および各種算術演算子もサポート。これにより #4509 が完全に解決され、さらに追加の機能も含まれています。#27933 (Alexey Boykov)。
  • INTO OUTFILE および FROM INFILE に、(自動検出または追加のオプション引数による)圧縮および解凍機能のサポートを追加。 #27135 (Filatenkov Artur).
  • HTTP OPTIONS リクエストによる CORS(Cross-Origin Resource Sharing)サポートを追加しました。これにより、Grafana はサーバーレスリクエストに対して回避策なしで動作するようになりました。#18693 をクローズしました。#29155Filatenkov Artur)。
  • JOIN ON を使用するクエリで、OR(論理和)条件がサポートされるようになりました。 #21320 (Ilya Golshtein)。
  • 関数 tokens を追加しました。非英数字の ASCII 文字を区切り文字として使用して、文字列をトークンに分割できるようにします。 #29981 (Maksim Kita)。テキストから n-gram を抽出するための関数 ngrams を追加しました。 #29699 をクローズします。 #29738 (Maksim Kita)。
  • Unicode 正規化用の関数 normalizeUTF8NFCnormalizeUTF8NFDnormalizeUTF8NFKCnormalizeUTF8NFKD を追加しました。 #28633 (darkkeks)。
  • ClickHouse で FileLog テーブルエンジンを用いたアプリケーションログファイルのストリーミング消費をサポート。ローカルファイルシステム上の追記専用かつローテーションされるログ向けの、KafkaRabbitMQ エンジンに相当するエンジンです。#6953 をクローズ。#25969flynn)(Kseniia Sumarokova)。
  • CapnProto 出力フォーマットを追加し、CapnProto 入力フォーマットをリファクタリングしました。 #29291 (Kruglov Pavel)。
  • クエリ内で数値をバイナリリテラルとして記述できるようにしました。例: SELECT 0b001;#29304 (Maksim Kita)。
  • hashed_array 辞書型を追加しました。この型は、複数の属性を持つ辞書を使用する際のメモリ使用量を削減します。 #30236 をクローズしました。 #30242Maksim Kita)。
  • JSONExtractKeys 関数を追加しました。#30056Vitaly)。
  • 関数 getOSKernelVersion を追加しました。OS カーネルバージョンを表す文字列を返します。 #29755 (Memo)。
  • MD4SHA384 関数を追加しました。MD4 は時代遅れで安全でないハッシュ関数であり、既存のレガシーシステムで MD4 がすでに使用されていて、まったく同じ結果を得る必要があるといった、稀なケースでのみ使用できます。 #29602 (Nikita Tikhomirov).
  • ClickHouse HTTP サーバーに対して HSTS を有効にするには、設定ファイルで hsts_max_age を正の値に設定します。 #29516 (凌涛)。
  • Huawei OBS Storage のサポートを追加。#24294 をクローズ。#29511kevin wan)。
  • 新しい関数 mapContainsKeyLike は、キーが単純な正規表現にマッチするかどうかを判定します。 #29471 (凌涛)。新しい関数 mapExtractKeyLike は、指定したパターンにマッチする要素のみを保持したマップを取得します。 #30793 (凌涛)。
  • ALTER TABLE x MODIFY COMMENT が実装されました。 #29264 (Vasily Nemkov).
  • ClickHouse には存在せず、H3 API では提供されている H3 の検査関数を追加します: https://h3geo.org/docs/api/inspection#29209Bharat Nallan)。
  • レプリケートデータベースで、レプリケートされていない ALTER TABLE FETCH および ATTACH 操作を許可します。 #29202 (Kevin Michel).
  • output_format_csv_null_representation 設定を追加しました。これは output_format_tsv_null_representation と同様の設定ですが、CSV出力用です。 #29123 (PHO)。
  • 現在の ZooKeeper セッションの稼働時間(秒)を返す zookeeperSessionUptime() 関数を追加しました。#28983 (tavplubix)。
  • h3ToGeoBoundary 関数を実装。 #28952 (Ivan Veselov)。
  • ウィンドウ関数としても使用できる集約関数 exponentialMovingAverage を追加しました。これにより #27511 が解決されました。 #28914 (alexey-milovidov).
  • テーブル列のサブカラムを DESCRIBE クエリ結果に含められるようにしました(describe_include_subcolumns を設定することで有効にできます)。#28905Anton Popov)。
  • ExecutableExecutablePool にオプション send_chunk_header が追加されました。このオプションが true の場合、チャンクの前に、そのチャンクの行数(rows_count)と改行がクライアントへ送信されます。 #28833 (Maksim Kita).
  • tokenbf_v1ngram は、キーが String または FixedString 型である Map をサポートします。これにより、map のキーに対するフィルタを使用したクエリでのデータスキップが向上します。sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by id 上記のテーブルに対して、クエリ select * from map_tokenbf where map['K']='V' は、キー A を含まないグラニュールをスキップします。もちろん、スキップされる行数は、設定した granularityindex_granularity に依存します。#28511 (凌涛).
  • サーバーからクライアントへプロフィールイベントを送信できるようにしました。新しいパケットタイプ ProfileEvents を導入しました。#26177 をクローズ。#28364Dmitry Novik)。
  • FixedString および String データ型向けのビットシフト演算を実装。これにより #27763 がクローズされました。 #28325小路)。
  • データベースエンジン MaterializedPostgreSQL において、PostgreSQL からのレプリケーション対象テーブルを動的に追加・削除できるようにしました。ALTER 文によるデータベース設定の変更をサポートしました。Closes #27573. #28301 (Kseniia Sumarokova).
  • 関数 accurateCastOrDefault(x, T) を追加しました。#21330 をクローズしました。作者 @taiyang-li。#23028Maksim Kita)。
  • 関数 toUUIDOrDefaulttoUInt8/16/32/64/256OrDefaulttoInt8/16/32/64/128/256OrDefault を追加しました。これらは、文字列のパースに失敗した場合に、デフォルト値(null 以外)を指定できるようにします。 #21330 (taiyang-li).

パフォーマンスの向上

  • バックグラウンドマージは互いに割り込み可能となり、適切な優先度でスケジュールされるようになりました。これにより、長時間実行されるマージが短時間のマージの実行を妨げることがなくなります。これは、マージの実行をより適切にスケジューリングおよび制御するために必要な変更です。また、「too many parts」エラーが発生する可能性を減らします。 #22381#25165Nikita Mikhaylov)。バックグラウンドプール内のスレッド数よりも多くのマージおよびミューテーションを実行できる機能が追加されました。マージおよびミューテーションはサイズに応じて順次実行されます(サイズが小さいものがより高い優先度となります)。同時に実行されるタスク数とスレッド数の比率は、設定 background_merges_mutations_concurrency_ratio(デフォルトは 2)によって制御されます。 #29140Nikita Mikhaylov)。
  • リモートファイルシステムでの非同期読み取りを可能にし、リモートファイルシステムから読み取る際のシーク回数を減らしました。これによりパフォーマンスが飛躍的に向上し、特定の条件下では、実験的だった web および s3 ディスクが EBS よりも高速に動作するようになりました。 #29205 (Kseniia Sumarokova)。あわせて、web ディスクタイプ(Web サーバー上にホストされた静的データセット)は実験的段階を卒業し、本番利用可能になりました。
  • clickhouse-client での INTO OUTFILE を伴うクエリはマルチスレッドを使用するようになりました。INTO OUTFILE 使用時に進捗バーがちらつく問題を修正しました。これにより #30873 および #30872 がクローズされました。#30886alexey-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 キャッシュを使用するようになりました。#29999alesapin)。
  • 外部データベース(例:MySQL)への IS NULL/IS NOT NULL のプッシュダウンのサポートを追加しました。#29463Azat Khuzhin)。外部データベース向け(例:MySQL)に isNull/isNotNullIS NULL/IS NOT NULL に変換するようにしました。#29446Azat Khuzhin)。
  • Dictionary テーブルに対する SELECT クエリでは複数スレッドが使用されます。 #30500 (Maksim Kita).
  • Decimal 列のフィルタリング(WHERE 句)のパフォーマンスを改善しました。 #30431 (Jun Jin).
  • より高性能な popcnt/ctz 実装を用いることで、filter 演算における分岐の多いコードを削除し、パフォーマンスを向上させた。 #29881 (Jun Jin).
  • WHERE 演算子で使用されるフィルター用 bytemask 生成関数を、SSE/AVX2/AVX512 の各命令セットを統合的に利用する形で改善しました。デフォルトでは ClickHouse は SSE のみを使用しているため、これはカスタムビルドでのみ有効です。 #30014 (jasperzhu). #30670 (jasperzhu).
  • Nullable 浮動小数点数に対する SUM 集約関数のパフォーマンスを改善しました。 #28906 (Raúl Marín).
  • 複数ディスク使用時のパート読み込み処理を高速化しました。発想は https://github.com/ClickHouse/ClickHouse/pull/16423 と同様です。本番環境では 24 分から 16 分に短縮されました。 #28363 (Amos Bird)。
  • S3 マルチパートアップロードのパートサイズのデフォルト設定を小さくし、メモリ使用量を削減しました。 #28679 (ianton-ru).
  • bitmapAnd 関数を高速化。 #28332 (dddounaiking)。
  • マージ処理がまだ進行中の場合に StorageMergeTree で発生していた、非最適なミューテーション通知を削除しました。 #27552 (Vladimir Chebotarev).
  • 文字列比較のパフォーマンス向上を試みました。 #28767 (alexey-milovidov)。
  • 主キーインデックスとパーティションフィルタがタプルとしても機能するようになりました。 #29281 (凌涛).
  • クエリに、同じ引数を持つが level パラメータが異なる複数の quantile 集約関数が含まれている場合、設定 optimize_syntax_fuse_functions が有効になっていれば、それらはまとめて 1 回の処理パスで実行されます。 #26657 (hexiaoting)。
  • 主キーの先頭の式に対する min-max 集約が、プロジェクションを用いて最適化されるようになりました。これは #329 に対応する変更です。#29918Amos Bird)。

実験的機能

  • ClickHouse Keeper 向けに、ノード設定(.xml ファイル内)を変更できる機能を追加。#30372alesapin)。
  • sparkbar 集約関数を追加。これにより #26175 がクローズされます。#27481小路)。注記: この関数には既知の不具合が 1 つあり、今後のリリースで動作が変更される予定です。

改善

  • 再起動することなくログレベルを変更できるようにしました。 #29586 (Nikolay Degterinsky)。
  • SQL UDF に関して複数の改善を行いました。SQL ユーザー定義関数を操作するクエリで ON CLUSTER 句がサポートされるようになりました。例 CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;#30666 をクローズしました。#30734Maksim Kita)。CREATE OR REPLACECREATE IF NOT EXISTS 構文をサポートしました。#30454Maksim Kita)。DROP IF EXISTS のサポートを追加しました。例 DROP FUNCTION IF EXISTS test_function#30437Maksim Kita)。ラムダ式をサポートしました。例 CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);#30435Maksim Kita)。clickhouse-local 向けの SQL ユーザー定義関数をサポートしました。#30179Maksim Kita)。
  • クエリごとのメモリプロファイラをグローバルに有効化しました(memory_profiler_step を 4MiB に設定)。#29455Azat Khuzhin)。
  • system.data_skipping_indices に列 data_compressed_bytesdata_uncompressed_bytesmarks_bytes を追加しました。system.parts に列 secondary_indices_compressed_bytessecondary_indices_uncompressed_bytessecondary_indices_marks_bytes を追加しました。#29697 をクローズしました。#29896Maksim Kita)。
  • system.tablestable エイリアスを追加し、system.databasesdatabase エイリアスを追加しました。#29677#29882kevin wan)。
  • サーバー起動時にテーブル間の相互依存関係が正しく解決されるようにしました。#8004 および #15170 をクローズ。#28373tavplubix)。
  • 分母が Nullable の場合に、関数 divideintDivmodulo でエラー "Division by zero" が発生しないようにしました。 #22621 をクローズしました。 #28352Kruglov Pavel)。
  • テキスト形式での Date データ型の値の解析時に、YYYY-MM-DD に加えて YYYYMMDD 形式も許可しました。これにより #30870 が解決されました。#30871alexey-milovidov)。
  • Web UI: テーブルセル内にバーを描画。 #29792 (alexey-milovidov).
  • ユーザーは、コメント付きで辞書を作成できるようになりました: 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 を参照してください。#30574Pavel Medvedev)。
  • PostgreSQL データベースから取得されるテーブル構造の信頼性が向上しました。 #30477 (Kseniia Sumarokova).
  • GROUP BY および ORDER BY での位置指定引数の完全サポート。 #30433 (Kseniia Sumarokova).
  • JSONExtractString を使用して、非文字列要素を文字列として抽出できるようにしました。これは pull/25452#issuecomment-927123287 に対応したものです。 #30426Amos Bird)。
  • GraphiteMergeTree テーブルに対する SELECT クエリで FINAL 句を使用できるようになりました。 #30360 (Nikita Mikhaylov)。
  • レプリカのクローン処理と破損したパーツに対するフェッチ処理のキュー投入をわずかに改善し、レプリケーションキュー内の GET_PART エントリが極めてまれにハングしてしまう事象を回避できるようにしました。 #30346 (tavplubix).
  • user_files ディレクトリ内のファイルへのシンボリックリンクを、file テーブル関数で使用できるようにしました。 #30309 (Kseniia Sumarokova).
  • Date32DateDateTimeDateTime64String との比較の不具合を修正しました。 #30219 (liang.huang).
  • MergeTree テーブルから SAMPLE BY 式を削除できるようになりました(ALTER TABLE &lt;table&gt; REMOVE SAMPLE BY)。 #30180Anton Popov)。
  • Keeperclickhouse-server の一部)は、他のノードのいずれかに接続できる場合、非同期的に起動するようになりました。 #30170 (alesapin)。
  • clickhouse-client でネイティブな複数行編集がサポートされるようになりました。 #30143 (Amos Bird).
  • polygon ディクショナリ(リバースジオコーディング):設定 store_polygon_key_column = true の場合に、SELECT クエリでディクショナリの内容を読み取ることをサポートする機能を追加しました。 #30090 をクローズしました。 #30142Maksim Kita)。
  • Play UI に ClickHouse ロゴを追加。#29674alexey-milovidov)。
  • ArrowArrowStreamParquetORC などの Arrow をサポートするフォーマットからカラムを読み取る際の例外メッセージを改善しました。これにより #29926 がクローズされました。 #29927 (alexey-milovidov)。
  • Buffer テーブルにおけるフラッシュ処理と起動処理との間で発生するデータレースを修正。これはテストで発生する可能性があります。 #29930 (Azat Khuzhin).
  • DatabaseMemoryLiveViewDROP TABLE 間で発生する lock-order-inversion を修正。Live View は実験的な機能です。Memory データベースは clickhouse-local で使用されます。 #29929 (Azat Khuzhin).
  • ディクショナリの定期的な再読み込みと設定の再読み込みとの間のロック順序の逆転を修正。 #29928 (Azat Khuzhin).
  • zoneinfo ファイルを 2021c に更新しました。 #29925 (alexey-milovidov).
  • clickhouse-copier に対して、リトライ回数およびリトライ間の待機時間を設定できるようにした。 #29921 (Azat Khuzhin).
  • 実行中のクエリが shutdown_wait_unfinished の時間まで完了するのを待機できるようにするサーバー設定 shutdown_wait_unfinished_queries を追加しました。これは #24451 に対応するものです。#29914Amos Bird)。
  • ピークメモリ使用量をトレースできるようにしました(system.trace_log に新しい trace_typeMemoryPeak を追加)。 #29858Azat Khuzhin)。
  • PostgreSQL 外部テーブル: レプリカ識別インデックスを取得するためのクエリに、パーティション化テーブル用のプレフィックス '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 はまだリリースされていないため、改善としてマークします。#29659Amos Bird)。
  • デフォルトの listen_backlog を増やす(より新しい Linux カーネルのデフォルトに合わせるため)。 #29643 (Azat Khuzhin).
  • サーバー設定 dictionaries_configmodels_configuser_defined_executable_functions_config が変更された場合に、辞書、モデル、ユーザー定義の実行可能関数を再読み込みするようにしました。#28142 をクローズしました。#29529Maksim Kita)。
  • プロジェクション名に対する不要な制限を撤廃しました。これにより、プロジェクション名を tmp_ で始めることができるようになりました。 #29520 (Amos Bird).
  • ネストされたサブクエリを含む mutation で発生していた There is no query or query context has expired エラーを修正しました。テーブルがレプリケートされており、かつ allow_nondeterministic_mutations 設定が無効になっている場合、mutation 内でサブクエリを許可しないようにしました。#29495 (tavplubix)。
  • 実行時に max_concurrent_queries の設定変更を適用できるようにしました(再起動は不要)。#29414Raúl Marín)。
  • use_skip_indexes という設定を追加しました。 #29405 (Maksim Kita)。
  • インメモリパーツに対する FREEZE(バックアップ用)のサポートを追加しました。 #29376 (Mo Xuan).
  • clickhouse-benchmark で初期の query_id をそのまま引き継ぐようにしました(以前は clickhouse-benchmark でリモートクエリを実行した場合、シャード上のクエリが initial_query_id を介して元のクエリと関連付けられませんでした)。 #29364 (Azat Khuzhin).
  • スキップインデックス tokenbf_v1 および ngrambf_v1: キーが String または FixedString 型の Array データ型のサポートを追加しました。 #29280 (Maksim Kita)。スキップインデックス tokenbf_v1 および ngrambf_v1 に、キーが String または FixedString 型の Map データ型のサポートを追加しました。著者 @lingtaolf。 #29220 (Maksim Kita)。
  • 関数 has: Map データ型をサポートするようになりました。#29267Maksim Kita)。
  • clickhouse-keeper 向けに compress_logs 設定を追加し、(replicated state machine 用の)clickhouse-keeper のログを ZSTD で圧縮できるようにしました。実装: #26977#29223alesapin)。
  • 設定項目 external_table_strict_query を追加しました。これにより、互換性がない場合でも、外部データベースに対するクエリで WHERE 句全体を常に渡すように強制されます。 #29206 (Azat Khuzhin).
  • ARRAY JOIN が使用されている場合、projection を無効化しました。以前のバージョンでは、projection の解析によって ARRAY JOIN 内のエイリアスが壊れる可能性がありました。 #29139 (Amos Bird)。
  • MsgPack 入出力フォーマットでサポートされる型を拡充しました。 #29077 (Kruglov Pavel).
  • ORC 入出力フォーマットで LowCardinality 列の入出力をサポートしました。 #29062 (Kruglov Pavel).
  • system.distributed_ddl_queue からの SELECT クエリで誤った値が返されることがありましたが、修正されました。 #29061 (tavplubix).
  • HTTP 接続で未知のメソッドを扱う際の動作を修正しました。#29050 を解決します。#29057Filatenkov Artur)。
  • clickhouse-keeper: ZooKeeper のログ(スナップショットではない)からのリストア時に一部のデータが失われる可能性がある clickhouse-keeper-converter のバグを修正。 #29030 (小路)。ZooKeeper ログの逆シリアル化が誤って行われる可能性がある clickhouse-keeper-converter のバグを修正。 #29071 (小路)。
  • CREATE ... AS SELECT クエリの設定を適用するようにしました(修正: #28810)。 #28962Azat Khuzhin)。
  • ALTER TABLE ... ON CLUSTER ... REPLACE/MOVE PARTITION FROM/TO ... においてデフォルトのデータベース設定が尊重されるようにしました #28955 (anneji-dev).
  • gRPC プロトコル: クライアントからサーバー側の圧縮方式を変更できるようにしました。 #28953 (Vitaly Baranov).
  • 非同期メトリクスのために温度センサーを読み取る際に発生する「no data」例外を無視するようにしました。これにより #28852 がクローズされます。#28882alexey-milovidov)。
  • まれに既存のディクショナリに対して Dictionary not found エラーが発生しうる論理的なレースコンディションを修正しました。 #28853 (tavplubix).
  • If-combinator 用のチェックにおいてネストされた関数の制限を緩和(ただし同一のコンビネータをネストすることは禁止)。 #28828 (Azat Khuzhin).
  • サーバー終了時に発生する可能性のあるキャッチされない例外を修正。 #28761 (Azat Khuzhin).
  • 異常に長時間実行されている mutation/merge がある場合に、その処理で使用されている可能性のある tmp ディレクトリがクリーンアップされないようにしました。 #28760 (Azat Khuzhin).
  • エイリアス使用時にも最適化 optimize_arithmetic_operations_in_aggregate_functions = 1 を許可。 #28746 (Amos Bird)。
  • ReplicatedMergeTree 向けに detach_not_byte_identical_parts 設定を実装し、これにより(merge/mutate 後の)バイト単位で同一ではないパーツを削除する代わりに detach するようにしました。 #28708 (Azat Khuzhin).
  • MergeTree 向けに max_suspicious_broken_parts_bytes 設定を実装しました(すべての破損パーツの合計サイズを制限するための設定で、デフォルトは 1GiB)。 #28707 (Azat Khuzhin).
  • RabbitMQ テーブル設定でマクロ展開を有効にしました。 #28683 (Vitaly Baranov).
  • Log エンジンを使用するテーブルのデータを複数スレッドで読み取れるようにしました。 #28125 (Vitaly Baranov)。
  • JSON 関数における NULL カラムの扱いの不具合を修正しました。これにより #27930 が解消されました。#28012 (Amos Bird)。
  • スキップインデックス用の Mark/Uncompressed キャッシュサイズを、カラムとは別に設定できるようにしました。#27961Amos Bird)。
  • USING を伴う JOIN を他の種類の JOIN と組み合わせて使用できるようにした。 #23881 (darkkeks).
  • Yandex Cloud S3 向けのスロットリング対応のために aws-sdk サブモジュールを更新。#30646 (ianton-ru).
  • gRPC 呼び出しを処理する際、クエリ処理の終了時に query ID と session ID を解放するよう修正。 #29954 (Vitaly Baranov).
  • AccessControlManager のシャットダウン処理を修正し、不安定なテストを解消。 #29951 (Vitaly Baranov)。
  • HDFS からの読み取り時に発生していたアサーションの失敗を修正しました。デバッグビルドでテストを実行できるように、libhdfs3 ライブラリを更新しました。#29251 および #27814 をクローズ。#29276Kseniia 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).
  • clickhouse-client に raw のプロファイルイベントを出力する機能を追加(デバッグおよびテストに有用)。#30064 (Azat Khuzhin).
  • clickhouse-server のユニット(systemd および sysvinit の init)に時間依存関係を追加。#28891 (Azat Khuzhin).
  • シンボルがリロードされた際にスタックトレースキャッシュをリロードするようにした。#28137 (Amos Bird).

バグ修正

  • positionCaseInsensitiveUTF8countSubstringsCaseInsensitiveUTF8 のような、UTF-8 文字列に対する大文字・小文字を区別しない検索用関数が、ごくまれなケースで実際には一致していない部分文字列を検出してしまう不具合がありましたが、修正しました。 #30663 (tavplubix).
  • 暗号化ディスク上の空ファイルからの読み取りを修正。 #30494 (Vitaly Baranov).
  • 設定 legacy_column_name_of_tuple_literal = 0 が有効な分散クエリにおいて、IN への変換対象となる OR 条件(disjunction)の連鎖(設定 optimize_min_equality_disjunction_chain_length により制御)の変換処理を修正しました。#28658 (Anton Popov).
  • insert_allow_materialized_columns=0 の場合でも、分散テーブルでマテリアライズド列をシャーディングキーとして使用できるようになりました。 #28637 (Vitaly Baranov)。
  • 結果セットに行が存在しない場合に、TOFROM を指定した ORDER BY ... WITH FILL の動作を修正しました。 #30888 (Anton Popov).
  • オペランドが 2 つを超える AND/OR 式で set インデックスが使用されていなかった問題を修正します。これにより #30416 が修正されます。#30887 (Amos Bird)。
  • ハッシュ関数を用いた projection がマテリアライズされた際に発生するクラッシュを修正しました。これにより #30861 が解決されます。この問題は https://github.com/ClickHouse/ClickHouse/pull/28560 と類似しており、header の空状態に関する不変条件を正しく理解していなかったことが原因です。#30877 (Amos Bird)。
  • ReplicatedMergeTree において、ZooKeeper パスから補助 ZooKeeper 名を抽出する際の曖昧さを解消しました。以前は、ZooKeeper パスにコロンが含まれている場合、サーバーが Unknown auxiliary ZooKeeper name というエラーとともに起動に失敗することがありました。#29052 を修正します。また、以前はスラッシュで始まらない ZooKeeper パスを指定することが許可されていましたが、現在は非推奨となっており、そのようなパスを用いた新しいテーブルの作成は許可されません。補助 ZooKeeper 名にスラッシュおよびコロンを含めることも許可されません。#30822 (tavplubix)。
  • 何らかの理由により localBackup が失敗した場合に、一時ディレクトリをクリーンアップするようにしました。 #30797 (ianton-ru).
  • レプリケーションなしの MergeTree において、REPLACE/MOVE PARTITION とバックグラウンドでのマージ処理との間に発生するレースコンディションを修正しました。この問題が原因で、移動/置換されたデータの一部がパーティション内に残ってしまう可能性がありました。#29327 の問題を修正します。#30717tavplubix)。
  • 常に真となる PREWHERE の場合に PREWHERE を WHERE に置き換えるよう修正しました。 #30668 (Azat Khuzhin).
  • Limit push down 最適化により Cannot find column エラーが発生する可能性がありました。 #30438 を修正しました。 #30562 (Nikolai Kochetov).
  • isNotNull/isNullIS [NOT] NULL に書き換える処理に不足していた括弧を追加しました(isNotNull(1)+isNotNull(2) のような式を含むクエリが正しく動作するように修正)。 #30520 (Azat Khuzhin).
  • 同じテーブルを対象とするスカラーサブクエリを含む ALTER で発生するデッドロックを修正し、#30461 をクローズしました。#30492Vladimir C)。
  • REPLACE PARTITION の実行中にセッションの有効期限が切れた場合に発生する可能性があったセグメンテーションフォルトを修正しました。 #30432 (tavplubix).
  • IN (subquery) のような条件を含むクエリで、集約プロジェクションが適用されている場合に誤った結果が返されることがありました。プロジェクション向けのセットの作成処理を修正しました。 #30310 (Amos Bird).
  • プロジェクションが有効な場合の JOIN クエリにおけるカラムエイリアス解決の不具合を修正。これにより #30146 が解消されます。 #30293 (Amos Bird)。
  • replaceRegexpAll 関数の一部不具合を修正。 #30292 (Memo).
  • ComplexKeyHashedDictionary、ComplexKeySparseHashedDictionary がレイアウト設定から preallocate オプションを解釈する処理を修正。 #30246 (Maksim Kita).
  • [I]LIKE 関数を修正し、#28661 をクローズ。 #30244 (Nikolay Degterinsky).
  • multiIf 関数でショートサーキット評価と LowCardinality 型を併用した際に発生するクラッシュを修正。 #30243 (Raúl Marín).
  • FlatDictionary、HashedDictionary で nullable 属性の bytes_allocated 計算を修正。 #30238 (Maksim Kita)。
  • 複数の JOIN で数字から始まる識別子を許可しました。 #30230 (Vladimir C).
  • max_read_buffer_size = 0(ユーザーが自分で自分の足を撃つような設定の場合)での MergeTree からの読み取り処理を修正(Can't adjust last granuleLOGICAL_ERROR といった例外、さらにはデータ損失を招く可能性がある)。 #30192 (Azat Khuzhin).
  • min_bytes_to_use_direct_io 使用時の pread_fake_asyncpread_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 データベースがサーバー再起動後に再び現れることがあった問題を修正しました(#29795)。また、クラウド環境では残ったデータを手動で削除できないため、Ordinary データベース削除時に発生する Directory not empty エラーへのワークアラウンドとして、force_remove_data_recursively_on_drop 設定が追加されました(#30054tavplubix)。
  • tuple() によってサンプルがクラッシュしていた問題を修正し、#30004 をクローズ。#30016flynn)。
  • 次の Issue をクローズしようとしました: #29965#29976hexiaoting)。
  • FileCheckerStorageLog / StorageStripeLog 間で発生しうるデータレースを修正。 #29959 (Azat Khuzhin).
  • StorageLog における LogSink::writeMarks()LogSource の間のデータレースを修正。 #29946 (Azat Khuzhin).
  • https://github.com/ClickHouse/ClickHouse/pull/19544 で導入された MergeTree テーブルの同時クエリ数制限で発生しうるリソースリークを修正しました。 #29879Amos Bird)。
  • システムテーブルの再作成チェックを修正(enum 値の変更を検出できなかった問題を修正)。 #29857 (Azat Khuzhin).
  • MaterializedMySQL: MySQL への接続が失われた場合に、トランザクションの一部のみが処理されてしまう可能性があった問題を修正しました。 #29837 (Håvard Kvålen).
  • カーネルのバグが原因と推測される、極めてまれなケースで発生する可能性のある Timeout exceeded: elapsed 18446744073.709553 seconds というエラーを回避しました。#29154 を修正しました。#29811tavplubix)。
  • ATTACH TABLE ... FROM 'path' クエリで、パスの代わりに非文字列リテラルが使用された場合に発生する不正なキャストを修正しました。これにより、未初期化メモリ領域を読み取ってしまう可能性がありました。 #29790 (alexey-milovidov).
  • GROUP BY 中の LowCardinality への並行アクセスを修正しました(Buffer テーブルと組み合わせた場合に問題を引き起こす可能性がありました)。 #29782 (Azat Khuzhin).
  • シャードに <= 21.3>= 21.4 の混在バージョンが存在し、GROUP BY キーがすべて固定サイズの複数カラムで構成され、かつ二段階集約(group_by_two_level_threshold および group_by_two_level_threshold_bytes を参照)が有効化されている分散クエリにおいて、結果に同一キーを持つ複数行が含まれてしまう GROUP BY の不具合を修正しました。#29580 を修正。#29735Nikolai Kochetov)。
  • サーバー再起動時に materialized_postgresql_tables_list を設定した際の誤った挙動を修正しました。 #28529 で報告された問題です。 #29686Kseniia Sumarokova)。
  • フィルタ述語内の条件がプッシュダウン最適化により失われる可能性がありました。 #29625 (Nikolai Kochetov).
  • エイリアスおよびショートサーキット評価を使用する JIT 式コンパイルの不具合を修正しました。 #29403 をクローズ。 #29574Maksim Kita)。
  • DEFAULT 式内で x.y.z... のように誤ったテーブル識別子を使用した場合に、ALTER MODIFY クエリでまれにセグメンテーションフォルトが発生する問題を修正。 #29184 を修正。 #29573alesapin)。
  • HAVING で使用されているカラムが SELECT されていない場合に発生する、GROUP BY WITH TOTALS HAVING における nullptr デリファレンスを修正。 #29553 (Azat Khuzhin).
  • Join テーブルエンジンのテーブルの同時読み取り・書き込み時に発生するデッドロックを回避します。 #29544 (Raúl Marín).
  • std::mismatch の仕様(The behavior is undefined if the second range is shorter than the first range.)を誤って使用していたため、チェック pathStartsWith のバグを修正しました。 #29531 (Kseniia Sumarokova).
  • ODBC ブリッジで Invalid cursor state エラーに対する再試行処理を追加しました。このエラーは再試行可能です。 #29473 をクローズします。 #29518 (Kseniia Sumarokova)。
  • Lazy データベースのロード時に発生していたテーブル名の誤ったパースを修正しました。#29456 の不具合を解消します。 #29476 (tavplubix)。
  • プッシュダウンされた HAVING 述語を持つサブクエリで Block structure mismatch が発生する可能性のある問題を修正しました。 #29010 を修正。 #29475Nikolai Kochetov)。
  • 関数 greatest/least で発生する論理エラー Cannot capture columns を修正。#29334 をクローズ。#29454Kruglov Pavel)。
  • RocksDB テーブルエンジン:複数の DB をオープンする際に発生するレースコンディションを修正し、CI 上でこの問題を引き起こしていたテストを再度有効にしました。 #29393 (Azat Khuzhin).
  • 設定が誤っている場合に replicated access storage が正常にシャットダウンしない問題を修正。 #29388 (Kevin Michel).
  • メモリ安全性に問題があるため、ウィンドウ関数 nth_value を削除しました。これにより #29347 がクローズされます。#29348alexey-milovidov)。
  • projection パーツの垂直マージを修正しました。これにより #29253 が解決します。この PR は、https://github.com/ClickHouse/ClickHouse/pull/25165 で導入された projection のマージ/ミューテーションに関する複数の問題も修正します。#29337Amos Bird)。
  • Replicated データベースで新しいレプリカの追加時にハングする DDL クエリを修正。 #29328 (Kevin Michel).
  • 接続タイムアウト(send_timeout/receive_timeout)を修正しました。 #29282 (Azat Khuzhin).
  • ReplicatedMergeTree のレプリカを再作成または新規作成する際に、テーブル列の一部で大文字小文字を区別しない関数を含むデフォルト式を使用している場合に発生する可能性がある Table columns structure in ZooKeeper is different from local table structure 例外を修正しました。 #29266 (Anton Popov).
  • クライアント(TCP 経由)には Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF) ではなく、通常の Database doesn't exist エラー(UNKNOWN_DATABASE)を送信するようにしました。 #29229 (Azat Khuzhin).
  • Avro 入力フォーマットで LowCardinality(Nullable) 型のカラムに挿入する際に発生していたセグメンテーションフォルトを修正。 #29132 (Kruglov Pavel)。
  • サーバ間シークレット使用時に、以前の認証情報が再利用されないようにしました(そのクラスタに対してサーバ間シークレットが設定された Distributed テーブルへ Buffer/Kafka 経由で INSERT を行う前に、その接続で以前に設定されたユーザーが再利用される可能性がありました)。 #29060 (Azat Khuzhin).
  • 辞書との JOIN 時に any_join_distinct_right_table_keys を処理し、#29007 をクローズ。#29014Vladimir C)。
  • エイリアス列を対象に JOIN を行う際に発生する「Not found column ... in block」エラーを修正し、#26980 をクローズ。 #29008Vladimir C)。
  • GLOBAL IN サブクエリで使用されるスレッド数を正しく設定しました(#19414 のバグ修正以降、単一スレッドで実行されていました)。#28997Nikolai Kochetov)。
  • ORDER BY に WITH FILL が含まれている場合の誤った最適化を修正しました。これにより #28908 および #26049 が解決されます。 #28910alexey-milovidov)。
  • 定数引数使用時に arrayCompactSIGSEGVarrayDifference および arrayCumSumNonNegativeILLEGAL_COLUMN が発生する高階配列関数の不具合を修正。 #28904 (Azat Khuzhin).
  • mutations_sync=2 使用時の mutation 完了待ち処理を修正。 #28889 (Azat Khuzhin).
  • 外部データベース(例: MySQL)に対して、複数列を含む IN 句(例: (k,v) IN ((1, 2)) )を使用するクエリを修正しました。 #28888 (Azat Khuzhin).
  • 短絡評価される関数における LowCardinality のバグを修正。 #28884 をクローズ。 #28887Kruglov Pavel)。
  • コンパクトパーツからサブカラムを読み取る処理を修正。 #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).
  • 分散テーブル作成時に、渡されたパラメータが誤っている場合に発生していたコアダンプを修正しました。 #28686 (Zhiyong Wang).
  • system.processes テーブルに Settings.Names と Settings.Values のエイリアスを追加しました。#28685 (Vitaly)。
  • S2 Geometry ライブラリのサポート: s2RectAdds2RectContains 関数に必要な引数の数を修正。 #28663 (Bharat Nallan).
  • Nullable または LowCardinality の主キーが使用されている場合に発生する無効な定数の型変換を修正しました。 #28636 (Amos Bird).
  • PREWHERE を使用して "Column is not under aggregate function and not in GROUP BY" エラーを修正 (Fixes: #28461). #28502 (Azat Khuzhin).

ClickHouse リリース v21.10, 2021-10-16

後方互換性のない変更

  • 次の MergeTree テーブルレベルの設定:replicated_max_parallel_sends, replicated_max_parallel_sends_for_table, replicated_max_parallel_fetches, replicated_max_parallel_fetches_for_table は、現在は効果を持ちません。これらはもともとうまく動作しておらず、max_replicated_fetches_network_bandwidth, max_replicated_sends_network_bandwidth, background_fetches_pool_size に置き換えられました。 #28404 (alesapin).

新機能

  • ユーザー定義関数 (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)。
  • データのインポート / エクスポートにおいて、gzbz2xzzstd に加えて lz4 圧縮形式をサポート。#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 タイプのディスクにより、静的ファイルとして Web サーバー上に読み取り専用テーブルを保存できます。#23982#25251Kseniia Sumarokova)。これは主に、共有ストレージ上での動作テストを容易にし、データセットのインポートを簡単に行うためのものです。リリース 21.11 より前での使用は推奨されません。
  • 新しいコマンド BACKUPRESTORE を追加しました。#21945Vitaly Baranov)。これは現在開発中であり、現行バージョンでの使用は想定されていません。

パフォーマンスの改善

  • 集約関数 sumIf および countIf を高速化しました。#28272Raúl Marín)。
  • minmax インデックスに対して仮想プロジェクションを作成しました。これにより、allow_experimental_projection_optimization が有効な場合、可能であればデータを読み込む代わりに minmax インデックスがクエリで使用されます。#26286Amos Bird)。
  • sequenceMatchsequenceCount に 2 つのチェックを導入し、シーケンスパターンの決定的な一部がイベントリストに存在しない場合に早期終了できるようにしました。この変更により、以前は操作数の上限に達して失敗していた多くのクエリが実行可能になり、パイプライン全体の高速化にもつながります。#27729Jakub Kuklis)。
  • 主キー解析を強化し、とくにゼロでない定数による除算などのバイナリ関数について、常に単調であるという情報を利用するようにしました。#28302Amos Bird)。
  • hasAll フィルター条件が Bloom filter ベースのデータスキップインデックスを活用できるようにしました。#27984Braulio Valdivielso Martínez)。
  • テーブルの起動プロセスを遅延させることで、データパートのロードを高速化しました。#28313Amos Bird)。
  • WHERE から PREWHERE へ移動される条件の数が過剰になる可能性があった問題を修正しました(設定 optimize_move_to_prewhere で制御される最適化)。#28139lthaooo)。
  • optimize_distributed_group_by_sharding_key をデフォルトで有効化しました。#28105Azat Khuzhin)。

改善

  • Distributed テーブルを作成する前にクラスター名をチェックし、誤ったクラスター名でテーブルを作成できないようにしました。 #27832 を修正しました。 #27927 (tavplubix)。
  • 集約関数 quantileBFloat16Weighted を、他の quantile...Weighted 関数と同様に追加しました。これにより #27745 がクローズされました。 #27758 (Ivan Novitskiy)。
  • 空の属性リストを持つ辞書を作成できるようにしました。 #27905 (Maksim Kita).
  • clickhouse-client に、パスワードのリセット方法に関するインタラクティブなドキュメントを追加しました。これは、ユーザーが ClickHouse をインストールしてパスワードを設定した直後にそれを忘れてしまったといった状況で役立ちます。#27750 を参照してください。#27903alexey-milovidov)。
  • JSONAsString 入力フォーマットで、データが配列で囲まれている場合をサポートしました。 #25517 をクローズします。 #25633 (Kruglov Pavel)。
  • system.replicas テーブルに新しいカラム last_queue_update_exception を追加。 #26843 (nvartolomei).
  • MaterializedPostgreSQL テーブルに対して、フェイルオーバー時の再接続に対応しました。#28529 をクローズしました。 #28614Kseniia Sumarokova)。
  • 最初のサーバー起動時に一意のサーバー UUID を生成するようにしました。 #20089 (Bharat Nallan).
  • MySQL エンジンに connection_wait_timeout 設定(デフォルト 5 秒、0 の場合は待機しない)を導入。#28474Azat Khuzhin)。
  • 誤った引数で MaterializedPostgreSQL を作成できないようにしました。#28423 をクローズしました。#28430Kseniia Sumarokova)。
  • 縦方向マージでは、事前に定義された "rows_sources" ではなく、実際の tmp ファイルを使用します。これにより、tmp ディスク上に不要なディレクトリが生成されることを防ぎます。 #28299 (Amos Bird).
  • clickhouse-server.service 内で環境変数 LIBHDFS3_CONF を export する代わりに、サーバーの設定に libhdfs3_conf を追加しました。これは HDFS との連携設定を行うためのものです。 #28268 (Zhichang Yu).
  • Temporary 状態にあるパーツの削除処理を修正し、Part %name% doesn't exist という予期しない例外が発生する可能性があった問題を解消しました。#23661 を修正。#28221 #28221)(Azat Khuzhin)。
  • zookeeper_log.address を修正します(この PR の最初のパッチが入る前は、アドレスは常に :: でした)、またこのカラムに対する getpeername(2) の呼び出し回数を減らします(zookeeper_log にエントリが追加されるたびに getpeername() が呼び出されるため、これを避けるためにアドレスを ZooKeeper クライアント内にキャッシュします)。 #28212 (Azat Khuzhin).
  • インデックス指定演算子 [] でのインデックスと Map 型のキーとの間の暗黙的な型変換をサポートしました(例: Int 系の異なる型、StringFixedString など)。 #28096 (Anton Popov).
  • PostgreSQL テーブルエンジンまたはテーブル関数への挿入時に、ON CONFLICT 句をサポートしました。#27727 をクローズしました。#28081Kseniia Sumarokova)。
  • 互換性のあるデータをアタッチ可能にするために、Enum データ型に対する制約を緩和しました。#26672 をクローズ。#28028Dmitry Novik)。
  • 空集合に対する定数キーでのグループ化の挙動を制御するための設定 empty_result_for_aggregation_by_constant_keys_on_empty_set を追加しました。これは、#6842 の従来の挙動を復元するためのものです。#27932Amos 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 への対応です。#27901Amos Bird)。
  • tcp_keep_alive_timeout をデフォルトで有効にしました。 #27882 (Azat Khuzhin).
  • リモートサーバーが異常終了した場合のリモートクエリのキャンセル処理を改善しました。 #27881 (Azat Khuzhin).
  • 大容量の S3 オブジェクトに対して multipart copy upload を使用するようにしました。 #27858 (ianton-ru).
  • ライブラリ辞書パスでのシンボリックリンクの辿りを許可。 #27815 (Kseniia Sumarokova).
  • これにより、ALTER MODIFY COLUM TNullable(T) に変更する際に mutation を伴う必要がなくなりました。#27787 (victorgao).
  • ReadBufferFromS3 でエラーを黙って無視せず、遅延もカウントしないようにしました。 #27484 (Vladimir Chebotarev).
  • ALTER ... MATERIALIZE TTL において、実際の TTL 処理を行わずにメタデータのみを再計算するようにして、動作を改善しました。 #27019 (lthaooo).
  • ファイル終端 (EOF) に改行がなくてもカスタムトップレベルドメイン一覧を読み取れるようにしました。 #28213 (Azat Khuzhin).

バグ修正

  • carbon-clickhouse から圧縮データを読み取る際に「attempt to read after end of file」エラーで失敗するケースを修正します。 #26149 をクローズします。 #28150FArthur-cmd)。
  • ON CLUSTER 句を伴う GRANT WITH REPLACE 文を実行する際のアクセス権の検証を修正しました。この PR では、修正 #27001 をさらに改善しています。#27983Vitaly Baranov)。
  • LowCardinality(UUID) 型のカラムに対して、extremes = 1 を指定した SELECT クエリを実行できるようにしました。 #27918 (Vitaly Baranov).
  • 負の数での PostgreSQL 形式のキャスト(:: 演算子)を修正しました。#27876 (Anton Popov).
  • #26864 以降。NamedSessionStorage のシャットダウン処理を修正。NamedSessionStorage に保存されているセッションコンテキストは、グローバルコンテキストを破棄する前に破棄されるようになりました。#27875Vitaly Baranov)。
  • windowFunnel "strict" モードに関するバグを修正。これにより #27469 が修正されます。#27563achimbab)。
  • 切り詰められた 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))から SELECT する際に発生していた There is no subcolumn エラーを修正しました。 #28531 (Anton Popov).
  • ReplicatedVersionedCollapsingMergeTree に対する ALTER の後に Existing table metadata in ZooKeeper differs in sorting key expression. というエラーが発生する可能性のあるバグを修正し、#28515 を解決。 #28528alesapin)。
  • 分散DDLキューのバックグラウンド処理で、ZooKeeper の watch がリークする可能性のある軽微な問題を修正しました。#26036 をクローズしました。#28446tavplubix)。
  • MaterializedPostgreSQL エンジンにおけるテーブル名の引用符の付け忘れを修正。#28316 をクローズ。#28433Kseniia Sumarokova)。
  • NULL 許容カラムに由来する、結合されない行に対する誤った動作を修正しました。#27691 をクローズ。#28349vdimir)。
  • すべてのキーカラムが使用されていない場合の NOT-IN インデックス最適化を修正しました。これにより #28120 が解決されます。#28315Amos Bird)。
  • 空のパーツに置き換えられた新しいパーツが原因で発生していた交差部分を修正。 #28310 (Azat Khuzhin).
  • optimize_read_in_order 設定を有効にした Merge テーブルに対する ORDER BY を含むクエリで、一貫しない結果が返される問題を修正。 #28266 (Anton Popov).
  • Nullable(LowCardinality) 型を含むクエリで、設定 extremes が 1 に設定されている場合に発生しうる未初期化メモリの読み取りを修正しました。#28165 を修正。#28205Nikolai Kochetov)。
  • プロジェクションに関する小さな修正を複数行いました。詳細な説明は PR を参照してください。#28178 (Amos Bird).
  • コンテキスト/設定リローダーのシャットダウン順序の誤りが原因で、終了時にごくまれに発生するセグメンテーションフォルトを修正。 #28088 (nvartolomei).
  • 関数 JSONExtract において、Nullable(String) 型の NULL 値の扱いを修正しました。これにより、#27929 および #27930 が解決されます。この問題は https://github.com/ClickHouse/ClickHouse/pull/25452 で導入されたものです。#27939Amos Bird)。
  • 新しい clickhouse-keeper ツールに対する複数の修正。クライアントが通常のリクエスト/レスポンスより先に watch レスポンスを受信してしまう可能性がある、clickhouse-keeper のまれなバグを修正しました。#28197 (alesapin)。子ノードに対する set リクエストによってリスト watch(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 がクローズされます。#27538alexey-milovidov)。
  • テスト環境向けに、新しいログレベル test を追加しました。これはデフォルトの trace よりもさらに冗長で詳細です。#28559alesapin)。
  • CMake の configure ステージで git status の情報を出力するようにしました。#28047Braulio Valdivielso Martínez)。
  • デフォルトの ubuntu apt リポジトリ(archive.ubuntu.com)が CI から応答しないため、一時的に ubuntu apt リポジトリをミラーの ru.archive.ubuntu.com に切り替えました。#28016Ilya Yatsishin)。

ClickHouse リリース v21.9, 2021-09-09

後方互換性のない変更

  • Decimal 型のテキスト表現では末尾のゼロを出力しないようにしました。例: スケール 6 の Decimal については、1.230000 ではなく 1.23 が出力されます。これにより #15794 がクローズされます。アプリケーションが末尾のゼロに依存していた場合、ごくわずかな非互換性が生じる可能性があります。出力フォーマットでのシリアライゼーションは、設定 output_format_decimal_trailing_zeros で制御できます。toString の実装および String へのキャストは無条件に変更されます。#27680alexey-milovidov)。
  • パラメータ付き集約関数に対して、異なるパラメータで生成された集約関数状態に -Merge コンビネータを適用することを禁止しました。例えば、fooState(42)(x) の状態は fooMerge(s)fooMerge(123)(s) でファイナライズできず、fooMerge(42)(s) のようにパラメータを明示し、かつ一致させる必要があります。quantilesequence* のように、パラメータをファイナライズにのみ使用する一部の特殊な集約関数には影響しません。#26847tavplubix)。
  • clickhouse-local では、ポート付きのローカルアドレスは常にリモートとして扱うようにしました。#26736Raúl Marín)。
  • 列エイリアスが式名と同一であるような複雑なクエリにおいて、不正なキャストが発生する可能性があった問題を修正しました。これにより #25447 が修正されます。また #26914 も修正されます。この修正により後方互換性が失われる場合があります。同一名だが異なる式が存在する場合、例外がスローされます。enable_optimize_predicate_expression が設定されているまれなケースでは動作が壊れる可能性があります。#26639alexey-milovidov)。
  • スカラーサブクエリの型が Nullable になり得る場合、常に Nullable な結果を返すようになりました。これは、サブクエリが空の場合、その結果が Null であるべきだからです。以前は、型推論がスカラーサブクエリを実行せず非 Nullable 型を用いることがあり、その結果として非互換な型に関するエラーが発生する可能性がありました。結果を Nullable に変換できない(ArrayTuple のような)スカラーサブクエリで結果が空の場合、現在はエラーがスローされます。#25411 を修正します。#26423Nikolai Kochetov)。
  • here document 用の構文を導入しました。例: SELECT $doc$ VALUE $doc$#26671Maksim Kita)。クエリ内に $ を含む識別子がある場合、この変更は後方互換性がなくなります #28768
  • インデックスが Nullable 型を扱えるようになりました。isNull および isNotNull を含みます。#12433 および #12455Amos Bird)、さらに #27250Azat Khuzhin)。ただし、これはオンディスクのフォーマット変更を伴っており、新しいサーバーは古いデータを読み取れますが、古いサーバーは読み取れません。加えて、MINMAX データスキップインデックスを使用している場合、新しいインデックスでは拡張子が .idx から .idx2 に変わるため、Data after mutation/merge is not byte-identical エラーが発生する可能性があります。したがって、このような場合には既存のすべてのレプリカの更新を遅らせるべきではありません。そうしないと、古いレプリカ(< 21.9)が 21.9+ の新しいレプリカからデータをダウンロードした場合、ダウンロードしたパートに対してインデックスを適用できなくなります。

新機能

  • 関数の短絡評価機能を実装し、#12587 をクローズしました。関数の短絡評価を制御するための設定項目 short_circuit_function_evaluation を追加しました。#23367Kruglov 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 ライブラリとの連携機能を追加しました。 #24980 (Andr0901). (Nikita Mikhaylov).
  • SQLite テーブルエンジン、テーブル関数、データベースエンジンを追加しました。 #24194 (Arslan Gumerov). (Kseniia Sumarokova).
  • MySQLPostgreSQLClickHouseJDBCCassandra のディクショナリソースに対するカスタムクエリのサポートを追加しました。 #1270 をクローズ。#26995Maksim Kita)。
  • ZooKeeper を通じて、ユーザー、ロール、行ポリシー、クォータ、設定プロファイルの共有(レプリケート)ストレージを追加しました。 #27426 (Kevin Michel).
  • INTO OUTFILE に対して、圧縮アルゴリズムを自動的に選択する圧縮機能を追加しました。#3473 をクローズしました。#27134Filatenkov Artur)。
  • SELECT ... INTO OUTFILE と同様に INSERT ... FROM INFILE を追加。 #27655 (Filatenkov Artur)。
  • complex_key_range_hashed 辞書を追加しました。#22029 をクローズしました。#27629Maksim Kita)。
  • JOIN の ON 句で式をサポート。 #21868 をクローズ。 #24420Vladimir C)。
  • クライアントがサーバーに接続すると、サーバーがすでに収集しているすべての警告に関する情報を受け取ります(オプション --no-warnings を使用して無効にできます)。サーバー構成に関する警告を収集するための system.warnings テーブルを追加しました。 #26246 (Filatenkov Artur). #26282 (Filatenkov Artur).
  • WITH および SELECT 句の定数式を集約関数パラメータで使用できるようにしました。Close #10945. #27531 (abel-cheng).
  • 名前付きタプルを名前と値のペアの配列に変換する関数 tupleToNameValuePairs を追加。#27505Braulio Valdivielso Martínez)。
  • インポート/エクスポート時に bzip2 圧縮方式をサポートしました。#22428 をクローズしました。#27377Nikolay Degterinsky)。
  • bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit) 関数を追加しました。offset から開始し、結果を cardinality_limit 件に制限する bitmap のサブセットを作成します。 #27234 (DHBin).
  • system.users に列 default_database を追加しました。 #27054 (kevin wan).
  • テーブル関数 'cluster' および 'clusterAllReplicas' で cluster マクロをサポートしました。 #26913 (polyprogrammist).
  • 新しい関数 currentRoles(), enabledRoles(), defaultRoles() を追加しました。 #26780 (Vitaly Baranov).
  • 新しい関数 currentProfiles(), enabledProfiles(), defaultProfiles() が追加されました。#26714Vitaly Baranov)。
  • 現在のクエリの (initial_)query_id を返す関数を追加しました。これにより #23682 がクローズされました。#26410Alexey Boykov)。
  • REPLACE GRANT 機能を追加しました。 #26384 (Caspian).
  • EXPLAIN クエリに EXPLAIN ESTIMATE ... モードが追加され、MergeTree テーブルから読み取る行数、マーク数、パーツ数に関する情報を表示できるようになりました。 #23941 をクローズ。 #26131 (fastio).
  • system.zookeeper_log テーブルを追加しました。ZooKeeper クライアントで行われたすべての操作がこのテーブルに記録されます。#25449 の実装です。#26129tavplubix)。
  • HDFS ストレージ上の ReplicatedMergeTree 向けのゼロコピーレプリケーション。 #25918 (Zhichang Yu).
  • ArrowORCParquet 入力フォーマットで、Nested 型を構造体(struct)の配列として挿入できるようにしました。 #25902 (Kruglov Pavel).
  • 新しいデータ型 Date32(データは Int32 として格納)を追加し、DateTime64 と同じ日付範囲をサポートします。また、Parquet の date32 を ClickHouse の Date32 にロードできるようにし、toDate と同様の新しい関数 toDate32 を追加しました。 #25774 (LiuNeng).
  • ユーザーのデフォルトデータベースを設定できるようになりました。 #25268#25687 (kevin wan)。
  • MongoDB エンジンにオプションパラメータを追加し、接続文字列オプションを指定できるようにして SSL 接続をサポートしました。#21189 をクローズ。#21041 をクローズ。#22045Omar Bazaraa)。

実験的機能

  • 圧縮の代わりにカラムを暗号化する圧縮コーデック AES_128_GCM_SIV を追加。 #19896 (PHO)。今後書き換え予定のため、使用しないでください。
  • MaterializeMySQLMaterializedMySQL に名称変更。 #26822 (tavplubix)。

パフォーマンスの改善

  • max_execution_time = 0 のときに clock_gettime システムコールの回数を減らすことで、高速クエリの性能を改善。 #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 ManzanaresRaúl Marín)。 #26248 (Raúl Marín)。
  • Enum 型カラムを含む式をコンパイル。 #26237 (Maksim Kita)。
  • 集約関数 groupBitOrgroupBitAndgroupBitXor をコンパイル。 #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)。

改善

  • ウィンドウ関数を一般利用可能(GA)として扱うようにし、allow_experimental_window_functions 設定を削除しました。 #27184 (Alexander Kuzmenkov).
  • 分単位で割り切れないタイムゾーンオフセットとの互換性を改善。 #27080 (Raúl Marín).
  • File テーブル内のファイルディスクリプタが通常のファイルの場合、そのファイルから複数回読み取ることを許可します。これにより、stdin が clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... &lt; file のような通常のファイルである場合、clickhouse-local が stdin から複数回(複数の SELECT クエリやサブクエリで)読み取れるようになります。これにより #11124 が解決されました。(alexey-milovidov) との共同作業です。#25960BoloniniD)。
  • 重複したインデックス解析を削除し、プロジェクション解析中に発生し得る不正な LIMIT チェックを回避します。 #27742 (Amos Bird).
  • HTTP リクエストのボディでクエリパラメータを渡せるようにしました。 #27706 (Hermano Lustosa)。
  • パーティション式での arrayJoin の使用を禁止しました。#27648Raúl Marín)。
  • 認証失敗時にクライアントのIPアドレスをログに記録します。 #27514 (Misko Lee).
  • GRPC プロトコルでは、バイナリデータに文字列ではなくバイト列を使用するよう変更しました。 #27431 (Vitaly Baranov)。
  • HTTP ポートが未設定のときにユーザーが TCP ポートへ HTTP リクエストを送信しようとした場合、エラーメッセージを含むレスポンスを返すようにしました。 #27385 (Braulio Valdivielso Martínez).
  • 内部用の _CAST 関数を追加しました。この関数は型の NULL 許容性を保持しませんが、内部用ではない通常の CAST は、設定 cast_keep_nullable に従って型の NULL 許容性を保持します。#12636 をクローズ。#27382 (Kseniia Sumarokova)。
  • system.query_log に整形済みクエリを追加で記録するための設定 log_formatted_queries を追加しました。normalizeQuerynormalizeQueryKeepNames のような関数は、より高いパフォーマンスを実現するためにクエリのパース/整形を行わないため、これは正規化クエリの分析に役立ちます。 #27380 (Amos Bird)。
  • multiMatchAny などの hyperscan 関連の関数で巨大な正規表現が使用されるのを防ぐため、max_hyperscan_regexp_lengthmax_hyperscan_regexp_total_length の 2 つの設定項目を追加しました。 #27378 (Amos Bird)。
  • ビットマップ集約関数によって消費されるメモリが、メモリ制限に含めて計上されるようになりました。これにより #26555 が解決されました。#27252alexey-milovidov)。
  • S3 プロキシリゾルバ向けに 10 秒間のキャッシュを追加。 #27216 (ianton-ru).
  • グローバルな mutex を廃止し、正規表現の構築ごとに個別の mutex を用いるようにしました。これにより、巨大な正規表現の構築処理が他の関連スレッドをブロックすることを防ぎます。 #27211 (Amos Bird)。
  • PostgreSQL データベースエンジン用スキーマのサポートを追加。 #27166 をクローズ。 #27198Kseniia Sumarokova)。
  • clickhouse-client でメモリ使用量を追跡できるようにしました。 #27191 (Filatenkov Artur).
  • クエリの開始に失敗した場合でも system.query_logquery_kind を記録するようにしました。 #27182Amos Bird)。
  • テーブル system.replicas に、レプリカ名ごとのアクティブ状態を示す列 replica_is_active を追加しました。#27138 をクローズしました。#27180 (Maksim Kita).
  • Web UI でサーバー URI を介してクエリ設定を渡せるようにしました。 #27177 (kolsys).
  • MaxPushedDDLEntryID という新しいメトリクスを追加。これは、現在のノードが ZooKeeper にプッシュした DDL エントリ ID の最大値を示します。 #27174 (Fuwang Hu)。
  • clickhouse-keeper が znode を作成する際の存在条件の判定および空文字列ノードの判定を改善しました。 #27125 (小路)。
  • Merge JOIN が右側の空集合を正しく処理するようになりました。#27078 (Vladimir C)。
  • 関数をシャード単位の定数として扱えるようになりました。これは、分散テーブルのコンテキストで実行される場合には通常の列を生成し、それ以外の場合には定数値を生成することを意味します。代表的な関数としては、hostName(), tcpPort(), version(), buildId(), uptime() などがあります。 #27020 (Amos Bird)。
  • extractAllGroupsHorizontal を更新しました。各行あたりの一致数の上限を、オプションの第3引数で設定できるようになりました。 #26961 (Vasily Nemkov)。
  • system.rocksdb テーブル経由で RocksDB の統計情報を公開します。ClickHouse の設定ファイル内の rocksdb... キーから RocksDB のオプションを読み取ります。注記: ClickHouse は RocksDB に依存しておらず、追加の統合用ストレージエンジンの 1 つに過ぎません。 #26821 (Azat Khuzhin).
  • RocksDB の内部ログをより冗長でないものにしました。注記: ClickHouse は RocksDB に依存しておらず、これは追加の統合ストレージエンジンの 1 つにすぎません。この変更により #26252 がクローズされました。 #26789 (alexey-milovidov)。
  • デフォルトロールの変更が影響するのは新しいセッションだけです。 #26759 (Vitaly Baranov).
  • Docker では Watchdog がデフォルトで無効になっています。Ctrl+C が正しく処理されない問題を修正しました。 #26757 (Mikhail f. Shiryaev).
  • SET PROFILE は、渡されたプロファイルに制約が設定されている場合、その制約も適用されるようになりました。 #26730 (Vitaly Baranov).
  • KILL QUERY リクエストの処理を改善しました。 #26675 (Raúl Marín).
  • mapPopulatesSeries 関数は Map 型をサポートするようになりました。 #26663 (Ildus Kurbangaliev).
  • skip_unavailable_shards 使用時の過剰な(2 回の)接続試行を修正。 #26658 (Azat Khuzhin).
  • 接続に失敗した場合(例: EMFILE 発生時)に clickhouse-benchmark がハングしないようにしました。 #26656 (Azat Khuzhin).
  • Kafka エンジンでより多くのスレッドを使用できるようにしました。 #26642 (feihengye).
  • clickhouse-benchmark にラウンドロビンのサポートを追加しました(統計レポートの出力を除き、通常のマルチホスト/マルチポート実行と違いはありません)。 #26607 (Azat Khuzhin)。
  • 実行可能ディクショナリ(executableexecutable_pool)が、clickhouse-local を使用した DDL クエリで作成できるようになりました。#22355 をクローズしました。#26510Maksim Kita)。
  • mysql および postgresql 互換プロトコルハンドラー用のクライアントクエリ種別を設定しました。 #26498 (anneji-dev).
  • distributed_push_down_limit=1 を使用して、SELECT * FROM dist ORDER BY key LIMIT 10 のようなクエリではシャード側で LIMIT を適用します。SELECT DISTINCT shading_key FROM dist ORDER BY key のようなクエリに対しては、Distinct/LIMIT BY ステップの実行を避けます。これにより、distributed_push_down_limit 設定が optimize_distributed_group_by_sharding_key の最適化でも正しく適用されるようになりました。#26466Azat Khuzhin)。
  • Protobuf を 3.17.3 に更新しました。変更履歴は https://github.com/protocolbuffers/protobuf/releases で確認できます。#26424Ilya Yatsishin)。
  • 大規模クラスタにおけるテイルレイテンシを軽減するための use_hedged_requests 設定を有効にしました。#26380alexey-milovidov)。
  • ユーザーの許可ホスト一覧に存在しないホストが指定された場合の挙動を改善。 #26368 (ianton-ru).
  • CREATE TABLE を使用して Distributed ディレクトリモニタの設定を指定できるようにしました(例: CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 など)。 #26336 (Azat Khuzhin).
  • Web UI のオリジンと異なる場合、サーバーアドレスを Web UI の履歴 URL に保存するようにしました。これにより #26044 が解決されました。#26322alexey-milovidov)。
  • sleep / sleepEachRow 呼び出しのプロファイル用イベントを追加。 #26320 (Raúl Marín)。
  • シャードの接続を異なるクラスタ間で再利用できるようにしました。また、cluster テーブル関数を使用する際に新しい接続を作成しないようにもしました。 #26318 (Amos Bird)。
  • 古い一時ディレクトリをクリーンアップする処理の実行間隔を、デフォルト値を持つパラメータで制御できるようにしました。 #26212. #26313 (fastio).
  • 関数 range によって生成されるデータ量の安全性を確保するためのしきい値を調整できるように、設定項目 function_range_max_elements_in_block を追加しました。これにより #26303 が解決されます。 #26305alexey-milovidov)。
  • サンプリング時ではなくテーブル作成時にハッシュ関数をチェックするようにしました。MergeTree 用の設定を追加し、不正なサンプリング列でテーブルが作成されていても、サンプリングが一度も使用されない場合にはこの設定を無効化することで、例外を発生させずにサーバーを起動できるようにしました。 #26256 (zhaoyu).
  • output_format_avro_string_column_pattern 設定を追加し、指定した String 列を、デフォルトの bytes ではなく Avro の string 型として出力するようにしました。 #22414 を実装しています。 #26245Ilya Golshtein)。
  • Log および TinyLog テーブル向けに、system.columns テーブルへカラムサイズ情報を追加しました。これにより #9001 が解決しました。#26241Nikolay Degterinsky)。
  • カスタムディスク構成を使用していて、いくつかのディスクに detached ディレクトリが存在しない場合でも、system.detached_parts テーブルをクエリしても例外をスローしないようにしました。これにより #26078 がクローズされました。 #26236alexey-milovidov)。
  • now()today() のような定数式を含む、キー内の非決定的関数をチェックします。これにより #25875 が解決されました。また、#11333 も解決されました。#26235alexey-milovidov)。
  • PostgreSQL テーブルエンジンにおいて timestamp および timestamptz データ型を DateTime64 に変換する。 #26234 (jasine)。
  • 投影に対して積極的な IN インデックス解析を適用し、より適切な投影候補を選択できるようにしました。 #26218 (Amos Bird).
  • スカラー関数が渡される場合、IN における GLOBAL キーワードを削除しました。以前のバージョンでは、ユーザーが GLOBAL IN f(x) を指定すると例外がスローされていました。 #26217 (Amos Bird).
  • 例外メッセージにエラーID(BAD_ARGUMENTS など)を追加。これにより #25862 がクローズされました。#26172alexey-milovidov)。
  • clickhouse-local の --progress オプションでの不正な出力を修正しました。プログレスバーは 100% に達するとクリアされ、clickhouse-client と同じ動作になります。#17484 をクローズします。#26128Kseniia Sumarokova)。
  • merge_selecting_sleep_ms 設定を追加しました。 #26120 (lthaooo).
  • 1 ブロック単位の readahead を行う複雑な Linux AIO の使用を廃止し、代わりに O_DIRECT を用いたシンプルな同期 I/O に置き換えました。以前のバージョンでは、max_threads が 1 より大きい場合、設定 min_bytes_to_use_direct_io が正しく動作しない可能性がありました。ダイレクト I/O(クエリに対してはデフォルトで無効、大きなマージに対してはデフォルトで有効)は、これまでよりも効率の低い方法で動作することになります。これにより #25997 が解決されました。#26003alexey-milovidov)。
  • REPLACE TABLE クエリの実行時に Distributed テーブルをフラッシュする。#24566 を解決。新しいテーブルへの挿入に失敗した場合、[CREATE OR] REPLACE TABLE ... AS SELECT クエリでテーブルを置き換え(または作成)しないようにする。#23175 を解決。#25895tavplubix)。
  • system.query_logviews カラムを追加し、クエリによって実行された(マテリアライズドビューまたはライブビューの)名前を記録するようにしました。クエリの実行中に実行された各ビューに関する情報を含む新しいログテーブル(system.query_views_log)を追加しました。ビューの実行を変更しました: ビューの実行中に例外がスローされた場合、すでに開始されているビューは、完了するまで実行を継続します。これは以前は parallel_view_processing=true のときの挙動でしたが、現在は常にこの挙動になりました。- 依存ビューは、コンテキストに対して読み取り進捗を報告するようになりました。 #25714 (Raúl Marín).
  • 分散クエリの実行完了後に、コネクションのドレインを非同期で行うようにしました。新しいサーバー設定 max_threads_for_connection_collector が追加され、バックグラウンドでコネクションを回収するワーカー数を指定できるようになりました。プールが一杯になっている場合、コネクションは同期的にドレインされますが、以前とは少し挙動が異なります。クライアントへ EOS を送信した後にドレインされ、十分なデータを受信した時点でクエリは即座に成功となり、発生した例外はクライアントへ投げられるのではなくログに記録されます。drain_timeout 設定(デフォルト 3 秒)を追加しました。ドレイン処理中のコネクションは、タイムアウトに達すると切断されます。 #25674 (Amos Bird)。
  • 設定で複数の include がサポートされました。ユーザー設定やリモートサーバー設定を複数のソースからインクルードできるようになりました。from_zkfrom_env、または incl 属性を持つ <include /> 要素を配置するだけで、対応する内容に置き換えられます。#24404nvartolomei)。
  • insert_distributed_one_random_shard = 1 使用時に、複数ブロックが分散テーブルへ挿入されてしまう問題を修正しました。これはマイナーな機能です。改善としてマークしました。 #23140 (Amos Bird).
  • Map 型において LowCardinality および FixedString のキーおよび値をサポートしました。#21543hexiaoting)。
  • ローカルディスク設定のリロードを有効にしました。 #19526 (taiyang-li).

不具合修正

  • レプリカ間の不整合を引き起こす可能性のあるバグをいくつか修正しました。 #27808 (tavplubix).
  • DROP PART において Unexpected merged part intersects drop range というエラーを引き起こす可能性があったまれなバグを修正しました。 #27807 (alesapin).
  • Kafka から NULL(トゥームストーン)メッセージを受信した場合に一部のフォーマットでクラッシュが発生しないようにしました。#19255 をクローズ。#27794filimonov)。
  • union distinct を含むサブクエリにおける列フィルタリングを修正。 #27578 をクローズ。 #27689 (Kseniia Sumarokova)。
  • arrayHas のような関数が、DateTimeDateTime64 などの、数値型ではない異なる型の NullableLowCardinality 配列に適用された場合に発生する不正な型キャストを修正しました。以前のバージョンでは不正なキャストが行われていましたが、新しいバージョンでは例外がスローされるようになります。これにより #26330 がクローズされます。 #27682alexey-milovidov)。
  • 接続がクローズされない問題を引き起こしていた PostgreSQL テーブル関数を修正しました。これにより #26088 がクローズされました。 #27662 (Kseniia Sumarokova).
  • Unexpected merged part ... intersecting drop range ... エラーが発生する別のケースを修正しました。 #27656 (tavplubix).
  • Distributed テーブルのエイリアス列に関するエラーを修正。 #27652 (Vladimir C)。
  • max_memory_usage* を 0 以外の値に設定した後、再び 0(無制限)にリセットできませんでした。修正しました。 #27638 (tavplubix).
  • コンポーネントから時間値を構築する際に発生していたアンダーフローを修正しました。#27193 をクローズしました。#27605Vasily Nemkov)。
  • 一部のパーツに欠損列が含まれている場合に、プロジェクションのマテリアライズ中にクラッシュする不具合を修正しました。この修正により、#27512 が解決されます。#27528Amos Bird)。
  • メトリクス BackgroundMessageBrokerSchedulePoolTask を修正(おそらくタイプミス)。 #27452 (Ben).
  • シャード数ゼロかつ集約を含む分散クエリを修正。 #27427 (Azat Khuzhin).
  • KB サフィックスを含まない /proc/meminfo への対応。 #27361 (Mike Kot).
  • 行レベルセキュリティ、PREWHERE 句および LowCardinality フィルタを使用したクエリで誤った結果が返される問題を修正。 #27179#27329Nikolai Kochetov)。
  • 古い構文で作成された MergeTree テーブルのパーティション ID 検証が誤っていた問題を修正しました。 #27328 (tavplubix).
  • 並列フォーマット(CSV/TSV)使用時の MySQL プロトコルの問題を修正。 #27326 (Raúl Marín).
  • サンプリングを使用するクエリで発生する Cannot find column エラーを修正。#24574 で導入された不具合。#26522 を解決。#27301Nikolai Kochetov)。
  • PREWHERE 内で LowCardinality を使用した一部のクエリで発生する Expected ColumnLowCardinality, gotUInt8Bad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinality といったエラーを修正します。さらに重要な点として、エラーメッセージ内の空白が不足している問題も修正します。これにより #23515 が解決されます。 #27298Nikolai 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 において、無効なパーティションで止まってしまうミューテーションの問題を修正。 #27248 (Azat Khuzhin)。
  • 曖昧な場合、ラムダ関数は他のエイリアスや識別子よりも引数として解釈されることを優先します。 #27235 (Raúl Marín).
  • マージ結合におけるカラム構造を修正し、#27091 をクローズ。#27217Vladimir C)。
  • まれに system.detached_parts テーブルに一部のパーツについて誤った情報が格納されてしまうことがある問題を修正しました。#27114 を修正します。 #27183tavplubix)。
  • 空配列を扱う multiSearch* 関数での未初期化メモリを修正し、#27169 をクローズ。#27181Vladimir C)。
  • GRPCServer の同期処理の問題を修正しました。この PR は #27024 を解決します。#27064Vitaly 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 とのレースコンディションにより発生しうるミューテーションスタックを修正。 #27002 (Azat Khuzhin).
  • ALTER TABLE ... PARTITION ID xxx のようなクエリで指定された partition ID の妥当性が検証されるようになりました。 #25718 を修正。 #26963alesapin)。
  • 複数の JOIN を含む一部の状況で発生する「Unknown column name」エラーを修正し、#26899 をクローズ。#26957Vladimir C)。
  • カスタム TLD の読み込み処理を修正(バッファが小さい場合やファイルが大きい場合に処理が途中で停止してしまう問題を解消)。 #26948 (Azat Khuzhin).
  • DEFAULT 列が、DEFAULT 式を持たない他の非マテリアライズド列を参照している場合に発生するエラー Missing columns: 'xxx' を修正しました。#26591 を修正。#26900alesapin)。
  • library 辞書ソース向けの library-bridge における辞書キーのロード処理を修正しました。 #26834 (Kseniia Sumarokova).
  • 一部のコンビネータを適用すると集約関数のパラメータが失われ、Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported のような例外が発生する可能性がありました。この問題を修正しました。 #26196 および #26433 を修正します。 #26814 (tavplubix)。
  • system.part_logREMOVE_PART に対して event_time_microseconds の値を追加しました。これまでのバージョンでは設定されていませんでした。 #26720 (Azat Khuzhin).
  • ReplicatedMergeTree テーブルのシャットダウン時にはデータを削除せず、データとメタデータの不整合が生じないようにします。 #26716 (nvartolomei)。
  • SET ROLE が正しく動作しないことがありましたが、この PR で修正されました。 #26707 (Vitaly Baranov)。
  • 並列フォーマットに対するいくつかの修正(https://github.com/ClickHouse/ClickHouse/issues/26694)。#26703Raúl Marín)。
  • ウィンドウ関数における nullptr の潜在的なデリファレンスを修正しました。これにより #25276 が修正されました。#26668Alexander 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 をクローズ。 #26529Kseniia Sumarokova)。
  • CREATE DICTIONARY クエリで、辞書名またはデータベース名がクオートされている場合に発生する問題を修正しました。#26491 をクローズ。 #26508Maksim Kita)。
  • カラムエイリアスの書き換え後に壊れていたカラム名解決を修正しました。これにより #26432 が解決されます。#26475Amos Bird)。
  • いくつかの fuzzing で検出された msan クラッシュを修正。 #22517 を修正。 #26428Nikolai Kochetov)。
  • partial_merge_join のクローズ処理時に無限に続く非結合ブロックストリームの問題を修正 #26325#26374Vladimir C)。
  • 削除されたユーザーとしてログインした際にクラッシュが発生する可能性があった問題を修正しました。この PR は #26073 を修正します。 #26363Vitaly Baranov)。
  • 複数カラムに対する optimize_distributed_group_by_sharding_key を修正しました(シャーディングキー式に複数カラムが含まれる場合に、optimize_skip_unused_shards=1 / allow_nondeterministic_optimize_skip_unused_shards=1 と組み合わせると誤った結果が返される問題)。#26353Azat Khuzhin)。
  • 失われたレプリカの復旧時に、レプリカ間で不整合が生じる可能性があるまれなバグを修正。 #26321 (tavplubix).
  • 内部バッファの末尾にエスケープシーケンスが存在する場合の zstd 伸長処理(テーブルデータとは無関係な zstd フレーミング形式でのインポート/エクスポート用)を修正しました。 #26013 をクローズしました。 #26314 (Kseniia Sumarokova)。
  • totals との JOIN における論理エラーを修正し、#26017 をクローズ。#26250Vladimir C)。
  • system.stack_trace テーブルの thread_name 列に含まれる過剰な改行文字を削除しました。これにより #24124 が修正されました。#26210alexey-milovidov)。
  • 複数の untuple 式が使用された場合に発生する可能性のあるクラッシュを修正。 #26179 (alexey-milovidov).
  • 値 0 に対応する要素が定義されていない Nullable Enum についても toString で例外を投げないようにし、#25806 をクローズしました。#26123Vladimir C)。
  • クエリ実行中に例外が発生した際に、ClickHouse が送信する MySQL プロトコルパケット内の誤った sequence_id を修正しました。これが原因で、MySQL クライアントが ClickHouse サーバーへの接続をリセットしてしまう可能性がありました。#21184 を修正しました。#26051tavplubix)。
  • cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom() が const 値に対して誤った型を返し、その結果 optimize_skip_unused_shards が動作しない問題を修正しました:#26041 (Azat Khuzhin).
  • prewhere を使用した通常のプロジェクションで発生しうるヘッダーの不整合を修正します。これにより #26020 が修正されます。#26038Amos Bird)。
  • remote() に対して関数を伴わないカラムからなる sharding_key を修正(以前は select * from remote('127.1', system.one, dummy)Unknown column: dummy, there are only columns . エラーになっていました)。 #25824 (Azat Khuzhin).
  • MaterializeMySQL から SELECT した際に発生する Not found column ... および Missing column ... エラーを修正しました。これにより #23708#24830#25794 が解決されています。 #25822tavplubix)。
  • 非 UInt64 型に対する optimize_skip_unused_shards_rewrite_in を修正しました(誤ったシャードが選択されてしまう、または Cannot infer type of an empty tupleFunction tuple requires at least one argument という例外がスローされる可能性がありました)。 #25798 (Azat Khuzhin).

ビルド/テスト/パッケージングの改善

  • ステートフルおよびステートレスなテストをランダムなタイムゾーンで実行するようにしました。 #12439 を修正。Protobuf 形式で String を DateTime として読み込み、DateTime を String として書き込む場合に、タイムゾーンを考慮するようになりました。Arrow および Parquet 形式で UInt16 を DateTime として読み込む場合、まず Date として扱い、Arrow および Parquet では Date が UInt16 としてシリアライズされるため、DateTime のタイムゾーンを考慮して DateTime に変換するようになりました。GraphiteMergeTree は、時間の丸めにおいてタイムゾーンを考慮するようになりました。 #5098 を修正。著者: @alexey-milovidov. #15408 (alesapin)。
  • clickhouse-testJinja2 テンプレートを用いた SQL テストをサポートしました。 #26579 (Vladimir C)。
  • clang-13 を用いたビルドのサポートを追加しました。これにより #27705 が解決されました。 #27714 (alexey-milovidov)。 #27777 (Sergei Semin)
  • 特定の CPU 命令セットを有効または無効にしてビルドするための CMake オプションを追加しました。これは #17469 および #27509 に対応するものです。 #27508 (alexey-milovidov)。
  • 動的ライブラリ使用時の補助プログラムのリンクを修正しました。 #26958 (Raúl Marín)。
  • RocksDB を 2021-07-16 時点の master に更新しました。 #26411 (alexey-milovidov)。

ClickHouse リリース v21.8, 2021-08-12

アップグレードに関する注意事項

  • 新バージョンでは、システムログテーブル(system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log)に Map データ型が使用されます。これらのテーブルは新しいデータ型で自動作成されます。古いクエリをサポートするために仮想カラムが作成されます。 #18698 をクローズ。 #23934, #25773 (hexiaoting, sundy-li, Maksim Kita)。バージョン 21.8 から以前のバージョンに ダウングレード したい場合は、ログを含む system テーブルを手動で削除する必要があります。/var/lib/clickhouse/data/system/*_log を参照してください。

新機能

  • SQL/JSON 標準の一部をサポートしました。#24148 (l1tsolaiki, Kseniia Sumarokova)。
  • CPU 使用率、ディスク使用率、メモリ使用量、IO、ネットワーク、ファイル、ロードアベレージ、CPU 周波数、温度センサー、EDAC カウンタ、システム稼働時間に関する共通のシステムメトリクスを(system.asynchronous_metrics および system.asynchronous_metric_log で)収集するようにしました。また、スケジューリングジッタやメトリクス収集に費やした時間に関するメトリクスも追加しました。ClickHouse における atop のように動作し、追加のツールをインストールしていなくても監視データにアクセスできます。#9430 をクローズ。#24416 (alexey-milovidov, Yegor Levankov)。
  • MaterializedPostgreSQL テーブルエンジンおよびデータベースエンジンを追加しました。このデータベースエンジンにより、データベース全体、またはそのテーブル群の任意のサブセットをレプリケートできます。#20470 (Kseniia Sumarokova)。
  • 新しい関数 leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8() を追加しました。#26075 (Vitaly Baranov)。
  • インデックスをインデックスのリストの先頭に追加できるようにするため、ADD INDEX コマンドに FIRST キーワードを追加しました。#25904 (xjewer)。
  • 既存のデータスキッピングインデックスに関する情報を含む system.data_skipping_indices テーブルを導入しました。#7659 をクローズ。#25693 (Dmitry Novik)。
  • bin / unbin 関数を追加しました。#25609 (zhaoyu)。
  • mapAdd および mapSubtract 関数で Map 型および UInt128, Int128, UInt256, Int256 型をサポートしました。#25596 (Ildus Kurbangaliev)。
  • DISTINCT ON (columns) 式をサポートしました。#25404 をクローズ。#25589 (Zijie Lu)。
  • カスタム設定をデフォルトにリセットし、テーブルのメタデータから削除できるようにしました。これにより、システムや設定ファイルのデフォルト値を知らなくても変更をロールバックできます。#14449 をクローズ。#17769 (xjewer)。
  • EXPLAIN PIPELINE graph = 1 クエリが送信された場合、Web UI でパイプラインをグラフとして可視化するようにしました。#26067 (alexey-milovidov)。

パフォーマンスの改善

  • 集約関数をコンパイルするようにしました。有効化するにはオプション compile_aggregate_expressions を使用します。#24789 (Maksim Kita)。
  • 多くのカラムを持つテーブルからの読み取りを必要とする短いクエリのレイテンシを改善しました。#26371 (Anton Popov)。

改善

  • システムログテーブル(system.query_logsystem.query_thread_logsystem.processessystem.opentelemetry_span_log)で Map データ型を使用するようにしました。これらのテーブルは新しいデータ型で自動作成されます。古いクエリをサポートするために仮想カラムが作成されます。#18698 をクローズしました。#23934#25773hexiaotingsundy-liMaksim Kita)。
  • 複雑なキーを持ちつつ、そのキーが 1 つの属性だけを含むディクショナリについては、dictGetdictHas 関数でキー式をタプルでラップする必要がなくなりました。 #26130 (Maksim Kita).
  • AggregateFunction の状態から bin / hex 関数を利用できるようにしました。#26094zhaoyu)。
  • empty および notEmpty 関数で UUID 型の引数をサポートしました。UUID は全てがゼロ(nil UUID)の場合に空と見なされます。#3446 をクローズしました。#25974zhaoyu)。
  • MySQL プロトコルで SET SQL_SELECT_LIMIT をサポートしました。 #17115 をクローズします。 #25972Kseniia Sumarokova)。
  • ネットワーク通信のインストルメンテーションを拡充:受信/送信バイト数のカウンタを追加し、受信/送信のゲージを追加。不足していたドキュメントを追加。#5897 をクローズ。#25962 (alexey-milovidov).
  • optimize_move_to_prewhere_if_final 設定を追加しました。クエリに FINAL が含まれている場合、最適化処理 move_to_prewhereoptimize_move_to_prewhereoptimize_move_to_prewhere_if_final の両方が有効なときにのみ有効になります。#8684 をクローズしました。 #25940Kseniia Sumarokova)。
  • JOIN されたテーブルに対して複雑なクォート済み識別子を許可。 #17861 をクローズ。 #25924alexey-milovidov)。
  • Nested データ型で Unicode コンポーネント(例: 中国語、キリル文字)をサポート。 #25594 をクローズ。 #25923alexey-milovidov)。
  • quantiles* 関数が aggregate_functions_null_for_empty とともに動作できるようにしました。 #25892 をクローズしました。 #25919alexey-milovidov)。
  • パラメトリック集約関数のパラメータとして、リテラルだけでなく任意の定数式(例: 1 + 2)を受け付けるようにしました。また、パラメトリック集約関数内で、パラメータ化されたクエリ({param:UInt8} のような形式)のクエリパラメータを使用できるようにしました。#11607 をクローズします。#25910alexey-milovidov)。
  • 無効な Date をパースしようとした際に、例外が正しくスローされるようにしました。#6481 をクローズしました。#25909alexey-milovidov)。
  • 設定での複数の include のサポート。ユーザー設定やリモートサーバー設定を複数のソースからインクルードできます。from_zkfrom_env、または incl 属性を持つ <include /> 要素を配置するだけで、その要素が対応する設定内容に置き換えられます。#24404nvartolomei)。
  • "null" という名前の列(バッククォートまたは二重引用符で指定する必要があります)および ON CLUSTER を含むクエリのサポート。 #24035 をクローズ。 #25907alexey-milovidov)。
  • JSONExtractLowCardinalityDecimalUUID をサポートしました。#24606 をクローズ。 #25900Kseniia Sumarokova)。
  • 履歴ファイルを readline 形式から replxx 形式へ変換するようにしました。 #25888 (Azat Khuzhin).
  • DROP PART 実行後、または空のパーツをバックグラウンドで削除した後に、パーツ同士が交差する状態が発生しうる問題を修正しました。 #25884 (alesapin).
  • ReplicatedMergeTree テーブルにおける失われたパーツの処理を改善しました。ReplicationQueue 内でまれに発生していた不整合を修正し、#10368 を解決しました。#25820alesapin)。
  • 読み取り不可の作業ディレクトリでも clickhouse-client を起動できるようにしました。 #25817 (ianton-ru).
  • Merge ストレージで発生する「No available columns」エラーを修正。 #25801 (Azat Khuzhin).
  • MySQL エンジンで、MySQL と ClickHouse 間のカラムコメントのやり取りがサポートされるようになりました。 #25795 (Storozhuk Kostiantyn).
  • 空集合に対する GROUP BY での定数の一貫性のない動作を修正。 #6842 をクローズ。 #25786Kseniia Sumarokova)。
  • ReplicatedMergeTree に対する DROP PARTITION および TRUNCATE 実行時に、対象パーティション内で既に実行中のマージをキャンセルするようにしました。#17151 を修正。#25684tavplubix)。
  • MaterializeMySQL で ENUM データ型をサポートしました。 #25676 (Storozhuk Kostiantyn).
  • JOIN 句においてマテリアライズド列およびエイリアス列をサポートし、#13274 を解決しました。 #25634 (Vladimir C)。
  • ALTER TABLE ... DETACH とバックグラウンドでのマージ処理との間で発生しうる論理的なレースコンディションを修正しました。 #25605 (Azat Khuzhin).
  • クライアントからの INSERT データを待機している時間を正しく含めるように NetworkReceiveElapsedMicroseconds メトリクスを修正。#9958 をクローズ。#25602alexey-milovidov)。
  • S3 および HDFS 向けに TRUNCATE TABLE をサポート。#25530 をクローズ。#25550Kseniia Sumarokova)。
  • バックグラウンドジョブ(マージ、ミューテーション、フェッチ)の実行用プールのスレッド数を変更できるように、設定の動的リロードをサポート。 #25548 (Nikita Mikhaylov).
  • JSONExtract を使用して、非文字列要素を文字列として抽出できるようにしました。これは #25414 への対応です。 #25452Amos Bird)。
  • StorageMergeDatabase 引数で正規表現をサポートしました。#776 をクローズ。#25064flynn)。
  • Web UI: 値がURLのように見える場合、自動的にリンクを生成するようになりました。 #25965 (alexey-milovidov).
  • CentOS 8 などの systemd を使用するシステムで sudo service clickhouse-server start が動作するようにしました。#14298 をクローズ。#17799 をクローズ。#25921alexey-milovidov)。

バグ修正

  • 一部のケースで SET ROLE が誤っていた問題を修正。 #26707 (Vitaly Baranov).
  • ウィンドウ関数で発生しうる nullptr デリファレンスを修正し、#25276 を解決。#26668Alexander Kuzmenkov)。
  • groupBitmapAnd/Or/Xor の誤っていた関数名を修正。#26557 を修正(Amos Bird)。
  • RabbitMQ が起動されていない場合に RabbitMQ のシャットダウン時に発生するクラッシュを修正。#26504 をクローズ。#26529Kseniia Sumarokova)。
  • CREATE DICTIONARY クエリで、辞書名またはデータベース名が引用符で囲まれている場合に発生する問題を修正。#26491 をクローズ。#26508Maksim Kita)。
  • 列エイリアスの書き換え後に壊れていた名前解決を修正。#26432 を修正。#26475Amos Bird)。
  • partial_merge_join における未結合ブロックの無限ストリームを修正し、#26325 をクローズ。#26374Vladimir C)。
  • 削除されたユーザーとしてログインした場合に発生し得るクラッシュを修正。#26073 を修正。#26363Vitaly Baranov)。
  • optimize_distributed_group_by_sharding_key を、シャーディングキー式に複数カラムが含まれる場合でも正しく動作するよう修正しました(optimize_skip_unused_shards=1 / allow_nondeterministic_optimize_skip_unused_shards=1 が有効で、シャーディングキー式に複数カラムが含まれると誤った結果が返されていた問題)。#26353Azat Khuzhin)。
  • Date から DateTime(または DateTime64)への CAST において、DateTime 型のタイムゾーンが使用されていませんでした。これは DateDateTime の比較にも影響していました。DateDateTime の共通型の推論においても、対応するタイムゾーンが使用されていませんでした。この問題は関数 if の結果および配列構築の結果に影響していました。#24128 をクローズします。#24129Maksim Kita)。
  • レプリカ喪失からの復旧処理中に、まれにレプリカ間の不整合を引き起こす可能性があった不具合を修正しました。 #26321 (tavplubix).
  • 内部バッファの末尾にエスケープシーケンスがある場合の zstd 伸長処理を修正。#26013 をクローズ。#26314Kseniia Sumarokova)。
  • WITH TOTALS を伴う JOIN における論理エラーを修正し、#26017 をクローズしました。#26250Vladimir C)。
  • system.stack_trace テーブルの thread_name 列から不要な改行を削除。#24124 を修正。#26210alexey-milovidov)。
  • LowCarinality カラムに対する joinGet を修正し、#25993 をクローズ。#26118Vladimir C)。
  • 設定 validate_polygons を無効にしている場合に pointInPolygon で発生しうるクラッシュを修正しました。 #26113 (alexey-milovidov).
  • 存在しないリモートディレクトリを走査した際に例外がスローされる問題を修正。 #26087 (ianton-ru).
  • ZooKeeper クライアントの abort により発生するまれなサーバークラッシュを修正。 #25813 を解決。 #26079alesapin)。
  • 一部のケースで、右サブクエリ結合におけるスレッド数の推定が誤っていた問題を修正。 #24075 をクローズ。 #26052Vladimir C)。
  • クエリ実行中に例外が発生した際に ClickHouse が送信する MySQL プロトコルパケット内の誤った sequence_id を修正しました。この問題により、MySQL クライアントが ClickHouse サーバーへの接続をリセットしてしまう可能性がありました。#21184 を修正。#26051tavplubix)。
  • PREWHERE を使用した通常のプロジェクションで発生し得るヘッダー不整合を修正。 #26020 を修正。 #26038Amos Bird)。
  • 整数キーを持つ Map 型のフォーマットを JSON に修正しました。 #25982 (Anton Popov)。
  • クエリプロファイラのスタックアンワインド中に発生する可能性のあるデッドロックを修正。#25968 を修正。#25970Maksim Kita)。
  • 不正な引数で dictGet() を呼び出した際に発生するクラッシュを修正。 #25913 (Vitaly Baranov)。
  • PostgreSQL エンジンにおける scram-sha-256 認証を修正しました。#24516 をクローズしました。#25906Kseniia Sumarokova)。
  • バックグラウンドプールがフルのときにバックグラウンドタスクで発生する、バックオフ時間が極端に長くなる問題を修正。 #25836 を修正。 #25893alesapin)。
  • 標準以外のページサイズ使用時における ARM の例外処理を修正。#25512#25044#24901#23183#20221#19703#19028#18391#18121#17994#12483 を修正。#25854Maksim Kita)。
  • remote() において、関数を伴わない列を sharding_key に使用した場合の動作を修正しました(以前は select * from remote('127.1', system.one, dummy) を実行すると Unknown column: dummy, there are only columns . エラーが発生していました)。 #25824 (Azat Khuzhin).
  • MaterializeMySQL からの SELECT 時に発生していた Not found column ... および Missing column ... エラーを修正しました。#23708#24830#25794 を修正。#25822tavplubix)。
  • 非 UInt64 型に対する optimize_skip_unused_shards_rewrite_in を修正しました(最終的に誤ったシャードが選択されてしまう、または Cannot infer type of an empty tupleFunction tuple requires at least one argument をスローする可能性がありました)。 #25798 (Azat Khuzhin).
  • ReplicatedMergeTree テーブルに対する DROP PART クエリの実行時に、Unexpected merged part intersecting drop range というエラーメッセージが発生しうる、まれなバグを修正しました。 #25783 (alesapin).
  • GROUP BY 式を伴う TTL が、パーツ内での最初の実行以降は TTL を実行しなくなってしまうバグを修正しました。 #25743 (alesapin).
  • StorageMerge がエイリアスを持つテーブルにもアクセスできるようにしました。 #6051 をクローズしました。 #25694 (Kseniia Sumarokova)。
  • 一部のケースで辞書結合が遅くなる問題を修正し、#24209 をクローズ。 #25618 (Vladimir C)。
  • TTL 式で使用されているカラムに対する ALTER MODIFY COLUMN を修正しました。 #25554 (Anton Popov).
  • UInt8 以外の型に対する PREWHERE のアサーションを修正し、#19589 をクローズ。#25484Vladimir C)。
  • いくつかのファジングで検出された msan クラッシュを修正。 #22517 を修正。 #26428Nikolai Kochetov)。
  • Kubernetes 上で発生する「cluster pod restart failed (or timeout)」エラーを修正するため、clickhouse-server の Docker エントリーポイント内の chown コマンドのチェックを更新します。 #26545 (Ky Li).

ClickHouse リリース v21.7, 2021-07-09

後方互換性のない変更

  • 明示的に定義された大きな集合を使用するクエリのパフォーマンスを改善しました。互換性設定 legacy_column_name_of_tuple_literal を追加しました。バージョン 21.7 未満からそれ以降の任意のバージョンへクラスタをローリングアップデートする際には、これを true に設定することを推奨します。そうしないと、更新中に IN 句で明示的に定義された集合を含む分散クエリが失敗する可能性があります。 #25371 (Anton Popov)。
  • clickhouse-keeper(ZooKeeper の実験的な代替)の最大バッファサイズに前方/後方互換性のない変更を行いました。本番環境での稼働前、今のうちに行うことを推奨します。 #25421 (alesapin)。

新機能

  • XML の代替として YAML 形式での設定をサポートしました。これにより #3607 がクローズされました。#21858BoloniniD)。
  • データは(おそらく)存在しているものの ZooKeeper のメタデータが失われた場合に、レプリケートテーブルを復元する方法を提供しました。#13458 を解決します。#13652Mike Kot)。
  • Arrow/Parquet/ORC 形式における struct および map、ならびに Arrow 入出力形式における dictionary をサポートしました。新しい設定 output_format_arrow_low_cardinality_as_dictionary を追加しました。#24341Kruglov Pavel)。
  • dictionary において Array 型をサポートしました。#25119Maksim Kita)。
  • 関数 bitPositionsToArray を追加しました。#23792 がクローズされました。作者 [Kevin Wan] (@MaxWk)。#25394Maksim Kita)。
  • 'Friday' や 'April' のような名前を返す関数 dateName を追加しました。作者 [Daniil Kondratyev] (@dankondr)。#25372Maksim Kita)。
  • カラムをその JSON 表現にシリアライズするための toJSONString 関数を追加しました。#25164Amos Bird)。
  • query_log に 2 つの新しいカラム initial_query_start_timeinitial_query_start_time_microsecond が追加され、分散クエリが存在する場合に、その開始時刻を記録するようになりました。#25022Amos Bird)。
  • 集約関数 segmentLengthSum を追加しました。#24250flynn)。
  • すべての IN/JOIN をデフォルトで GLOBAL IN/JOIN として扱う、新しいブール型設定 prefer_global_in_and_join を追加しました。#23434Amos Bird)。
  • Join テーブルエンジンに対する ALTER DELETE クエリをサポートしました。#23260foolchi)。
  • 集約関数 quantileBFloat16 と、それに対応する quantilesBFloat16 および medianBFloat16 を追加しました。これは非常にシンプルかつ高速な分位数推定器で、相対誤差は 0.390625% 以下です。これにより #16641 がクローズされました。#23204Ivan Novitskiy)。
  • flow analysis に有用な関数 sequenceNextNode() を実装しました。#19766achimbab)。

Experimental Feature

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

Performance Improvement

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

改良

  • レプリケーションの帯域幅を制限できるようにしました。2つの Replicated*MergeTree 設定 max_replicated_fetches_network_bandwidthmax_replicated_sends_network_bandwidth を追加し、テーブルごとのレプリケーションのフェッチ/送信の最大速度を制限できるようにしました。さらに、サーバー全体に適用される 2 つの設定(default ユーザープロファイル内) max_replicated_fetches_network_bandwidth_for_servermax_replicated_sends_network_bandwidth_for_server を追加し、すべてのテーブルに対するレプリケーションの最大速度を制限できるようにしました。これらの設定値は厳密に守られるわけではありません。デフォルトでは無効になっています。#1821 を修正します。 #24573 (alesapin)。
  • ODBC および Library ブリッジ向けのリソース制約と分離。ブリッジプロセス用に専用の clickhouse-bridge グループとユーザーを使用する。ブリッジが OOM キラーの最初の対象になるように、oom_score_adj を設定する。RSS の上限を 1 GiB に設定する。#23861 をクローズ。#25280Kseniia Sumarokova)。
  • スタンドアロンの clickhouse-keeper シンボリックリンクをメインの clickhouse バイナリに追加しました。これにより、メインの clickhouse サーバーなしでコーディネーションを実行できるようになりました。 #24059 (alesapin).
  • VIEW に対するクエリではグローバル設定を使用するようにしました。VIEW へのクエリがローカル設定を使用していたために、CREATE VIEWSELECT の設定が異なる場合にエラーが発生していた挙動を修正しました。現在は、VIEW はこうした変更後の設定は使用しませんが、CREATE VIEW クエリの SETTINGS セクションで追加の設定を渡すことは引き続き可能です。#20551 をクローズしました。#24095Vladimir)。
  • サーバー起動時に、不正なパーティション ID を持つパーツが削除されず、常にデタッチされてしまう問題を修正。 #25070#25166 (Nikolai Kochetov)。
  • バックグラウンドスケジュールプールのサイズを 128 に増加しました(background_schedule_pool_size 設定)。これにより、ZooKeeper との接続が遅い場合にレプリケーションキューがハングする問題を回避できます。 #25072 (alesapin).
  • バックグラウンドで同時にマージできるパーツ数を制限する MergeTree 設定 max_parts_to_merge_at_once を追加しました。OPTIMIZE FINAL クエリには影響しません。#1820 を修正。#24496alesapin)。
  • NOT IN 演算子をパーティションプルーニングで使用できるようにしました。 #24894 (Amos Bird)。
  • 127.0.1.1 のような IPv4 アドレスをローカルアドレスとして認識するようにしました。これは議論を呼ぶ変更であり、#23504 をクローズします。Michael Filimonov がこの機能のテストを行います。#24316alexey-milovidov)。
  • MaterializeMySQL(実験的な機能です)で作成された ClickHouse データベースには、マテリアライズ元の MySQL データベースからすべてのカラムコメントが含まれるようになりました。 #25199 (Storozhuk Kostiantyn)。
  • MySQL ストレージエンジン向けに connection_auto_close / connection_max_tries / connection_pool_size の設定を追加しました。 #24146 (Azat Khuzhin).
  • Distributed エンジンの起動時間を短縮。 #25663 (Azat Khuzhin).
  • Distributed テーブルの改善。internal_replication=true の場合、ディレクトリ名 (dirname) からレプリカ情報を削除しました(これにより、任意の数のレプリカを持つクラスタから Distributed テーブルへの INSERT が可能になります。以前は最大 15 レプリカのみサポートされており、それ以上では非同期ブロック用のディレクトリ作成時に ENAMETOOLONG により失敗していました)。 #25513 (Azat Khuzhin).
  • LowCardinality に対する Interval 型のサポートを追加しました。これは一部の式の中間値に必要となるためです。 #21730 を解決しました。 #25410Vladimir)。
  • 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 もクローズされます。#25283alexey-milovidov)。
  • clickhouse-client のプロンプトを更新し、再接続時にメッセージを表示するようにしました。これにより #10577 が解決されました。#25281alexey-milovidov)。
  • 集約関数 topK におけるメモリ使用量のトラッキングを正しく行うよう修正しました。これにより #25259 が解決されました。#25260alexey-milovidov)。
  • IDN ホスト(例: example.рф)で topLevelDomain が正しく動作するよう修正しました。以前は、そのようなホストに対して空文字列を返していました。 #25103 (Azat Khuzhin)。
  • Linux カーネルのバージョンを実行時に検出するようにした(async_socket_for_remote / use_hedged_requests に必須となる、ネストした epoll が正しく動作するバージョンを判定するため。これがない場合、リモートクエリがハングする可能性がある)。#25067Azat Khuzhin)。
  • 分散クエリで optimize_skip_unused_shards=1 のとき、(sharding key) IN (one-element-tuple) のような条件によってシャードをスキップできるようにしました(複数要素を持つタプルは既にサポートされていましたが、1 要素のタプルはリテラルとしてパースされていたため動作していませんでした)。#24930Amos Bird)。
  • S3 エラーのログメッセージを改善し、キーやバケットが空の場合でも二重の空白が発生しないようにしました。 #24897 (Vladimir Chebotarev).
  • 一部のクエリでは、複数パスのセマンティック解析が必要になります。この場合は、IN 用に構築済みの集合を再利用してください。 #24874 (Amos Bird)。
  • insert_distributed_syncmax_distributed_connections の制限を遵守するようにしました(そうしないと、大規模クラスタで同期挿入を行う際に max_thread_pool_size を使い果たす可能性があります)。 #24754 (Azat Khuzhin).
  • スカラーサブクエリに対して Limit for rows or bytes to read exceeded のようなエラーを隠さない(抑制しない)ようにしました。 #24545 (nvartolomei).
  • String-to-Int パーサーの仕様を厳格化し、toInt64('+') が例外をスローするようにしました。 #24475 (Amos Bird)。
  • SSD_CACHE が DDL クエリによって作成される場合、user_files ディレクトリ内でのみ作成できます。 #24466 (Maksim Kita)。
  • PostgreSQL において INSERT クエリでデフォルト以外のスキーマを指定するためのサポート。Closes #24149. #24413 (Kseniia Sumarokova).
  • IPv6 アドレス解決の問題を修正します(select * from remote('[::1]', system.one) が正しく動作するように修正)。#24319Azat Khuzhin)。
  • 複数行モードでサブクエリを含む FROM 句内の末尾空白を修正し、クエリ結果の出力形式も人間にとってより読みやすいようにわずかに変更しました。 #24151 (Azat Khuzhin).
  • Distributed テーブルの改善。distributed_directory_monitor_split_batch_on_failure(デフォルトは OFF)により、障害発生時(メモリ制限やデータ破損など)に分散バッチを分割できるようにする機能を追加。 #23864 (Azat Khuzhin)。
  • Join テーブルエンジンでの列名の競合を処理します。#20309 をクローズします。#23769Vladimir)。
  • clickhouse-localFile テーブルエンジン、およびデータが stdin 経由で渡される場合の clickhouse-client における INSERT クエリで、進捗状況を表示するようにしました。#18209 をクローズしました。#23656Kseniia Sumarokova)。
  • clickhouse-copier のバグ修正と改善。互換性のある異なるスキーマを持つテーブルのコピーを可能に。#9159 をクローズ。ReplacingMergeTree をコピーするテストを追加。#22711 をクローズ。カラム上の TTL と Data Skipping Indices をサポート。内部の Distributed テーブルを作成する際には、それらを単純に削除する(基になるテーブルには TTL と skipping indices が保持される)。#19384 をクローズ。MATERIALIZED 列および ALIAS 列のコピーを許可。いくつかのケースではこれが有用な場合がある(例: この列が PRIMARY KEY に含まれている場合)。タスク設定で allow_to_copy_alias_and_materialized_columns プロパティを true に設定することで許可できるようになった。#9177 をクローズ。[#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007) をクローズ。#9514 をクローズ。補助テーブルを移動する前に元のテーブルのパーティションを削除できるよう、タスク設定に allow_to_drop_target_partitions プロパティを追加。#20957 をクローズ。OPTIMIZE DEDUPLICATE クエリを廃止。このハックは、ALTER TABLE MOVE PARTITION が何度もリトライされ、プレーンな MergeTree テーブルには重複排除がないために必要だった。#17966 をクローズ。task_path + /status のパスにある ZooKeeper ノードへ進捗を JSON 形式で書き込み。#20955 をクローズ。引数なしの ReplicatedTables をサポート。#24834 をクローズ。#23518 (Nikita Mikhaylov)。
  • S3 からの読み取りを再試行する際の待機時間にバックオフを導入しました。 #23461 (Vladimir Chebotarev).
  • Distributed テーブルへの INSERT において、insert_allow_materialized_columns(マテリアライズドカラムを許可する設定)を反映するようにしました。 #23349 (Azat Khuzhin).
  • 分散クエリに対して LIMIT 句のプッシュダウンを行えるようにする機能を追加しました。 #23027 (Azat Khuzhin).
  • 複数の S3 ボリュームでのゼロコピー レプリケーションの不具合を修正 (Fixes #22679). #22864 (ianton-ru).
  • ユーザーがオペレーティングシステムに空きポートの割り当てを任せた場合に、実際にバインドされたポート番号を特定してログメッセージに表示するようにしました。 #25569 (bnaecker).
  • PostgreSQL の配列を変換する際に、attndims が一部のケースで正しく動作しないため、n 次元配列ではなく String 型に変換されてしまうことがある問題を修正しました。関連する issue #24804 をクローズしました。 #25538Kseniia Sumarokova)。
  • MySQL、PostgreSQL、ODBC 向けのタイムゾーン付き DateTime 型の変換を修正。#5057 をクローズ。#25528Kseniia Sumarokova)。
  • 異なるテーブルごとに KILL MUTATION を区別するようにし、予期しない Cancelled mutating parts エラーを修正。#25025Azat Khuzhin)。
  • バケットのルート直下に S3 ディスクを宣言できるようにしました(S3 仮想ファイルシステムは、現在開発中の実験的機能です)。 #24898 (Vladimir Chebotarev)。
  • 分散テーブルでのサブカラム(例: Tuple の構成要素)の読み取りを可能にしました。 #24472 (Anton Popov).
  • MySQL 互換プロトコル用の機能: user 関数が正しい出力を返すようにしました。#25697 をクローズしました。 #25697sundyli)。

不具合修正

  • 後方互換性の改善。パーティションキーで使用されている場合は、古いバージョンの modulo 関数を使用します。#23508 をクローズします。#24157Kseniia Sumarokova)。
  • メモリが少ないサーバーでごくまれに発生し、再起動しないとマージを実行できなくなる不具合を修正しました。おそらく #24603 も修正しています。 #24872 (alesapin)。
  • 同時に alter move/replace partition を実行している際にレプリケーションキューでごくまれに発生するエラー Tagging already tagged part を修正しました。これにより、おそらく #22142 の問題が解決されます。#24961alesapin)。
  • 他の集約関数の状態を集約して集約関数状態を計算する際に発生しうるクラッシュを修正しました(実用的なユースケースではありません)。#24523 を参照してください。#25015alexey-milovidov)。
  • SYSTEM RESTART REPLICA または SYSTEM SYNC REPLICA クエリが完了しない場合の動作を修正しました。これは、RAM の容量が極端に少ないサーバーで発生することが確認されました。 #24457 (Nikita Mikhaylov)。
  • ZooKeeper クライアントが clickhouse-server 内でハングする可能性のあるバグを修正しました。 #24721 (alesapin).
  • ZooKeeper への接続が失われ、その後接続が復旧したあとでレプリカがクローンされた場合、そのレプリケーションキューに古いエントリが含まれている可能性がありました。レプリケーションキューに互いに交差する仮想パーツが含まれている場合に発生していたアサーション失敗を修正しました。これは、一部のデータパーツが失われた場合に、まれに発生することがあります。プロセスを終了する代わりに、ログにエラーを出力するようにしました。 #24777 (tavplubix).
  • クエリプランの式プッシュダウン最適化で失われていた WHERE 条件を修正しました(query_plan_filter_push_down = 1 をデフォルトに設定)。#25368 を修正。#25370Nikolai 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 を修正。 #25546Anton Popov)。
  • クエリ WITH TOTALS および WITH FILL で誤った合計値が返される問題を修正。 #20872 を修正。 #25539Anton Popov)。
  • クラスタ構成を再読み込みしている最中に system.clusters をクエリすると発生するデータレースを修正しました。 #25737 (Amos Bird).
  • データベース間で Distributed テーブルを移動する際に発生していた No such file or directory エラーを修正しました。 この修正により #24971 が解決されます。 #25667tavplubix)。
  • REPLACE PARTITION は、まれなケースとしてソースパーティションが空の場合に無視されることがありました。これは修正されました。#24869 を解決します。#25665tavplubix)。
  • Replicated データベースエンジンで、まれに一部のレプリカがキューに入れられた DDL クエリをスキップしてしまう可能性のある不具合を修正しました。 #24805 (tavplubix).
  • クエリなしで EXPLAIN AST を実行した場合のヌルポインタの逆参照を修正。 #25631 (Nikolai Kochetov).
  • 空のパーツが自動削除されるのを待つ処理を修正しました。これが原因でバックグラウンドプールが完全に埋まり、レプリケーションが停止してしまう可能性がありました。 #23315 (Anton Popov).
  • S3 仮想ファイルシステム上に保存されたテーブルの復元機能を修正しました(この機能は実験的なものであり、本番環境での利用にはまだ適していません)。 #25601 (ianton-ru).
  • Decimal256 を使用する際の Arrow フォーマットにおけるヌルポインタデリファレンスを修正。Arrow フォーマットに Decimal256 のサポートを追加。 #25531 (Kruglov Pavel).
  • 前処理済み設定ファイル名の先頭に余分なアンダースコアが付与される問題を修正。 #25431 (Vitaly Baranov).
  • clickhouse-copier ツールの不具合修正: copier 用のタスク設定で sharding_key が存在しない場合に発生するセグメンテーションフォールトを修正。 #25419 (Nikita Mikhaylov).
  • DDL で使用された場合にフォーマットされたクエリを正しくクォートするようにし、REPLACE カラムトランスフォーマーの不具合を修正しました。これにより #23925 が修正されます。#25391Amos Bird)。
  • quantileDeterministic 関数および類似する関数で非決定的な動作が発生しうる問題を修正しました。これにより #20480 がクローズされました。#25313alexey-milovidov)。
  • SummingMergeTreeSimpleAggregateFunction(LowCardinality) に対するサポートを追加しました。#25134 を修正しました。#25300Nikolai 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 を修正。#25290Nikolai Kochetov)。
  • NULL 非許容カラムに対する joinGetOrNull の誤った動作を修正しました。これにより #24261 が修正されました。#25288Amos Bird)。
  • 大きな整数での誤った動作と UBSan レポートを修正しました。以前のバージョンでは CAST(1e19 AS UInt128) はゼロを返していました。#25279 (alexey-milovidov).
  • CSVWithNames フォーマットを使用して列のサブセットを挿入する際に発生していたエラーを修正しました。 #25129 を修正。 #25169 (Nikita Mikhaylov).
  • FINAL 付きの SELECT ではテーブルのプロジェクションを使用しないでください。まだサポートされていません。 #25163 (Amos Bird).
  • パーティションキーに UUID を使用しているテーブルで、バージョン 21.5 へアップグレードした際にパーツが失われる可能性がある問題を修正しました(パーティションキーに UUID を使用することは推奨されません)。#25070 を修正。#25127Nikolai Kochetov)。
  • joined_subquery_requires_alias = 0 の場合に cross join を含むクエリがクラッシュする問題を修正。#24011 を修正。#25082Nikolai Kochetov)。
  • empty column was returned by function mapContains というエラーを引き起こしていた、mapContains 関数での定数マップのバグを修正しました。#25077 をクローズ。#25080Kruglov Pavel)。
  • a UInt32 ALIAS a + 1b UInt32 MATERIALIZED b のように、自身を参照するカラムを持つテーブルを作成できないようにしました。#24910#24292 を修正しました。#25059alesapin)。
  • 空でない GROUP BY キーを持つ集約プロジェクションを使用して、空の キーによる GROUP BY を持つクエリを実行した場合に発生する誤った結果を修正しました。 #25055 (Amos Bird)。
  • Protobuf 形式における分割されたネストメッセージのシリアル化を修正します。この PR は #24647 を修正します。#25000Vitaly Baranov)。
  • 分散クエリにおける limit/offset の設定を修正し、リモートノードでは無視されるようにしました。 #24940Azat Khuzhin)。
  • Arrow フォーマットにおけるヒープバッファーオーバーフローが発生しうる問題を修正しました。 #24922 (Kruglov Pavel).
  • DiskS3 からファイルを読み込む際に発生する可能性があったエラー 'Cannot read from istream at offset 0' を修正しました(S3 仮想ファイルシステムは開発中の実験的機能であり、本番環境では使用しないでください)。 #24885 (Pavel Kovalenko).
  • 分散マテリアライズドビューを結合に使用する際に発生する「Missing columns」例外を修正。 #24870 (Azat Khuzhin).
  • PostgreSQL互換プロトコルで NULL 値を許可できるようにしました。#22622 を解決しました。#24857Kseniia Sumarokova)。
  • ミューテーションがまだメモリにロードされていないにもかかわらず、ミューテーション待機中のクライアント側に例外 Mutation was killed が送出されてしまうバグを修正。#24809 (alesapin).
  • AggregateFunction(groupArraySample(N), T)) のような一部のデータ型が非決定的に動作する可能性があった、乱数生成器の状態のデシリアライズ処理のバグを修正しました。 #24538 (tavplubix)。
  • 他の集約状態から uniqXXXXStates を構築することを禁止しました。 #24523 (Raúl Marín)。その後、関連する問題の根本原因を解消することで、再び許可しました。 (alexey-milovidov)。
  • CREATE .. AS SELECT クエリにおけるタプルの扱いを修正。 #24464 (Anton Popov).
  • Buffer テーブルにおける合計バイト数の計算を修正しました。現在の ClickHouse バージョンでは、バッファのフラッシュ中に total_writes.bytes カウンタが過度に減少していました。その結果、カウンタがオーバーフローし、フラッシュ後しばらくすると totalBytes が約 17.44 EB の値を返す問題が発生していました。 #24450 (DimasKovas).
  • toWeek 関数の単調性に関する誤った情報を修正しました。これにより #24422 が解決されます。このバグは https://github.com/ClickHouse/ClickHouse/pull/5212 で導入され、その後、より高度なパーティションプルーナーによって表面化しました。#24446Amos Bird)。
  • ユーザー認証を LDAP で管理している場合、LDAP グループが存在しないローカルロールにマッピングされているときに、LDAP ロールの再マッピング中に発生し得るデッドロックの可能性を修正しました。 #24431 (Denis Glazachev).
  • "multipart/form-data" メッセージでは、境界の直前にある CRLF も境界の一部として扱うようにしました。#23905 を修正。#24399Ivan)。
  • 偽のパーツと交差してしまう DROP PARTITION の問題を修正しました。まれに、mutation version が現在の block number より大きいパーツが存在する可能性がありました。 #24321 (Amos Bird).
  • Ordinary データベースから Atomic データベースへのマテリアライズドビューの移動(RENAME TABLE クエリ)に関するバグを修正しました。これにより、マテリアライズドビューとともに内部テーブルも新しいデータベースに移動されるようになりました。#23926 を修正。#24309tavplubix)。
  • 空の HTTP ヘッダーを許可するようにしました。#23901 を修正。#24285Ivan)。
  • Memory テーブルにおけるミューテーション(ALTER UPDATE/DELETE)の処理を正しく行えるよう修正。#24274 をクローズ。#24275flynn)。
  • JOIN 出力におけるカラムの LowCardinality プロパティを入力と同じになるようにし、#23351 および #20315 をクローズしました。 #24061 (Vladimir)。
  • Kafka テーブルに対する修正。Engine = Kafka のとき、同じコンシューマーが以前に空のアサインメントだった場合に、フェイルオーバー時の動作のバグによりコンシュームを開始できなかった不具合を修正。#21118 をクローズ。#21267filimonov)。

ビルド/テスト/パッケージングの改善

  • CI に darwin-aarch64 (Mac M1 / Apple Silicon) ビルドを追加し、ドキュメントおよびウェブサイトへのリンクを追加しました。 #25560 (Ivan)(リンク追加: alexey-milovidov)。
  • バイナリリソースを実行ファイルに埋め込むクロスプラットフォームな仕組みを追加しました。Illumos 上で動作します。 #25146 (bnaecker).
  • ファジングを改善するため、join 関連のオプションをストレステストに追加しました。 #25200 (Vladimir).
  • osx で s3 モジュール付きビルドを有効化しました。 #25217#25218 (kevin wan).
  • JDBC bridge をカバーするインテグレーションテストケースを追加しました。 #25047 (Zhichun Wu).
  • インテグレーションテストの設定において dictionaries を特別扱いするようになりました。残っていた dictionaries の手動セットアップを削除しました。 #24728 (Ilya Yatsishin).
  • YAMLParser クラス向けの libfuzzer テストを追加しました。 #24480 (BoloniniD).
  • インテグレーションテストの実行には Ubuntu 20.04 を使用するようにし、インテグレーションテスト実行に用いる docker-compose のバージョンを 1.28.2 に更新しました。環境変数が docker-compose に反映されるようになりました。test_dictionaries_all_layouts_separate_sources を並列実行が可能となるよう作り直しました。 #20393 (Ilya Yatsishin).
  • インストールスクリプト内の TOCTOU エラーを修正しました。 #25277 (alexey-milovidov).

ClickHouse リリース 21.6, 2021-06-05

後方互換性のない変更

  • uniqState / uniqHLL12State / uniqCombinedState / uniqCombined64State は、UUID 型に対して互換性のない状態を生成します。 #33607.

アップグレードに関する注意事項

  • zstd 圧縮ライブラリを v1.5.0 に更新しました。レプリケーション時に「checksum does not match」というメッセージが表示されることがあります。これらのメッセージは圧縮アルゴリズムの更新に伴う想定どおりのものであり、無視してかまいません。これらは情報提供を目的としたメッセージであり、望ましくない挙動を示すものではありません。
  • 設定 compile_expressions がデフォルトで有効になりました。さまざまなシナリオで十分にテストされていますが、サーバー上で望ましくない挙動が見つかった場合は、この設定をオフにすることを検討してください。
  • UUID 型の値は整数と比較できません。たとえば uuid != 0 と書く代わりに、uuid != '00000000-0000-0000-0000-000000000000' のように記述してください。

新機能

  • PostgreSQL 風のキャスト演算子(::)を追加しました。例:[1, 2]::Array(UInt8), 0.1::Decimal(4, 4), number::UInt16#23871 (Anton Popov)。
  • 大整数を本番運用レベルで利用可能にします。UInt128 データ型のサポートを追加します。Decimal256 データ型に関する既知の問題を修正します。辞書での大整数をサポートします。大整数向けに gcd / lcm 関数をサポートします。配列検索および条件関数で大整数をサポートします。LowCardinality(UUID) をサポートします。generateRandom テーブル関数および clickhouse-obfuscator で大整数をサポートします。スカラー副問い合わせから UUID を返す際のエラーを修正します。これにより #7834 が修正されます。これにより #23936 が修正されます。これにより #4176 が修正されます。これにより #24018 が修正されます。後方互換性のない変更: UUID 型の値は整数と比較できません。たとえば、uuid != 0 と記述する代わりに uuid != '00000000-0000-0000-0000-000000000000' と記述してください。#23631alexey-milovidov)。
  • ArrowParquetORC フォーマットでのデータの挿入および選択に Array データ型をサポートしました。 #21770 (taylor12805)。
  • テーブルコメント機能を実装。 #23225 をクローズ。 #23548 (flynn).
  • clickhouse-local で DDL クエリを使用した辞書の作成をサポートしました。 #22354 をクローズ。DETACH DICTIONARY PERMANENTLY のサポートを追加しました。Atomic データベースエンジン向けに EXCHANGE DICTIONARIES のサポートを追加しました。RENAME DICTIONARY を使用してデータベース間で辞書を移動する機能を追加しました。 #23436 (Maksim Kita)。
  • 集約関数 uniqTheta を追加して、ClickHouse で Theta Sketch をサポートしました。#23894#22609Ping Yu)。
  • 関数 splitByRegexp を追加。#24077abel-cheng)。
  • 配列を引数として受け取り、その配列内のすべての要素の積を返す関数 arrayProduct を追加。#21613 をクローズ。#23782Maksim Kita)。
  • system.stack_tracethread_name カラムを追加しました。これにより#23256 がクローズされました。#24124 (abel-cheng)。
  • insert_null_as_default = 1 の場合、INSERT ... SELECT および INSERT ... SELECT ... UNION ALL ... クエリで、NULL ではなくデフォルト値を挿入します。 #22832 をクローズ。 #23524Kseniia Sumarokova)。
  • clickhouse-local--progress オプションによる進捗表示のサポートを追加。 #23196 (Egor Savin)。
  • http 辞書ソースで、Content-Encoding HTTP ヘッダーで指定された HTTP 圧縮のサポートを追加しました。これにより #8912 が解決されました。 #23946 (FArthur-cmd)。
  • SYSTEM QUERY RELOAD MODELSYSTEM QUERY RELOAD MODELS を追加しました。 #18722 をクローズしました。 #23182 (Maksim Kita).
  • EXPLAIN PLAN クエリに対して、json(boolean 型、デフォルトは 0)設定を追加しました。有効にすると、クエリの出力は 1 行の JSON になります。不要なエスケープを避けるため、TSVRaw フォーマットの使用を推奨します。#23082Nikolai Kochetov)。
  • EXPLAIN PIPELINE クエリに設定 indexes(真偽値、デフォルトは無効)を追加しました。有効にすると、使用されたインデックスと、適用された各インデックスごとのフィルターされたパーツ数およびグラニュール数を表示します。MergeTree* テーブルでサポートされています。 #22352 (Nikolai Kochetov)。
  • LDAP: Active Directory グループを ClickHouse ロールにマッピングする際に使用するユーザー DN の検出機能を実装しました。 #22228 (Denis Glazachev).
  • 連続する行同士の差分を合計しつつ、タイムスタンプを保存することでマージ時にも順序を維持する新しい集約関数 deltaSumTimestamp#21888Russ Frank)。
  • Docker 環境でも正しく動作する、よりセキュリティレベルの低い IMDS 資格情報プロバイダを S3 向けに追加しました。 #21852 (Vladimir Chebotarev).
  • indexHint 関数を再度追加します。#21238 への対応です。#9542 をリバートし、#9540 を修正します。#21304Amos Bird)。

実験的機能

  • MergeTree* テーブルに対して PROJECTION のサポートを追加しました。 #20202 (Amos Bird)。

パフォーマンスの改善

  • compile_expressions 設定をデフォルトで有効化しました。この設定が有効な場合、単純な関数や演算子の合成は、実行時に LLVM を用いてネイティブコードへコンパイルされます。 #8482 (Maksim Kitaalexey-milovidov)。注意: 問題が発生する場合は、このオプションを無効にしてください。
  • re2 ライブラリを更新しました。正規表現マッチングのパフォーマンスが向上しました。また、この PR により gcc-11 との互換性が追加されました。 #24196 (Raúl Marín)。
  • ORC 入力形式で、ファイルサイズが巨大な場合にメモリコストが高くなるテーブル全体の一括読み込みではなく、stripe 単位で読み込むようにしました。 #23102 (Chao Ma)。
  • クエリ内の集約関数 sumcountavg を 1 つの集約関数へ融合しました。この最適化は optimize_fuse_sum_count_avg 設定で制御できます。これは新しい集約関数 sumCount によって実装されています。この関数は 2 つのフィールド sumcount からなるタプルを返します。 #21337 (hexiaoting)。
  • zstd を v1.5.0 に更新しました。圧縮のパフォーマンスが一桁台の数パーセント向上しました。 #24135 (Raúl Marín)。注意: レプリケーションで "checksum does not match" というメッセージが出る場合があります。これらのメッセージは圧縮アルゴリズムの更新に起因する想定されたものであり、無視してかまいません。
  • Buffer テーブルのパフォーマンスを改善しました: Buffer エンジンに対して total_bytes/total_rows のロックを取得しないようにしました。 #24066 (Azat Khuzhin)。
  • hashed/sparse_hashed 辞書に対する事前割り当てのサポートを復活させました。 #23979 (Azat Khuzhin)。
  • async_socket_for_remote をデフォルトで有効化しました(大きなファンアウトを持つ Distributed テーブルをクエリする際のスレッド数を削減します)。 #23683 (Nikolai Kochetov)。

改良

  • MergeTree テーブルファミリーに _partition_value 仮想カラムを追加しました。このカラムは、パーティションを決定論的にプルーニングするために使用できます。ミューテーション用のパーティションマッチャーを実装するために必要です。 #23673 (Amos Bird)。
  • S3 ストレージおよびディスク向けに region パラメータを追加しました。 #23846 (Vladimir Chebotarev).
  • 異なるログチャネルごとに別々のログレベルを設定できるようにしました。 #19569 をクローズしました。 #23857filimonov)。
  • DateTime の操作でタイムゾーンが明示的に指定されていない場合、そのデフォルトのタイムゾーン設定を変更しないようにしました。たとえば、タイムゾーンなしの DateTime 型の値に 1 秒を加算しても、引き続きタイムゾーンなしの DateTime のままです。以前のバージョンでは、返されるデータ型にデフォルトのタイムゾーンの値が明示的に設定されていたため、DateTime('something') のようになっていました。これにより #4854 がクローズされます。#23392alexey-milovidov)。
  • MySQL ストレージに対して、データベース名の代わりに空文字列を指定できるようにしました。クエリにはデフォルトのデータベースが使用されます。以前のバージョンでは SELECT クエリでは動作しており、今回 INSERT クエリに対するサポートも追加されました。これにより #19281 がクローズされます。これは Sphinx やその他の MySQL 互換の外部データベースと連携して利用する際に役立ちます。 #23319 (alexey-milovidov).
  • quantile(s)TDigest を修正。tdunning/t-digest 3.2+ に従い、単一のセントロイドに対する特別な処理を追加。また、アルゴリズムの以前のバージョン実装におけるセントロイドの過圧縮に関するバグも修正。#23314Vladimir Chebotarev)。
  • Function now64 はオプションのタイムゾーン引数をサポートするようになりました。 #24091 (Vasily Nemkov).
  • clickhouse-client のインタラクティブモードで、データの途中に表示されるプログレスバーが、ターミナル上の表示中のデータの一部を上書きしてしまうケースを修正しました。これにより、#19283 がクローズされました。 #23050alexey-milovidov)。
  • メモリ割り当てに失敗した場合に発生する simdjson のクラッシュを修正。 https://github.com/simdjson/simdjson/pull/1567。非常にまれなバグであるため、改善として扱う。 #24147 (Amos Bird)。
  • ストレージのシャットダウンまで辞書を保持するようにしました(これにより、Buffer エンジンの最終フラッシュ時にサーバーシャットダウン時に発生する可能性のある external dictionary 'DICT' not found エラーを回避できます)。 #24068 (Azat Khuzhin).
  • 同一データベース内でテーブルを停止する前に Buffer テーブルをフラッシュし、下位のテーブルがすでにデタッチされていることが原因でブロックが破棄されるのを防ぎます(ログには Destination table default.a_data_01870 doesn't exist. Block of data is discarded エラーが出力されます)。 #24067 (Azat Khuzhin).
  • これで、prefer_column_name_to_alias = 1group byhavingorder by に対してもカラム名を優先するようになります。これにより #23882 が修正されました。#24022Amos Bird)。
  • DateTime64 型に対する ORDER BY WITH FILL のサポートを追加しました。 #24016 (kevin wan)。
  • ReplacingMergeTreeDateTime64 をバージョン列として使用できるようにしました。 #23992 (kevin wan)。
  • サーバー起動時に OS 名、カーネルバージョン、および CPU アーキテクチャの情報をログに記録するようにしました。 #23988 (Azat Khuzhin).
  • postgresql 辞書ソースでテーブルスキーマを指定できるようにしました。 #23958 をクローズしました。 #23980Kseniia Sumarokova)。
  • Enum 要素名に対するヒントを追加(タイプミスがある場合に名前候補を提示)。#17112 をクローズ。#23919flynn)。
  • 辞書に対して値が見つかった割合(found rate、値が見つかった件数のパーセンテージ)を測定します(system.dictionariesfound_rate を参照)。 #23916Azat Khuzhin)。
  • テーブル設定 rabbitmq_queue_settings_list を介して、特定のキュー設定を追加できるようにしました(#23737 および #23918 をクローズ)。ユーザーが RabbitMQ のセットアップ全体を制御できるようにしました。テーブル設定 rabbitmq_queue_consume1 に設定されている場合、RabbitMQ テーブルエンジンは指定されたキューへの接続のみを行い、exchange・queue・binding の宣言といった RabbitMQ のコンシューマ側のセットアップは一切実行しません(#21757 をクローズ)。RabbitMQ テーブルが削除された際の適切なクリーンアップ処理を追加しました。テーブルが宣言したキューおよび、テーブルによって作成された場合にはそれらにバインドされているすべての exchange を削除します。#23887Kseniia Sumarokova)。
  • system.distribution_queuebroken_data_files / broken_data_compressed_bytes を追加しました。Distributed テーブルへの非同期挿入用で、破損としてマークされたファイル数を表すメトリクス (BrokenDistributedFilesToInsert) を追加しました。 #23885 (Azat Khuzhin).
  • system.tables をクエリしても ZooKeeper へはアクセスしなくなりました。 #23793 (Fuwang Hu).
  • OPTIMIZE クエリで lock_acquire_timeout_for_background_operations が考慮されるようにしました。#23623 (Azat Khuzhin).
  • 新しい SYSTEM RESTART DISK SQL コマンドを使用して、実行時に S3 ディスク設定を変更できるようになりました。 #23429 (Pavel Kovalenko)。
  • ユーザーが誤って max_distributed_connections をゼロに設定した場合、Distributed テーブルへのすべてのクエリは、メッセージに「logical error」を含む例外をスローします。しかし、実際にはこれは想定どおりの動作であり論理エラーではないため、例外メッセージはやや不正確でした。また、このメッセージにより、論理エラーが一切発生しないことを確認する CI 環境でのチェックがトリガーされていました。その代わりに、max_distributed_connections がゼロに誤設定されている場合は、取り得る最小値(1)として扱うことにします。 #23348 (Azat Khuzhin).
  • デフォルトで min_bytes_to_use_mmap_io を無効化しました。#23322Azat Khuzhin)。
  • join_use_nulls での LowCardinality の null 許容をサポートし、#15101 をクローズ。#23237vdimir)。
  • S3 ディスクに対して、MergeTree パーツを detached ディレクトリへ復元できる機能を追加しました。 #23112 (Pavel Kovalenko).
  • S3 での HTTP 接続断時のリトライ。#22988 (Vladimir Chebotarev).
  • MySQL テーブルエンジン、Dictionary ソース、および MaterializeMySQL による少量データ取得向けに、external_storage_max_read_rows および external_storage_max_read_rows という設定を追加しました。 #22697 (TCeason).
  • MaterializeMySQL(実験的機能):以前は SQL の非互換性により MySQL 5.7.9 はサポートされていませんでしたが、現在では MySQL パラメーターの検証を MaterializeMySQL 側に任せるようになりました。 #23413TCeason)。
  • 分散テーブルでサブカラムを読み取れるようにしました。 #24472 (Anton Popov)。
  • CREATE .. AS SELECT クエリにおけるタプルの扱いを修正。 #24464 (Anton Popov).
  • Kafka テーブルで Parquet 形式をサポート。 #23412 (Chao Ma)。

バグ修正

  • パーティションキーおよびプライマリキーで使用されている場合は、旧バージョンの剰余演算(modulo)関数を使用します。#23508 をクローズしました。#24157Kseniia Sumarokova)。これは以前のリリースで後方互換性を損なう原因となっていました。
  • SYSTEM RESTART REPLICA または SYSTEM SYNC REPLICA クエリが無限に処理され続けてしまう問題を修正しました。これは、RAM 容量が極端に少ないサーバーで検出されました。#24457 (Nikita Mikhaylov)。
  • toWeek 関数の誤っていた単調性を修正しました。これにより #24422 が修正されました。このバグは #5212 で導入され、その後、よりスマートなパーティションプルーナーによって顕在化しました。#24446Amos Bird)。
  • DROP PARTITION が交差するフェイクパーツと関わる場合の問題を修正しました。まれに、現在のブロック番号より大きいミューテーションバージョンを持つパーツが存在することがあります。 #24321 (Amos Bird).
  • Ordinary データベースから Atomic データベースへ RENAME TABLE クエリでマテリアライズドビューを移動する際のバグを修正しました。これにより、マテリアライズドビューとともに内部テーブルも新しいデータベースに移動されるようになりました。 #23926 を修正しました。 #24309 (tavplubix)。
  • クライアントリクエストで空の HTTP ヘッダーを許可するようにしました。 #23901 を修正しました。 #24285Ivan)。
  • Memory テーブルの mutation が失敗する問題を解消するために max_threads = 1 を設定。 #24274 をクローズ。 #24275flynn)。
  • Memory テーブル実装のタイポを修正。このバグは #15127 で混入したもの。 #24192 をクローズ。 #24193张中南)。
  • クエリ実行中に HDFS へアクセスできなくなった場合に発生するサーバーの異常終了を修正しました。 #24117 をクローズしました。 #24191Kseniia Sumarokova)。
  • Nested カラムを const 条件で更新する際に発生するクラッシュを修正。#24183hexiaoting)。
  • 高負荷時に RBAC で発生する可能性のあるレースコンディションを修正しました。この PR では #24090#24134#24176 を修正します(Vitaly Baranov)。
  • まれに発生する可能性のあるバグを修正しました。このバグにより、書き込みリクエスト(insert / alter など)を受け付けてしまう、部分的に初期化されたテーブルが作成されることがありました。現在は、そのようなテーブルは読み取り専用モードになります。 #24122 (alesapin).
  • 問題の修正: SELECT xxx FINAL を含む EXPLAIN PIPELINE で誤ったパイプラインが表示される不具合を修正しました。(hexiaoting)
  • WHERE 句で定数の DateTime 値を DateTime64 列と比較した際の不具合を修正。 #24100 (Vasily Nemkov).
  • merge JOIN で発生していたクラッシュを修正し、#24010 をクローズ。#24013vdimir)。
  • 一部の ALTER PARTITION クエリで、レプリケーションキュー内に Part A intersects previous part B および Unexpected merged part C intersecting drop range D エラーが発生することがありましたが、これを修正しました。#23296 を修正しました。#23997tavplubix)。
  • 外部 GROUP BY とオーバーフロー行で発生する SIGSEGV を修正しました(SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having' のようなクエリ)。 #23962 (Azat Khuzhin).
  • ソースに重複が存在する CACHE 辞書に対するキー関連メトリクスの集計処理を修正します(DictCacheKeysRequestedMiss のオーバーフローが発生していた問題)。 #23929 (Azat Khuzhin).
  • PostgreSQL エンジンのコネクションプール実装を修正し、#23897 をクローズ。 #23909Kseniia Sumarokova)。
  • GROUP BY と集約関数を通常の関数でラップした場合における distributed_group_by_no_merge = 2 の挙動を修正しました(#23546 で不具合が生じていました)。distributed_group_by_no_merge = 2 をウィンドウ関数と併用しようとした場合には例外をスローします。ウィンドウ関数を含むクエリでは optimize_distributed_group_by_sharding_key を無効化します。#23906Azat Khuzhin)。
  • s3 テーブル関数の修正: HTTP エラーの扱いを改善。以前は HTTP エラーのレスポンスボディが無視されていました。#23844Vladimir Chebotarev)。
  • s3 テーブル関数の修正: URI の取り扱いを改善しました。+ 記号を含む URL で発生していた非互換性を修正し、そのようなキーを持つデータをこれまで読み取れなかった問題を解消しました。 #23822 (Vladimir Chebotarev)。
  • GLOBAL IN/JOINuse_hedged_requests を含むクエリで発生する Can't initialize pipeline with empty pipe エラーを修正。 #23431 を解決。 #23805Nikolai Kochetov)。
  • CLEAR COLUMN がマテリアライズドビューにより参照されている場合に動作しない問題を修正。#23764 をクローズ。#23781flynn)。
  • Values フォーマットが使用されている場合に HDFS から読み込む際の、解放済みメモリの使用(heap use after free)を修正。 #23761 (Kseniia Sumarokova)。
  • Distributed への INSERT 時に(一部の例外が発生した場合に)発生する可能性のある「Cannot schedule a task」エラーを回避。 #23744 (Azat Khuzhin).
  • 停止していた ReplicatedMergeTree レプリカの復旧処理に関するバグを修正しました。レプリカのダウンタイム中に ALTER クエリが実行された場合、一部のメタデータ更新がそのレプリカによって無視されてしまう可能性がありました。 #23742 (tavplubix).
  • JoinWITH TOTALS の不具合を修正し、#17718 をクローズ。#23549vdimir)。
  • 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 のハッシュマップより遅いことが判明)を含む、ハッシュテーブル向けベンチマークを追加。#24111 (Maksim Kita).
  • librdkafka を 1.6.0-RC3 から 1.6.1 に更新。#23874 (filimonov).
  • asynchronous-unwind-tables を常に明示的に有効化。AArch64 上で query profiler を修正できる可能性があります。#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 引数に対する argMin および argMax のサポートを削除しました。このコードはメモリセーフではありませんでした。この機能は誤って追加されたものであり、ユーザーを混乱させていました。これらの関数は、後で別名で再導入される可能性があります。これにより #22384 が修正され、#17359 がリバートされました。 #23393 (alexey-milovidov).

新機能

  • 関数 dictGetChildren(dictionary, key)dictGetDescendants(dictionary, key, level) を追加しました。関数 dictGetChildren は、すべての子要素をインデックスの配列として返します。これは dictGetHierarchy の逆変換です。関数 dictGetDescendants は、dictGetChildrenlevel 回再帰的に適用した場合と同様に、すべての子孫を返します。level に 0 を指定した場合は無限大とみなされます。dictGetHierarchydictIsIn 関数のパフォーマンスも向上しました。 #14656 をクローズ。 #22096 (Maksim Kita).
  • 関数 dictGetOrNull を追加しました。これは dictGet と同様に動作しますが、辞書内にキーが存在しない場合は Null を返します。 #22375 をクローズ。 #22413 (Maksim Kita).
  • テーブル関数 s3Cluster を追加しました。これにより、指定されたクラスタの各ノード上で s3 内のファイルを並列処理できます。 #22012 (Nikita Mikhaylov).
  • MySQL/PostgreSQL テーブルエンジン / テーブル関数に、レプリカおよびシャードのサポートを追加しました。SELECT * FROM mysql('host{1,2}-{1|2}', ...) のように記述できます。 #20969 をクローズ。 #22217 (Kseniia Sumarokova).
  • ALTER TABLE ... FETCH PART ... クエリを追加しました。これは FETCH PARTITION に似ていますが、単一のパーツのみをフェッチします。 #22706 (turbo jason).
  • 再帰クエリが Distributed テーブルに対して到達できる深さを制限する設定 max_distributed_depth を追加しました。 #20229 をクローズ。 #21942 (flynn).

パフォーマンスの改善

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

改良

  • HTTP インターフェイスで使用される URL の最大サイズを表す max_uri_size のデフォルト値を 1 MiB に増やしました。これにより #21197 が解決されます。#22997alexey-milovidov)。
  • background_fetches_pool_size8 に設定します。これは、小さなデータの挿入が頻繁に行われる本番環境や、ZooKeeper クラスターのレスポンスが遅い場合により適しています。 #22945 (alexey-milovidov).
  • FlatDictionary に initial_array_sizemax_array_size オプションを追加しました。 #22521 (Maksim Kita).
  • 非レプリケート MergeTree への挿入の重複排除用に、新しい設定 non_replicated_deduplication_window を追加しました。 #22514 (alesapin).
  • config のリロード時に CatBoost モデル設定へのパスを更新しました。#22434 (Kruglov Pavel)。
  • 辞書で Decimal256 型のサポートを追加しました。Decimal256 は実験的な機能です。#20979 をクローズしました。#22960Maksim Kita)。
  • デフォルトで async_socket_for_remote を有効化しました(分散クエリで使用される OS スレッド数を削減)。 #23683 (Nikolai Kochetov).
  • quantile(s)TDigest を修正しました。tdunning/t-digest 3.2+ に従い、単一セントロイドに対する特別な処理を追加しました。また、アルゴリズムの以前のバージョンの実装でセントロイドが過度に圧縮されていたバグも修正しました。 #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).
  • clickhouse-keeper(ZooKeeper の実験的なドロップイン代替実装)の SSL 対応を追加しました。設定項目 keeper_server.tcp_port_secure を使用して、クライアントと keeper-server 間のセキュアな通信を行うことができます。keeper_server.raft_configuration.secure を使用して、ノード間の内部的なセキュア通信を有効化できます。 #22992 (alesapin)。
  • Buffer テーブルに対して、バックグラウンドでのみバッファをフラッシュする機能を追加しました。 #22986 (Azat Khuzhin).
  • WHERE 句で NULL を含む条件を指定して MergeTree テーブルを SELECT すると、まれに例外がスローされることがありました。この問題を修正しました #20019#22978alexey-milovidov)。
  • AWS 向け Poco HTTP クライアントのエラー処理を修正。 #22973 (kreuzerkrieg).
  • ReplicatedMergeTree において max_part_removal_threads を考慮するようにしました。 #22971 (Azat Khuzhin).
  • MergeTree 設定 inactive_parts_to_throw_insert = 0inactive_parts_to_delay_insert &gt; 0 の組み合わせにおける、特殊なコーナーケースを修正しました。 #22947 (Azat Khuzhin).
  • dateDiffDateTime64 を引数としても動作するようになりました(DateTime の範囲外の値でも動作します) #22931Vasily Nemkov)。
  • MaterializeMySQL(実験的な機能):ビューを含む MySQL データベースを、失敗することなくレプリケートできるようになりました。これは、ビューを無視することで実現されています。#22760Christian)。
  • PostgreSQL プロトコル経由で RBAC の行ポリシーを許可しました。#22658 をクローズします。PostgreSQL プロトコルは設定でデフォルト有効になっています。#22755Kseniia Sumarokova)。
  • Buffer レイヤーのロック待ちに費やされた時間を計測するメトリクスを追加。#22725Azat Khuzhin)。
  • VIEW 定義で CTE を使用できるようにしました。これにより #22491 が解決されました。#22657 (Amos Bird).
  • 以前に実行していたプログラムがターミナルにゴミを残していた場合に、clickhouse-client で画面の残りをクリアし、カーソルを表示するようにしました。これにより #16518 がクローズされました。#22634alexey-milovidov)。
  • 非 x86_64 プラットフォームでも一貫して動作するように round 関数を修正しました。小数部がちょうど 0.5 の場合には、最近接偶数への丸め(Banker's rounding)を行います。#22582 (alexey-milovidov).
  • Distributed テーブルから送信されるデータブロックの構造を正しく検証できるようにしました。 #22325 (Azat Khuzhin).
  • Kafka エンジンの仮想カラムに Kafka エラーを出力できるようにし、その動作を kafka_handle_error_mode 設定で制御できるようにしました。 #21850 (fastio).
  • visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String} に対するエイリアスとして simpleJSONExtract/simpleJSONHas を追加しました。 #21383 を修正しました。 #21519fastio)。
  • ライブラリディクショナリのソースとして clickhouse-library-bridge を追加。 #9502 をクローズ。 #21509Kseniia Sumarokova)。
  • マテリアライズドビューで参照されているカラムを DROP できないようにした。#21164 をクローズ。#21303flynn)。
  • 動的なサーバ間認証情報に対応(サービス停止なしで認証情報をローテーション可能)。 #14113 (johnskopis).
  • Arrow および ArrowStream 形式メッセージを扱う Kafka ストレージのサポートを追加しました。 #23415 (Chao Ma).
  • 例外メッセージ内の欠落していたセミコロンを修正しました。この例外メッセージはユーザーにとって不快に感じられる可能性がありました。 #23208 (alexey-milovidov)。
  • LowCardinality 型に関する一部の例外メッセージで欠けていた空白を修正しました。 #23207 (alexey-milovidov)。
  • 一部の値は Markdown 形式の表セル内で中央揃えで整形されていましたが、現在はそうではなくなりました。#23096 (alexey-milovidov)。
  • clickhouse-client の補完候補から不要な詳細情報を削除しました。これにより #22158 がクローズされました。 #23040alexey-milovidov)。
  • sparse_hashed 辞書用に system.dictionaries の bytes_allocated フィールドの計算を修正。 #22867 (Azat Khuzhin).
  • MergeTree からの逆順読み取りにおける概算総行数の算出を修正しました。 #22726 (Azat Khuzhin).
  • ClickHouse をソースとする辞書を、それ自身を参照するように設定できてしまい、その結果無限ループが発生する可能性があった問題を修正しました。Closes #14314#22479 (Maksim Kita)。

不具合修正

  • hedged requests に対する複数の修正。use_hedged_requests 設定が有効な場合に、GLOBAL IN/JOIN を含むクエリで発生していた Can't initialize pipeline with empty pipe エラーを修正しました。#23431 を解決。#23805Nikolai Kochetov)。クラッシュにつながる hedged connections のレースコンディションを修正しました。これは #22161 を解決します。#22443Kruglov Pavel)。async_socket_for_remote が有効な状態で、リモートクエリから unknown packet を受信した場合に発生し得るクラッシュを修正しました。#21167 を解決。#23309Nikolai Kochetov)。
  • input_format_with_names_use_header 設定を無効にしたときに、CSVWithNames フォーマットの入力がすべて破棄されてしまう動作を修正しました。これにより #22406 が解決されました。 #23202 (Nikita Mikhaylov)。
  • リモート JDBC ブリッジにおける接続タイムアウトの問題を修正しました。 #9609 をクローズしました。 #23771 (Maksim Kita, alexey-milovidov)。
  • update_field が指定されている場合の complex_key_hashed の初期ロード処理のロジックを修正。#23800 をクローズ。#23824Maksim Kita)。
  • PREWHERE と行ポリシーフィルタが両方有効な状態で、結果が空の場合に発生していたクラッシュを修正しました。 #23763 (Amos Bird).
  • Distributed テーブルへの INSERT 時に、一部の例外が発生した場合に起こりうる「Cannot schedule a task」エラーを回避します。 #23744 (Azat Khuzhin).
  • 集約関数 mannWhitneyUTest において、両方のサンプルの値がすべて完全に同一である場合に例外をスローするようにしました。これにより #23646 が修正されました。 #23654Nikita Mikhaylov)。
  • HTTP 経由でデータを挿入する際にサーバーフォールトが原因で例外が発生していた問題を修正しました。これにより #23512 が解決されます。 #23643 (Nikita Mikhaylov)。
  • いくつかの LIKE 式におけるエスケープシーケンスの誤解釈を修正しました。 #23610 (alexey-milovidov).
  • 再起動 / 停止コマンドがハングする問題を修正し、#20214 をクローズ。#23552filimonov)。
  • 複数の JOIN を含む SELECT クエリにおける COLUMNS マッチャーを修正しました。#22736 をクローズしました。#23501Maksim Kita)。
  • 列自体が ReplacingMergeTree のパラメータとして使用されている場合に、その列のデフォルト値を変更するとクラッシュする不具合を修正しました。 #23483 (hexiaoting).
  • ReplacingMergeTree における縦方向マージのコーナーケースを修正しました。まれに、Incomplete granules are not allowed while blocks are granules size のような例外とともにマージが失敗する原因となることがありました。 #23459 (Anton Popov).
  • 空の配列リテラルから、CAST([] AS Array(Array(String))) のような次元が 2 以上の配列へのキャストを許可しないバグを修正しました。#14476 をクローズしました。 #23456Maksim Kita)。
  • deltaSum 集約関数がカウンタをリセットした後に誤った結果を返してしまうバグを修正しました。 #23437 (Russ Frank).
  • マルチディスク構成での ReplicatedMergeTree テーブルの作成に失敗した場合に発生していた Cannot unlink file エラーを修正しました。これにより #21755 がクローズされました。#23433tavplubix)。
  • 仮想カラムに基づくパーティションプルーニング時に発生していた、互換性のない定数式の生成を修正しました。これにより、https://github.com/ClickHouse/ClickHouse/pull/21401#discussion_r611888913 の問題が解決されました。 #23366 (Amos Bird)。
  • join_algorithmauto に設定されていて、Dictionary を使って Join を実行した際に発生していたクラッシュの問題を修正しました。#23002 をクローズ。 #23312 (Vladimir)。
  • パーティションプルーニング時に NOT 条件を緩めないようにしました。これにより、#23305#21539 が修正されました。#23310Amos Bird)。
  • 古いブロックのバックグラウンドクリーンアップで発生する、ごくまれなレースコンディションを修正しました。この問題により、重複排除ウィンドウの終端に近すぎるタイミングにあるブロックが、重複排除されない可能性がありました。 #23301 (tavplubix).
  • ReplicatedMergeTree テーブルの作成と削除の間でごくまれに発生する、分散環境におけるレースコンディションを修正しました。これにより、レプリケーテッドテーブルの作成を試みた際に node doesn't exist のような例外が発生する可能性がありました。#21419 を修正しました。 #23294tavplubix)。
  • PRIMARY KEY が最初の属性でない場合に、DDL から作成される simple key dictionary の問題を修正しました。#23236 を解決。 #23262 (Maksim Kita).
  • テーブルに多数の長いカラム名が存在する場合の ODBC 読み取りを修正しました。 #8853 をクローズしました。 #23215Kseniia Sumarokova)。
  • MaterializeMySQL(実験的機能):キー列を条件として MaterializeMySQL から SELECT した際に発生していた Not found column エラーを修正。#22432 を解決。#23200tavplubix)。
  • サブクエリが定数に最適化された場合のエイリアスの扱いを修正。 #22924 を修正。 #10401 を修正。 #23191Maksim Kita)。
  • data_type_default_nullable 設定が default プロファイルで有効になっている場合にサーバーが起動に失敗することがある問題を修正しました。 #22573 の修正です。 #23185 (tavplubix)。
  • 現在の接続数の誤った管理が原因で、シャットダウン時にクラッシュが発生する問題を修正しました。 #23154 (Vitaly Baranov).
  • Atomic データベースからデタッチして再度アタッチした後に、そのマテリアライズドビューに対して SELECT を実行した際に発生していた Table .inner_id... doesn't exist エラーを修正しました。 #23047 (tavplubix).
  • サブクエリで untuple を使用している場合に発生する可能性がある Cannot find column in ActionsDAG result エラーを修正しました。#22290 を解決。#22991Nikolai Kochetov)。
  • NULL 値を許容する値を持つ Map 型の定数カラムの扱いを修正しました。 #22939 (Anton Popov).
  • DateTime64 に対する formatDateTime() と "%C" フォーマット指定子を修正し、大きな値やスケールが 0 でない場合の toDateTime64() を修正しました。 #22937 (Vasily Nemkov).
  • ウィンドウ関数で mannWhitneyUTest および rankCorr を使用した際に発生していたクラッシュを修正しました。この変更により、#22728 が修正されています。#22876Nikita Mikhaylov)。
  • LIVE VIEW(実験的機能):TemporaryLiveViewCleaner において、一時 LIVE VIEW の DROP/CREATE を同時に実行した場合にハングする可能性があった問題を修正しました。こちらを参照#22858Vitaly Baranov)。
  • 集計でフィルタ列が使用されている場合の HAVING 句のプッシュダウン処理を修正しました。 #22763 (Anton Popov).
  • OOM 例外発生時に ZooKeeper リクエストがハングする可能性のあった問題を修正しました。#22438 を解決。#22684Nikolai 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 を 0 に設定してください。以前のバージョンではデフォルト値は 0 でした。#22527alexey-milovidov)。
  • Merge Join アルゴリズムにおける LowCardinality 型カラムの誤ったキャストを修正しました。#22386 および #22388 をクローズしました。#22510Vladimir)。
  • tokenbf_v1 のフルテキストインデックスで読み取り時にバッファオーバーフローが発生する可能性がありました。余分なバイトは実際には使用されませんが、この読み取り操作がまれにクラッシュを引き起こす可能性があります。この変更により #19233 が解決されました。 #22421 (alexey-milovidov).
  • HTTP チャンクサイズを制限しないようにしました。#21907 を修正。#22322Ivan)。
  • optimize_aggregation_in_order が有効で、テーブル内に多数のパーツが存在する場合にデータの集約漏れを引き起こすバグを修正しました。optimize_aggregation_in_order を有効にした場合の集約処理のパフォーマンスをわずかに向上させました。 #21889 (Anton Popov).
  • テーブル関数ビューがカラムとして使用されているかをチェックするようにしました。これは #20350 を補完するものです。#21465Amos Bird)。
  • JOIN と集約を含むクエリで Merge エンジンを使用するテーブルに対して発生する「unknown column」エラーを修正。#18368 および #22226 をクローズ。#21370Vladimir)。
  • プッシュダウン最適化における名前の衝突を修正しました。FULL JOIN 後に WHERE 句によるフィルタリングが誤って行われる原因となっていました。#20497 をクローズしました。#20622Vladimir)。
  • quorum_parallel=1 のとき、重複排除の影響でクォーラム挿入が本来の意味での「クォーラム」になっていなかった、極めてまれなバグを修正しました。 #18215 (filimonov - 報告, alesapin - 修正)。

ビルド/テスト/パッケージングの改善

  • CI でステートレステストを並列実行。#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).
  • ClickHouse Keeper 用の Jepsen テストを CI に追加。#22373 (alesapin).
  • ヒーププロファイリング をサポートするように jemalloc をビルド。#22834 (nvartolomei).
  • 他スレッドからのアンロックにより *Log エンジンにおける rwlock 解放で発生する未定義動作 (UB) を回避。#22583 (Azat Khuzhin).
  • TinyLog の rwlock を同一スレッドからアンロックするようにして UB を修正。#22560 (Azat Khuzhin).

ClickHouse リリース 21.4

ClickHouse リリース 21.4.1 2021-04-12

後方互換性のない変更

  • toStartOfIntervalFunction は、時間間隔を真夜中に揃えるようになります(以前のバージョンでは Unix epoch の開始に揃えていました)。たとえば、toStartOfInterval(x, INTERVAL 11 HOUR) は 1 日を次の 3 つの区間に分割します: 00:00:00..10:59:5911:00:00..21:59:5922:00:00..23:59:59。この動作は実務上のニーズにより適しています。この変更により #9510 がクローズされました。 #22060 (alexey-milovidov)。
  • graphite のロールアップ設定における AgePrecision は、保持期間ごとに単調増加している必要があります。現在はこれが検証され、不正な設定は例外をスローします。 #21496 (Mikhail f. Shiryaev)。
  • カスタムのトップレベルドメインリストに含まれる 3 階層以上のドメインに対して、cutToFirstSignificantSubdomainCustom() / firstSignificantSubdomainCustom() が誤った結果を返す問題を修正しました。これらのカスタム TLD にマッチする入力ドメインに対して、第 3 階層のドメインが最初の重要なサブドメインとみなされていました。これは修正済みです。この変更により、たとえばシャーディングキーなどでこの関数を使用している場合には非互換が発生する可能性があります。 #21946 (Azat Khuzhin)。
  • テーブル system.dictionaries のカラム keys は、カラム key.nameskey.types に置き換えられました。テーブル system.dictionaries のカラム key.nameskey.typesattribute.namesattribute.types は、辞書がロードされていることを必要としません。 #21884 (Maksim Kita)。
  • このバージョンでは、ALTER TABLE ATTACH PART[ITION] コマンドを処理しているレプリカは、他のレプリカからデータをフェッチする前に、自身の detached/ フォルダを検索します。実装の詳細として、複製ログに新しいコマンド ATTACH_PART が導入されました。パーツはチェックサムによって検索および比較されます。 #18978 (Mike Kot)。注意:
    • クラスタのアップグレード中は ATTACH PART[ITION] クエリが動作しない場合があります。
    • 新しいバージョンで ALTER ... ATTACH クエリを実行した後は、古い ClickHouse バージョンにロールバックすることはできません。古いサーバーは複製ログ内の ATTACH_PART エントリを処理できず失敗するためです。
  • このバージョンでは、空の <remote_url_allow_hosts></remote_url_allow_hosts> はすべてのリモートホストへのアクセスをブロックします(以前のバージョンでは何もしませんでした)。以前の動作を維持したい場合で、設定ファイルに空の remote_url_allow_hosts 要素がある場合は、それを削除してください。 #20058 (Vladimir Chebotarev)。

新機能

  • DateTime64 の範囲を拡張し、1925 年から 2283 年までの日付をサポートしました。エポック(1970-01-01)付近の DateTime のサポートが改善されました。#9404 (alexey-milovidov, Vasily Nemkov)。拡張された日付範囲に対しては、すべての時刻・日付関数が動作するわけではありません。
  • 事前構成済みユーザーおよび HTTP リクエスト向けの Kerberos 認証(GSS-SPNEGO)のサポートを追加しました。#14995 (Denis Glazachev).
  • エイリアスではなく元のカラム名を使用するための prefer_column_name_to_alias 設定を追加しました。これは、一般的なデータベースにおけるエイリアス規則との互換性を高めるために必要です。#9715 および #9887 に対応します。#22044Amos Bird)。
  • 関数 dictGetChildren(dictionary, key)dictGetDescendants(dictionary, key, level) を追加しました。関数 dictGetChildren は、すべての子要素をインデックス配列として返します。これは dictGetHierarchy に対する逆変換です。関数 dictGetDescendants は、dictGetChildrenlevel 回再帰的に適用した場合と同様に、すべての子孫を返します。level の値が 0 の場合は無限大として扱われます。#14656 をクローズしました。 #22096 (Maksim Kita)。
  • executable_pool 辞書ソースを追加しました。 #14528 をクローズしました。 #21321Maksim Kita)。
  • テーブル関数 dictionary を追加しました。Dictionary エンジンと同様に動作します。#21560 をクローズしました。#21910Maksim Kita)。
  • PolygonDictionary 属性で Nullable 型をサポートしました。 #21890 (Maksim Kita).
  • DDL で作成されたディクショナリに対して、dictGetdictHas 関数は、データベース名が指定されていない場合に現在のデータベース名を使用するようになりました。 #21632 をクローズ。 #21859Maksim Kita)。
  • 関数 dictGetOrNull を追加しました。dictGet と同様に動作しますが、辞書内にキーが見つからなかった場合は Null を返します。これにより #22375 がクローズされました。#22413 (Maksim Kita)。
  • ComplexKeyCacheSSDCacheSSDComplexKeyCache ディクショナリに非同期更新機能を追加しました。CacheComplexKeyCacheSSDCacheSSDComplexKeyCache ディクショナリで Nullable 型のサポートを追加しました。dictGetdictGetOrDefault 関数で複数属性の取得をサポートしました。#21517 を修正しました。 #20595Maksim Kita)。
  • RangeHashedDictionarydictHas 関数をサポートするようにしました。 #6680 を修正しました。 #19816Maksim Kita)。
  • DateTime または DateTime64 データ型のタイムゾーン名を返す関数 timezoneOf を追加しました。これは #9959 をクローズするものではありません。関数名の不整合を修正するため、エイリアスとして timezone および timeZone、さらに toTimezonetoTimeZonetimezoneOftimeZoneOf を追加しました。 #22001 (alexey-milovidov).
  • CREATE/ALTER USER コマンドに、新しいオプション句 GRANTEES を追加しました。これは、このユーザーが GRANT オプション付きで必要なすべてのアクセス権を持っていることを条件として、このユーザーから権限を付与されることが許可されているユーザーまたはロールを指定します。デフォルトでは GRANTEES ANY が使用され、これは GRANT オプションを持つユーザーが任意の相手に権限を付与できることを意味します。構文: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]#21641Vitaly Baranov)。
  • system.clusters に新しいカラム slowdowns_count を追加しました。ヘッジ付きリクエストを使用する場合、このカラムには、そのレプリカの応答が遅かったために別のレプリカへ切り替えた回数が表示されます。また、system.clusterserrors_count の実際の値も表示するようにしました。 #21480 (Kruglov Pavel).
  • MergeTree* エンジン向けに _partition_id 仮想カラムを追加しました。_partition_id によるパーティションのプルーニングが可能になりました。パーティションID文字列を計算するための partitionID() 関数を追加しました。 #21401 (Amos Bird)。
  • IPv4 または IPv6 アドレスが指定された CIDR ネットワークプレフィックスに含まれているかどうかをテストする関数 isIPAddressInRange を追加しました。 #21329 (PHO).
  • 新しい SQL コマンド ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name' を追加しました。このコマンドは、すべてのディスクからフリーズ済みパーティションを正しく削除するために必要です。 #21142 (Pavel Kovalenko)。
  • JOIN に対する暗黙的なキーの型変換をサポートします。 #19885 (Vladimir)。

実験的機能

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

パフォーマンス改善

  • clickhouse-local およびその他すべての箇所で並列フォーマットをサポートしました。 #21630 (Nikita Mikhaylov).
  • CSVWithNames および TSVWithNames フォーマットの並列パースをサポートしました。これにより #21085 がクローズされました。 #21149 (Nikita Mikhaylov).
  • ファイル範囲 64 MiB 以上の読み取りについて mmap IO を有効化しました(設定 min_bytes_to_use_mmap_io)。これにより中程度のパフォーマンス向上が見込めます。 #22326 (alexey-milovidov).
  • min_bytes_to_use_mmap_io 設定で読み取られるファイル用のキャッシュを追加しました。設定値が小さい場合に、頻繁な mmap/munmap 呼び出しとそれに伴うページフォルトを回避することで、顕著な(2 倍以上の)パフォーマンス向上が得られます。なお、mmap IO には本番環境での信頼性を下げる大きな欠点があります(例: 不良ディスクでのハングや SIGBUS の発生、メモリ使用量の制御性の低さ)。とはいえ、ベンチマーク用途では有効です。 #22206 (alexey-milovidov).
  • codec NONE を使用する際に不要なデータコピーを回避しました。なお、codec NONE はほとんどの場合有用ではなく、常に圧縮を使用することを推奨します(デフォルトは LZ4)。一般的な考えとは異なり、圧縮を無効にしてもパフォーマンスが向上しない場合があり(逆効果もあり得ます)。NONE codec が有用なのは次のようなケースです: - データが非圧縮性である場合 - 合成ベンチマークの場合。 #22145 (alexey-milovidov).
  • max_rows_to_group_by が小さく、group_by_overflow_mode='any' の場合の GROUP BY を高速化しました。 #21856 (Nikolai Kochetov).
  • SELECT ... FINAL ... WHERE のようなクエリのパフォーマンスを最適化しました。FINAL を含むクエリでは、ソートキーに含まれるカラムを PREWHERE に移動できるようになりました。 #21830 (foolchi).
  • memcpy を別の実装に置き換えることでパフォーマンスを向上しました。これにより #18583 がクローズされました。 #21520 (alexey-milovidov).
  • 並び替えキー順での集約処理(設定 optimize_aggregation_in_order 有効時)のパフォーマンスを改善しました。 #19401 (Anton Popov).

改良

  • PostgreSQL のテーブル/データベースエンジンおよび辞書ソース向けにコネクションプールを追加しました。#21444 が解消されるはずです。#21839Kseniia Sumarokova)。
  • postgres ストレージおよびテーブル関数でデフォルト以外のテーブルスキーマをサポートしました。 #21701 をクローズしました。 #21711 (Kseniia Sumarokova).
  • Postgres 辞書ソースにおいてレプリカの優先順位をサポートしました。 #21710 (Kseniia Sumarokova).
  • 新しい MergeTree 設定 min_bytes_to_rebalance_partition_over_jbod を導入しました。これにより、JBOD ボリューム内の異なるディスク間で、新しいパーツをバランス良く割り当てることができます。 #16481 (Amos Bird)。
  • system.query_log 内の対応するクエリについて、query_kind 列に GrantRevokeSystem の値を追加しました。 #21102 (Vasily Nemkov)。
  • レプリケーションに使用される HTTP 接続のタイムアウトを、他の HTTP タイムアウト設定とは別に個別設定できるようにしました。 #20088 (nvartolomei).
  • サーバーがブロックを書き込み中に例外が発生した場合、クライアントにより適切な例外メッセージが表示されるようになりました。以前のバージョンでは、クライアントは Data compressed with different methods のような誤解を招くメッセージを受け取る可能性がありました。 #22427 (alexey-milovidov).
  • 失敗したフェッチパーツの後に発生する可能性がある Directory tmp_fetch_XXX already exists エラーを修正。既に存在する場合は一時フェッチディレクトリを削除するようにした。#14197 を修正。#22411nvartolomei)。
  • UInt256 引数を取る関数 range に関する MSan レポートを修正しました(大きな整数のサポートは実験的機能です)。これにより #22157 がクローズされます。 #22387 (alexey-milovidov)。
  • system.processes テーブルに current_database カラムを追加しました。クエリの現在のデータベースを表します。 #22365 (Alexander Kuzmenkov).
  • clickhouse-client に履歴の大文字小文字を区別しない検索・ナビゲーション機能と、サブワード単位での移動機能を追加。 #22105 (Amos Bird)。
  • (NULL, NULL) のような NULL のタプルが IN 演算子の左辺にあり、右辺が非 NULL のタプルである場合(例: SELECT (NULL, NULL) IN ((0, 0), (3, 1)))、型の非互換性に関する例外を投げる代わりに 0 を返します。このような式は、SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1) のようなクエリの最適化によって現れる場合もあります。これにより #22017 が解決されました。 #22063 (alexey-milovidov).
  • 使用する simdjson のバージョンを 0.9.1 に更新しました。これにより #21984 が修正されました。 #22057 (Vitaly Baranov).
  • CONNECTION_ID()VERSION() 関数に対して、大文字小文字を区別しないエイリアスを追加しました。これにより #22028 が修正されました。#22042Eugene Klimov)。
  • windowFunnel 関数にオプション strict_increase を追加し、各イベントを一度だけカウントできるようにしました(#21835 を解決)。#22025Vladimir)。
  • MergeTree テーブルのパーティションキーに Date または DateTime 列が含まれておらず、ちょうど 1 つの DateTime64 列のみが含まれている場合、その値を system.parts および system.parts_columns テーブルの min_time 列と max_time 列で参照できるようにしました。system.parts_columns テーブルに min_time および max_time 列を追加しました(従来は system.parts テーブルとの間に不整合がありました)。これにより #18244 が解決されました。#22011alexey-milovidov)。
  • clickhouse-copier において、補助テーブルから宛先へのパーティション移動のための replication_alter_partitions_sync=1 設定をサポートしました。デフォルトのタイムアウト値を短縮しました。#21911 を修正しました。#21912turbo jason)。
  • EmbeddedRocksDB テーブルのデータディレクトリへのパスをシステムテーブルに表示できるようにしました。 #21903 (tavplubix).
  • プロファイルイベント HedgedRequestsChangeReplica を追加し、データ読み取りタイムアウトの単位を秒からミリ秒に変更しました。 #21886 (Kruglov Pavel)。
  • DiskS3(開発中の実験的機能)。キャッシュディスクを使用している場合に、移動先が空でないとディレクトリを移動できない不具合を修正。 #21837 (Pavel Kovalenko).
  • Web UI における Array および Map データ型の表示フォーマットを改善しました。 #21798 (alexey-milovidov).
  • クラスタ設定が変更された場合にのみクラスタを更新するようにしました。 #21685 (Kruglov Pavel).
  • 分散 DDL クエリに対して、クエリおよびセッション設定が伝播されるようになりました。これを有効にするには、distributed_ddl_entry_format_version を 2 に設定します。distributed_ddl_output_mode 設定を追加しました。サポートされるモード: nonethrow (デフォルト)、null_status_on_timeoutnever_throwReplicated データベースエンジンに対する各種修正と改善を行いました。#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 で扱うシャーディングキー値の数を制限するための設定 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 を修正。#20387Kruglov Pavel)。
  • MaterializeMySQL: _version 列に minmax スキッピングインデックスを追加。 #20382 (Stig Bakken).
  • clickhouse-format--backslash オプションを追加しました。これにより、整形されたクエリの各行末にバックスラッシュを付加できるようになります。 #21494 (flynn).
  • これにより、すでに対象範囲に含まれている部分を変更しようとしても、ClickHouse は LOGICAL_ERROR 例外をスローしなくなりました。#22013 を修正しました。#22291alesapin)。

バグ修正

  • HedgedConnections でパケットレシーバーをキャンセルする前にソケットを epoll から削除し、潜在的なレースコンディションを防止します。#22161 を修正。#22443Kruglov Pavel)。
  • 並列パース用ルーチンに(不足していた)メモリ使用量の計測を追加しました。これまでのバージョンでは、結果セットに非常に大きなデータブロックが含まれている場合に OOM(Out Of Memory)が発生する可能性がありました。これにより #22008 が解決されました。#22425alexey-milovidov)。
  • SELECT に定数の WHERE 条件があり、かつソーステーブルに名前が数字のみのカラムが存在する場合に発生しうる例外を修正しました。 #22270 (LiuNeng).
  • use_hedged_requests=0async_socket_for_remote=1 でクエリ キャンセルの問題を修正。 #22183 (Azat Khuzhin).
  • InterserverIOHTTPHandler で捕捉されない例外を修正。#22146 (Azat Khuzhin).
  • 設定ファイルで http_port が未設定の場合に備えて Docker エントリポイントを修正。 #22132 (Ewout).
  • TOTALSarrayJoin を伴う JOIN で発生するエラー Invalid number of rows in Chunk が発生する問題を修正。#19303 をクローズ。#22129Vladimir)。
  • Kafka からメッセージをポーリングするために使われていたバックグラウンドスレッドプール名の不具合を修正しました。スレッドプールが壊れている Kafka エンジンは、メッセージキューからメッセージを消費できません。#22122 (fastio)。
  • ReplicatedMergeTree テーブルエンジンに対する OPTIMIZE および ALTER クエリが待ち状態のままになる問題を修正しました。これにより、テーブルがデタッチまたは再起動された場合でも、クエリがハングしなくなりました。 #22118 (alesapin).
  • 不具合のある Linux カーネルでは async_socket_for_remote / use_hedged_requests を無効化しました。#22109 (Azat Khuzhin)。
  • Docker エントリポイント: LOG_PATH が空の場合に . を chown しないようにしました。 #22100 をクローズしました。 #22102 (filimonov)。
  • 関数 decrypt には、AEAD モードで暗号化されたデータの最小サイズを検証するチェックが不足していました。これにより #21897 が解決されました。#22064alexey-milovidov)。
  • まれに、CollapsingMergeTree のマージにより、index_granularity + 1 行を含むグラニュールが作成されることがあります。このため、#18928 で追加され、バージョン 21.2 と 21.3 に影響する内部チェックが失敗し、Incomplete granules are not allowed while blocks are granules size というエラーが発生する場合があります。このエラーにより、パーツのマージが行えませんでした。#21976Nikolai Kochetov)。
  • ハッシュ型の外部ディクショナリをロードする際にメモリ使用量が大幅に増加する可能性があった変更 #15454 をリバートしました。これにより #21935 が解決されます。 #21948 (Maksim Kita)。
  • ヘッジド接続の重複発生(Unknown packet 9 from server エラー)を防止しました。 #21941 (Azat Khuzhin).
  • 一部のケースで、Content-Type が "multipart/form-data" の HTTP POST リクエストの読み取りを修正しました。 #21936 (Ivan).
  • クエリにウィンドウ関数が含まれており、主キー順での読み取り最適化が適用されている場合に誤った ORDER BY 結果が返される問題を修正しました(#21828)。#21915Alexander Kuzmenkov)。
  • 初回の CatBoost モデル実行時に発生するデッドロックを修正。#13832 をクローズ。#21844Kruglov Pavel)。
  • WHERE または HAVING 条件が GROUP BY の前にプッシュダウンされることで発生し得た、誤ったクエリ結果(およびクラッシュの可能性)を修正しました。#21773 を修正。#21841Nikolai Kochetov)。
  • WriteBufferFromS3 におけるエラー処理とロギングを改善しました。 #21836 (Pavel Kovalenko)。
  • 二段階集約を使用している場合に、Distinct コンビネータ付きの集約関数で発生し得るクラッシュを修正しました。これは #18365 のフォローアップ修正です。本番環境でのみ再現可能な問題です。 #21818 (Amos Bird)。
  • スカラーサブクエリに対するインデックス解析を修正。これは、#18896 で導入された不具合である #21717 を解消します。 #21766Amos Bird)。
  • ReplicatedMerge テーブルエンジンにおいて、ALTER MODIFY COLUMN クエリで Decimal 列のサイズ(32ビットまたは64ビット)が変わらない場合に、その型が変更されない不具合を修正。 #21728 (alesapin)。
  • ReplicatedMergeTree に対して OPTIMIZEDROP が同時に実行された場合に、無限に待機し続ける可能性がある問題を修正しました。 #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(重複)。#21640Vladimir)。
  • S3 にデータを書き込む際にエラーが発生すると、std::terminate が呼び出されていました。 #21624 (Vladimir).
  • optimize_skip_unused_shards が有効で、かつ使用されるシャードが 0 の場合に発生する可能性のある Cannot find column エラーを修正。 #21579 (Azat Khuzhin).
  • クエリに定数の WHERE 句があり、optimize_skip_unused_shards 設定が有効な場合、すべてのシャードがスキップされてしまい、クエリが誤って空の結果を返す可能性があります。 #21550 (Amos Bird)。
  • テーブル関数 clusterAllReplicas が誤った _shard_num を返す問題を修正。#21481 をクローズ。#21498flynn)。
  • 設定更新後もS3テーブルが古い認証情報を保持し続ける問題を修正。 #21457 (Grigory Pervakov).
  • Poco の SecureSocket 内の SSL オブジェクトに関するレースコンディションを修正しました。 #21456 (Nikita Mikhaylov).
  • Kafka 向けの Avro フォーマットのパース処理を修正。#21437 を解決。#21438Ilya Golshtein)。
  • セキュアソケットでの受信および送信タイムアウトとノンブロッキング読み取りを修正。 #21429 (Kruglov Pavel)。
  • force_drop_table フラグが MATERIALIZED VIEW に対して機能していませんでしたが、修正されました。#18943 を解決します。 #20626 (tavplubix).
  • PredicateRewriteVisitor における名前の競合を修正しました。これが原因で、full join 後の WHERE 句によるフィルタ処理が誤って行われていました。#20497 をクローズしました。#20622Vladimir)。

ビルド/テスト/パッケージングの改善

  • ClickHouse Keeper 用の Jepsen テストを追加。#21677 (alesapin)。
  • CI でステートレステストを並列実行します。 #22181 に依存します。 #22300 (alesapin)。
  • SQLancer の CI 実行のステータスチェックを有効化。#22015Ilya Yatsishin)。
  • PowerPC 向けビルドのための各種準備: ppc64le でバンドルされている openldap を有効化。 #22487 (Kfir Itzhak)。ppc64le 上で Clang によるコンパイルを有効化。 #22476 (Kfir Itzhak)。ppc64le 上での boost のコンパイルを修正。 #22474 (Kfir Itzhak)。ppc64le 上で内部 CMake 変数 CMAKE_ASM_COMPILE_OBJECT が設定されていないことに起因する CMake エラーを修正。 #22469 (Kfir Itzhak)。Fedora/RHEL/CentOS が ppc64le 上で libclang_rt.builtins を見つけられない問題を修正。 #22458 (Kfir Itzhak)。ppc64le 上で jemalloc を用いたビルドを有効化。 #22447 (Kfir Itzhak)。ppc64le 上での ClickHouse の設定の埋め込みおよび cctz のタイムゾーン埋め込みを修正。 #22445 (Kfir Itzhak)。ppc64le 上でのコンパイルを修正し、ppc64le 上で正しい命令ポインタレジスタを使用するように変更。 #22430 (Kfir Itzhak)。
  • aarch64 上での S3 (AWS) ライブラリを再度有効化しました。 #22484 (Kfir Itzhak).
  • ORC 形式の読み込みに tzdata が必要なため、Docker コンテナに tzdata を追加しました。これにより #14156 がクローズされました。#22000alexey-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

後方互換性のない変更

  • 古い構文でテーブル TTL を指定した MergeTree テーブルを作成することはできなくなりました。この場合、その TTL は単に無視されてしまうためです。既存の古いテーブルの ATTACH は引き続き可能です。 #20282 (alesapin).
  • すべての大文字小文字を区別しない関数名は、その正規表現(正準形)に書き換えられるようになりました。これはプロジェクションを用いたクエリルーティング(今後導入予定の機能)のために必要です。 #20174 (Amos Bird).
  • TTL の式が関数であり、かつ ORDER BY キーと同一である場合の TTL 作成を修正しました。GROUP BY を伴う TTL では、主キー列に対してカスタムの集約関数を設定できるようになりました。後方互換性のない変更点: GROUP BY に含まれておらず、かつ明示的に設定されていない主キー列については、TTL 期限切れ時に、これまでは max が適用されていましたが、今後は any 関数が適用されます。また、WHERE 付きあるいは GROUP BY 付きの TTL を使用している場合、ローリングアップデート中のマージ処理で例外が発生することがあります。 #15450 (Anton Popov).

新機能

  • ファイルエンジン設定 engine_file_empty_if_not_existsengine_file_truncate_on_insert を追加しました。#20620 (M0r64n).
  • 連続する行間の差分を合計する集約関数 deltaSum を追加しました。#20057 (Russ Frank).
  • system.part_log テーブルに新しい event_time_microseconds カラムを追加しました。#20027 (Bharat Nallan).
  • UTC からのオフセットを秒単位で返す timezoneOffset(datetime) 関数を追加しました。この変更により #issue:19850 が解決されました。#19962 (keenwolf).
  • 分散テーブルから特定のシャードにデータを挿入するための設定 insert_shard_id を追加しました。#19961 (flynn).
  • 関数 reinterpretAs を更新し、大きな整数型(big integer)をサポートしました。#19691 を修正しました。#19858 (Maksim Kita).
  • S3 クライアントで Server Side Encryption Customer Keys(x-amz-server-side-encryption-customer-(key/md5) ヘッダー)のサポートを追加しました。詳細はこちらを参照してください。#19428 をクローズしました。#19748 (Vladimir Chebotarev).
  • executable 辞書ソースに implicit_key オプションを追加しました。入力キーと同じ順序でレコードが来る場合に、各レコードごとにキーを出力する必要がなくなります。#14527 を実装しました。#19677 (Maksim Kita).
  • クォータ種別 query_selects および query_inserts を追加しました。#19603 (JackyWoo).
  • 関数 extractTextFromHTML を追加しました。#19600 (zlx19950903), (alexey-milovidov).
  • MergeTree* エンジンを持つテーブルに、クエリの同時実行制御用の新しいテーブルレベル設定を 2 つ追加しました。設定 max_concurrent_queries は、このテーブルに関連する同時実行クエリ数の上限を設定します。設定 min_marks_to_honor_max_concurrent_queries は、クエリが少なくともこの数のマークを読み取る場合にのみ前の設定を適用するよう指定します。#19544 (Amos Bird).
  • user_files ディレクトリからファイルを String として読み込む file 関数を追加しました。これは file テーブル関数とは異なります。これにより #issue:18851 が実装されました。#19204 (keenwolf).

実験的機能

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

パフォーマンスの改善

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

改善点

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

不具合修正

  • ZooKeeper への不要な再接続と、1 つの ClickHouse サーバーで 2 つのアクティブなセッションが同時に存在し得る問題を修正。どちらの問題も #14678 で導入されたものです。 #21264 (alesapin).
  • Values フォーマットから LowCardinality 列を含むテーブルへデータを挿入する際に発生していた Bad cast from type ... to DB::ColumnLowCardinality エラーを修正。Issue #21140 を解決 #21357Nikolai Kochetov)。
  • 述語に当該テーブル自身が含まれている場合の、非レプリケートな MergeTree テーブルエンジンにおける ALTER DELETE ミューテーションのデッドロックを修正。#20558 を修正。 #21477alesapin)。
  • 障害発生時の分散クエリで発生していた SIGSEGV を修正。 #21434 (Azat Khuzhin).
  • これにより、ALTER MODIFY COLUMN クエリがパーティションキー、スキップインデックス、TTL などへの変更を正しく反映するようになりました。 #13675 を修正。 #21334 (alesapin)。
  • join_use_nulls とサブクエリからの TOTALS の結合に関するバグを修正しました。これにより #19362#21137 がクローズされました。#21248vdimir)。
  • UNION を含むクエリでの EXPLAIN のクラッシュを修正。 #20876#21170 を解決。 #21246flynn)。
  • 現在、mutation が許可されるのは、それをサポートするテーブルエンジン(MergeTree ファミリー、Memory、MaterializedView)のみです。その他のエンジンでは、よりわかりやすいエラーが報告されます。#21168 を修正しました。#21183alesapin)。
  • #21112 を修正しました。INSERT クエリで、いずれかのコールバックがわずかに遅れて実行された場合に重複が発生する可能性があったバグを修正しました。#21138 (Kseniia Sumarokova)。
  • input_format_null_as_default が Nullable 型に対して有効になっていなかった問題を修正しました。これにより #21116 が修正されました。#21121Amos Bird)。
  • Tuple から Map へのキャストに関連するバグを修正。#21029 をクローズ。#21120hexiaoting)。
  • カスタム(デフォルト以外)の ZooKeeper クラスターを使用する Replicated*MergeTree を削除した際に発生していたメタデータのリークを修正しました。 #21119 (fastio).
  • joinGet で LowCardinality 型のキーを使用する際に発生していた型不一致の問題を修正します。これにより #21114 が解決されます。#21117Amos 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 圧縮エラーを修正。Brotli を最新バージョンに更新し、「ring-buffer で初期化されていないデータへまれにアクセスしてしまう問題の修正」を取り込みました。#20991Kseniia Sumarokova)。
  • クエリをキャンセルした際に 'Empty task was returned from async task queue' というエラーが発生する問題を修正。 #20881 (Azat Khuzhin).
  • ClickHouse サーバーに接続するために MySQL 5.7 クライアントを使用した場合に USE database; クエリが動作しない不具合を修正しました。#18926 を解決。#20878tavplubix)。
  • 集約関数における -Distinct コンビネータと -State コンビネータの併用方法を修正しました。 #20866 (Anton Popov).
  • UNION DISTINCT と LIMIT 句を含むサブクエリの問題を修正。#20597 をクローズ。#20610 (flynn).
  • 辞書に存在しないキーを検索するクエリで発生していた、辞書の一貫性のない動作を修正しました。 #20578 (Nikita Mikhaylov).
  • スカラーサブクエリおよびインデックス用サブクエリに対するスレッド数の扱いを修正しました(#19007 以降、常に単一スレッドのみが使用されていました)。#20457#20512 を修正しました。#20550Nikolai Kochetov)。
  • リモートクエリから未知のパケットを受信した場合に発生しうるクラッシュを修正(#17868 で導入された不具合)。#20547Azat Khuzhin)。
  • 非同期 INSERT のディレクトリ名をパースする際に適切なチェックを追加し、SIGSEGV を修正。#20498 (Azat Khuzhin).
  • 浮動小数点キーに対して transform 関数が正しく動作しない問題を修正し、#20460 をクローズ。#20479flynn)。
  • WITH 句のエイリアスをサブクエリに伝搬する際に発生していた無限ループを修正しました。これにより #20388 が修正されました。 #20476 (Amos Bird)。
  • HTTP クライアントが切断されたときにサーバーが異常終了する問題を修正。 #20464 (Azat Khuzhin).
  • JOIN に SELECT からの定数が含まれる場合に、join_use_nulls=1 で発生する LOGICAL_ERROR を修正。 #20461 (Azat Khuzhin).
  • 式リスト内でテーブル関数 view の使用をチェックし、使用されている場合はエラーをスローするようにしました。これにより #20342 の問題を修正します。#20350Amos Bird)。
  • RANGE_HASHED() 辞書における無効なデリファレンスを回避。 #20345 (Azat Khuzhin).
  • join_use_nulls=1 設定時の null デリファレンスを修正。#20344 (Azat Khuzhin).
  • スケールが異なる 2 つの定数 Decimal 型同士の二項演算で誤った結果が返される問題を修正。 #20283 を修正。 #20339Maksim Kita)。
  • ReplicatedMergeTree テーブルエンジンファミリーにおいて、失敗したバックグラウンドタスクが過度に頻繁に再試行される問題を修正しました。この問題は、冗長なログ出力や CPU 負荷の増大を引き起こす可能性がありました。#20203 を修正しました。 #20335alesapin)。
  • *CollapsingMergeTree および ReplacingMergeTree テーブルエンジンのバージョン列に対する DROP および RENAME 操作を制限。 #20300 (alesapin).
  • 破損した JSON の場合にファイル全体をメモリに読み込もうとして、アロケータから例外が発生していた問題を修正しました。#19719 を修正。#20286Nikita Mikhaylov)。
  • 縦方向マージをサポートしていない MergeTree テーブルエンジンファミリーで、縦方向マージを試みた際に発生する例外を修正しました。#20259 を修正。#20279 (alesapin)。
  • シャットダウン中に設定を再読み込みするとまれに発生するサーバークラッシュの問題を修正。 #19689 を修正。 #20224alesapin)。
  • INSERT SELECT で使用する CTE の不具合を修正。これにより #20187 および #20195 を修正。#20211Amos Bird)。
  • #19314 を修正。#20156Ivan)。
  • 特殊なタイムゾーンを正しく処理できるように toMinute 関数を修正しました。 #20149 (keenwolf).
  • if 関数で then/else ブランチの結果として Tuple 型を使用したクエリの実行後にサーバーがクラッシュする問題を修正しました。Tuple 型には Array もしくはその他の複合型を含める必要があります。#18356 を修正。#20133alesapin)。
  • MongoDB テーブルエンジンは、データを読み取る際にのみ接続を確立するようになりました。ATTACH TABLE 実行時には接続を試みなくなりました。#20110Vitaly Baranov)。
  • StorageJoin のバグ修正。 #20079 (vdimir).
  • 負の数を小さい除数で割った際の剰余を計算する場合に、負の結果を格納するには結果のデータ型の幅が不十分だった問題を修正しました。これにより #20052 がクローズされました。#20067alexey-milovidov)。
  • MaterializeMySQL: 複数テーブルを更新するステートメントに対するレプリケーションを修正。 #20066 (Håvard Kvålen).
  • 初期化スクリプトの実行中に Docker で発生する「Connection refused」エラーを防止。 #20012 (filimonov).
  • EmbeddedRocksDB は実験的なストレージです。適切な型チェックが行われていなかった問題を修正し、コードを簡素化しました。これにより #19967 がクローズされました。#19972 (alexey-milovidov)。
  • Int32 以外の任意の整数型に対して、引数型が Nullable(T) の場合に関数 fromModifiedJulianDay で発生するセグメンテーションフォルトを修正しました。 #19959 (PHO).
  • BloomFilter インデックスのクラッシュを修正し、#19757 を解決。 #19884Maksim Kita)。
  • system.text_log が有効な場合にデッドロックが発生し得る不具合がありました。これにより #19874 が修正されました。 #19875 (alexey-milovidov)。
  • dictGet() を含むデフォルト式を持つテーブルが存在する状態でのサーバー起動処理を修正。辞書をロードせずに dictGet() の戻り値型を取得できるようにしました。 #19805 (Vitaly Baranov).
  • SELECT の実行時にのみ発生していた clickhouse-client の abort 例外を修正。 #19790 (taiyang-li).
  • 複数の clickhouse-copier を起動した際に、パーツを宛先テーブルへ移動できないことがある不具合を修正しました。 #19743 (madianjun).
  • ON CLUSTER クエリを実行するバックグラウンドスレッドが、削除済みのレプリケーテッドテーブルが何らかの処理を行うのを待つ間にハングする可能性がありましたが、修正されました。 #19684 (yiguolei).

ビルド/テスト/パッケージングの改善

  • ClickHouse を AVX-2 をグローバルに有効化した状態でビルドできるようにしました。これにより、モダンな 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 など)は浮動小数点型の引数に対しては使用できなくなりました。今後は明示的に整数へ cast する必要があります。#19853 (Azat Khuzhin).
  • 浮動小数点型に対する lcm/gcd を禁止しました。#19532 (Azat Khuzhin).
  • OPTIMIZE TABLE/マージ処理におけるメモリトラッキングを修正し、OPTIMIZE TABLE/マージ処理に対してクエリのメモリ制限およびサンプリングを考慮するようにしました。#18772 (Azat Khuzhin).
  • パーティションキーとしての浮動小数点型カラムを禁止しました。詳細は #18421 を参照してください。#18464 (hexiaoting).
  • 型定義における過剰な括弧はサポートされなくなりました。例: Array((UInt8))

新機能

  • PostgreSQL テーブルエンジンを追加(select/insert の両方に対応し、多次元配列もサポート)。テーブル関数としても利用可能。PostgreSQL ディクショナリソースを追加。PostgreSQL データベースエンジンを追加。 #18554 (Kseniia Sumarokova)。
  • データ型 Nested は、任意の深さのネストをサポートするようになりました。Array 内の size0Nullable 内の nullTuple 要素の名前など、複合型のサブカラムが導入され、カラム全体を読み込まずに参照できるようになりました。 #17310 (Anton Popov).
  • FlatDictionaryHashedDictionaryComplexKeyHashedDictionaryDirectDictionaryComplexKeyDirectDictionaryRangeHashedDictionaryNullable のサポートを追加しました。 #18236 (Maksim Kita)。
  • DDL ワーカーキュー内のクエリを表示する新しいテーブル system.distributed_ddl_queue を追加します。 #17656 (Bharat Nallan)。
  • LDAP ユーザーディレクトリのユーザーに対して、LDAP グループ名および任意の属性値をローカルロールにマッピングする機能を追加しました。 #17211 (Denis Glazachev).
  • テーブル関数 cluster への INSERT をサポートし、またテーブル関数 remote および cluster の両方で、シャーディングキーを指定してノード間にデータを分散させることをサポートしました。#16752 をクローズしました。#18264flynn)。
  • XML 向けの文字列をデコードする関数 decodeXMLComponent を追加しました。例: SELECT decodeXMLComponent('Hello,&quot;world&quot;!') #17659#18542nauta)。
  • 関数 parseDateTimeBestEffortUSOrZeroparseDateTimeBestEffortUSOrNull を追加しました。 #19712 (Maksim Kita).
  • sign 数学関数を追加しました。#19527flynn)。
  • 使用された機能(関数、テーブルエンジンなど)に関する情報を system.query_log に出力するようにしました。 #18495#19371Kseniia Sumarokova)。
  • 関数 formatDateTime は、日付を四半期としてフォーマットするための %Q 修飾子をサポートするようになりました。 #19224 (Jianmei Zhang).
  • Play UI で Meta+Enter ホットキーの割り当てをサポート。 #19012 (sundyli).
  • map データ型向けに 3 つの関数を追加: 1. mapContains(map, key) は、map のキーに 2 番目の引数 key が含まれているかどうかを確認する。2. mapKeys(map) はすべてのキーを配列形式で返す。3. mapValues(map) はすべての値を配列形式で返す。#18788 (hexiaoting)。
  • log_comment 設定を #18494 に関連して追加。#18549Zijie Lu)。
  • argMin および argMax 関数にタプル引数のサポートを追加しました。 #17359 (Ildus Kurbangaliev).
  • EXISTS VIEW 構文をサポートしました。 #18552 (Du Chuan).
  • SELECT ALL 構文を追加し、#18706 をクローズ。 #18723flynn)。

パフォーマンスの改善

  • stat システムコールの回数を減らすことで、パーツの削除を高速化しました。これにより、以前行われていた最適化を復元しました。IDisk のインターフェイスをより安全にしました。これにより #19065 が解決されました。#19086alexey-milovidov)。
  • WITH 句で宣言されたエイリアスが、インデックス解析で正しく使用されるようになりました。WITH column AS alias SELECT ... WHERE alias = ... のようなクエリで、インデックスを使用できるようになりました。#18896Amos Bird)。
  • optimize_alias_column_prediction(デフォルトで有効)を追加しました。これにより次のような動作を行います: - パーティションプルーニングおよびセカンダリインデックスを使ったデータスキップの際に、WHERE 句内のエイリアス列を考慮します。- optimize_trivial_count に対する単純な COUNT クエリにおいて、WHERE 句内のエイリアス列を考慮します。- optimize_aggregation_in_order/optimize_read_in_order に対して、GROUP BY/ORDER BY 内のエイリアス列を考慮します。#16995sundyli)。
  • 集約関数 sum を高速化しました。この改善は人工的なベンチマーク上でのみ顕著で、実用上の影響はそれほど大きくありません。#19216alexey-milovidov)。
  • libc++ を更新し、別の ABI を使用してパフォーマンスを向上させました。#18914Danila Kutenin)。
  • 論理的に同値な場合、sumIf() および sum(if()) 関数を countIf() 関数に書き換えるようにしました。#17041flynn)。
  • s3_max_connections 設定で制御される、S3 接続用のコネクションプールを使用するようにしました。#13405Vladimir Chebotarev)。
  • 文字列カラムをより高い圧縮率で圧縮して容量を節約するため、zstd の long オプションをサポートしました。#17184ygrek)。
  • 各接続ごとに設定へアクセスする処理を削除し、サーバーのレイテンシをわずかに改善しました。#19863alexey-milovidov)。
  • Buffer エンジンの複数レイヤーにおけるロック競合を削減しました。#19379Azat Khuzhin)。
  • クエリプランの Filter ステップを Expression + Filter のペアに分割することをサポートしました。Expression + Expression のマージ最適化(#17458)とあわせて、一部の式の実行を Filter ステップの後まで遅延できる場合があります。#19253Nikolai Kochetov)。

改良

  • SELECT count() FROM table は、table から少なくとも 1 つ任意のカラムを選択できる場合に実行できるようになりました。この PR により #10639 が修正されました。 #18233 (Vitaly Baranov)。
  • リモートの MySQL サーバーとやり取りする際に、文字セットを utf8mb4 に設定するようにしました。#19795 を修正。#19800alexey-milovidov)。
  • S3 テーブル関数が auto 圧縮モード(自動判別)をサポートするようになりました。これにより #18754 が解決されました。#19793Vladimir Chebotarev)。
  • formatReadableTimeDelta 関数において、無限大の引数が正しく出力されるようにしました。以前のバージョンでは、実装依存の整数値への暗黙的な変換が行われていました。#19791 (alexey-milovidov)。
  • テーブル関数 S3 は、リージョンを厳密に判別できない場合はグローバルリージョンを使用します。これにより #10998 が解決されました。 #19750 (Vladimir Chebotarev)。
  • 分散クエリにおいて設定 async_socket_for_remote が有効な場合、テーブルで非常に深くネストされたデータ型(例: Array(Array(Array(...more...))))が使用されていると、少なくともデバッグビルド構成ではスタックオーバーフローが発生する可能性がありました。これは #19108 を修正します。この変更により、軽微な後方互換性の問題が発生します: 型定義内の過剰な括弧はサポートされなくなりました(例: Array((UInt8)))。 #19736alexey-milovidov)。
  • メッセージブローカー(RabbitMQ と Kafka)用に個別のプールを追加しました。 #19722 (Azat Khuzhin).
  • 非レプリケート MergeTree において、まれに発生する max_number_of_merges_with_ttl_in_pool の上限超過(TTL を伴うマージが上限より多く割り当てられてしまう問題)を修正しました。 #19708 (alesapin)。
  • Dictionary: 属性解析時のエラーメッセージを改善。 #19678 (Maksim Kita).
  • 読み取り時のチェックサム検証を無効化するオプションを追加しました。プロダクション環境では決して使用しないでください。これを無効化しても、何らかのメリットが得られるとは期待しないでください。実験やベンチマークの用途でのみ使用すべきです。この設定が適用されるのは MergeTree ファミリーのテーブルに対してのみです。他のテーブルエンジンおよびネットワーク経由でデータを受信する場合は、常にチェックサムが検証されます。私の観測した限りでは、パフォーマンスの差はないか、あっても 0.5% 未満です。 #19588 (alexey-milovidov)。
  • 関数 multiIf で定数の結果をサポート。#19533 (Maksim Kita)。
  • Map データ型に対して関数 length / empty / notEmpty を有効化し、length 関数は Map 内のキー数を返すようにしました。 #19530 (taiyang-li).
  • clickhouse-benchmark--reconnect オプションを追加しました。このオプションを指定すると、リクエストごとに再接続します。テスト用途のために必要です。 #19872 (alexey-milovidov)。
  • .debug ファイルの新しい配置先をサポートします。これにより、#19348 が修正されます。#19520Amos Bird)。
  • toIPv6 関数は IPv4 アドレスをパースします。 #19518Bharat Nallan)。
  • system.query_logsystem.processes などに http_referer フィールドを追加。これにより #19389 をクローズ。#19390alexey-milovidov)。
  • より多くの関数を大文字小文字を区別しないようにするとともに、エイリアスを追加して MySQL 互換性を向上しました。 #19387 (Daniil Kondratyev).
  • MergeTree パーツタイプ(Wide/Compact/InMemory)向けのメトリクスを追加。 #19381 (Azat Khuzhin).
  • 任意の UID で Docker を実行できるようにしました。 #19374 (filimonov).
  • Pretty フォーマットにおける IPv4 データ型の値の誤った配置を修正しました。値が左寄せではなく右寄せになっていました。この修正により #19184 がクローズされました。 #19339 (alexey-milovidov).
  • 再起動なしで max_server_memory_usage を変更できるようになりました。これにより #18154 が解決されました。#19186alexey-milovidov)。
  • 以前のバージョンでは、bar 関数を特定の NaN 引数で呼び出した際に発生する例外が、やや紛らわしいものになっていました。これにより #19088 が修正されました。 #19107alexey-milovidov)。
  • ClickHouse ユーザーおよびグループの UID / GID を、clickhouse-server イメージ内で固定値 (101) に明示的に設定しました。 #19096 (filimonov).
  • 巨大な文字列を含むデータを挿入する際に発生していた PeekableReadBuffer: Memory limit exceed エラーを修正しました。 #18690 を修正。 #18979tavplubix)。
  • Docker イメージ: clickhouse-server エントリポイントにいくつかの改善を行いました。 #18954 (filimonov).
  • クエリ内の長い名前を ? でマスクせずに正規化するため、normalizeQueryKeepNamesnormalizedQueryHashKeepNames を追加。これにより、複雑なクエリログをより効果的に分析できるようになります。 #18910 (Amos Bird).
  • 送信前に送信側で分散バッチのブロックごとのチェックサムを検証します(ファイルを二度読み込むことなく、読み込み時にチェックサムを検証します)。これにより、送信側の切り詰められた .bin ファイルが原因で受信側の INSERT がハングすることを防止できます。バッチ INSERT においては .bin ファイルを二度読み込むことを避けてください(以前は squashing を考慮するために行数とバイト数を計算する必要がありましたが、現在はこの情報がヘッダーに含まれており、後方互換性も維持されています)。 #18853 (Azat Khuzhin).
  • 集約関数の状態を持つテーブルの RIGHT JOIN および FULL JOIN に関する問題を修正しました。以前のバージョンでは、cloneResized メソッドに関連する例外がスローされていました。#18818 (templarzq).
  • プレフィックスベースの S3 エンドポイント設定を追加しました。 #18812 (Vladimir Chebotarev)。
  • bitmapTransform、bitmapSubsetInRange、bitmapSubsetLimit、bitmapContains 関数に、[UInt8, UInt16, UInt32, UInt64] 型の引数サポートを追加しました。これにより #18713 がクローズされます。#18791sundyli)。
  • CTE (Common Table Expressions) に対して、さらに別名を付けられるようにしました。enable_global_with_statement = 1 の場合、同じレベルのサブクエリに対して CSE (Common Subexpressions Elimination) を伝播させます。これにより #17378 が修正されます。また、https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235 も修正されます。 #18684 (Amos Bird)。
  • librdkafka を v1.6.0-RC2 に更新。#18668 を修正。#18671filimonov)。
  • 予期しない例外が発生した場合に、分散 DDL クエリの実行を担当するバックグラウンドスレッドを自動的に再起動するようにしました。これにより #17991 を修正しました。#18285徐炘)。
  • S3 のグローバルリージョンを利用可能にするため、AWS C++ SDK を更新しました。 #17870 (Vladimir Chebotarev).
  • LIVE VIEW テーブルを作成する際に使用できる WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec] 句のサポートを追加しました。 #14822 (vzakaznikov).
  • 旧構文で作成された MergeTree テーブルに対する MODIFY TTL クエリを制限しました。以前はクエリ自体は成功していましたが、実際には何の効果もありませんでした。#19064Anton Popov)。

バグ修正

  • 定数引数を持つバイナリ関数に対するインデックス解析を修正し、誤ったクエリ結果が返される問題を解消しました。これにより #18364 が修正されました。 #18373 (Amos Bird)。
  • dictGet() を含むデフォルト式を持つテーブルが存在してもサーバーを起動できるように修正。辞書をロードせずに dictGet() の戻り値の型を取得できるようにした。 #19805 (Vitaly Baranov).
  • if 関数で then/else の両方の分岐結果の型が Tuple となるクエリ実行後に発生していたサーバークラッシュを修正しました。Tuple 型には Array もしくは他の複合型が含まれている必要があります。#18356 を修正しました。#20133alesapin)。
  • MaterializeMySQL(実験的機能):複数のテーブルを更新するステートメントに対するレプリケーションを修正。 #20066 (Håvard Kvålen)。
  • 初期化スクリプトの実行中に Docker で発生する「Connection refused」エラーを防止。 #20012 (filimonov).
  • EmbeddedRocksDB は実験的なストレージです。適切な型チェックが行われていなかった問題を修正し、コードを簡素化しました。これにより #19967 がクローズされます。 #19972alexey-milovidov)。
  • 引数の型が Int32 以外の任意の整数型に対する Nullable(T) の場合に、関数 fromModifiedJulianDay で発生していたセグメンテーションフォールトを修正しました。 #19959 (PHO).
  • 関数 greatCircleAngle は、以前のバージョンでは不正確な結果を返していました。この修正により #19769 がクローズされました。#19789alexey-milovidov)。
  • データ破損後に一部のパーツを処理できなくなることがある、レプリケート操作(ミューテーションなど)に関するまれなバグを修正。#19593 を修正。#19702alesapin)。
  • ON CLUSTER クエリを実行するバックグラウンドスレッドが、削除されたレプリケーテッドテーブルの何らかの処理完了を待ってハングする可能性がありました。この問題を修正しました。 #19684 (yiguolei).
  • カラム定義の誤ったデシリアライズを修正し、名前が \ のカラムを持つテーブルへの INSERT を行えなくなっていた問題を解消しました。 #19479 (alexey-milovidov).
  • いずれかのファイルに空のデータブロックがある場合、分散バッチを破損としてマークするようにしました。 #19449 (Azat Khuzhin).
  • DROP/DETACH/REPLACE/MOVE PARTITION の後にミューテーションがハングする可能性がある、非常にまれなバグを修正しました。大半のケースについては、#15537 によって既に部分的に修正されていました。#19443tavplubix)。
  • Extremes transform was already added to pipeline というエラーが発生する可能性のあった問題を修正しました。 #14100 を修正。 #19430Nikolai Kochetov)。
  • 非ゼロのデフォルト値を持つ結合型(例: 一部の Enum)でのデフォルト値を修正。#18197 をクローズ。#19360vdimir)。
  • EOF 時に分散送信用ファイルを破損扱いとしてマークしないようにしました。 #19290 (Azat Khuzhin).
  • async_socket_for_remote におけるパイプ fd のリークを修正。#19153Azat Khuzhin)。
  • ORC フォーマットのファイルから無限に読み込まれてしまう問題を修正(#10580 で導入された不具合)。#19095 を修正。#19134Nikolai Kochetov)。
  • 固定グラニュラリティサイズを超えるサイズのマークが生成される可能性のあった MergeTree データライターの不具合を修正。 #18913 を修正。 #19123alesapin)。
  • ClickHouse が LowCardinality(Nullable(...)) から圧縮コーデックを読み取れずに Attempt to read after EOF という例外を投げてしまう起動時のバグを修正。#18340 を修正。#19101alesapin)。
  • tupleHammingDistance の実装を簡素化しました。同じ長さであれば任意のタプルをサポートします。#19029 を修正しました。#19084Nikolai Kochetov)。
  • groupUniqArray が Enum 型の引数に対して正しい型を返すように修正しました。この変更により #17875 が解決されました。#19019alexey-milovidov)。
  • LowCardinality 引数で関数 ignore を使用した場合に発生する可能性のある Expected single dictionary argument for function エラーを修正しました。#14275 を解決。 #19016Nikolai Kochetov)。
  • TinyLog エンジンのテーブルへの LowCardinality 列の挿入処理を修正。#18629 を修正。#19010Nikolai Kochetov)。
  • JOIN における軽微な不具合を修正:JOIN が const カラムをマテリアライズしようとしていたが、コード側ではそれらが別の箇所でマテリアライズされることを前提としていた。#18982Nikita Mikhaylov)。
  • optimize_move_functions_out_of_any を無効化しました。この最適化は常に正しいとは限らないためです。これにより #18051 および #18973 がクローズされます。 #18981alexey-milovidov)。
  • クエリプランの Expression ステップのマージによって発生する可能性のある例外 QueryPipeline stream: different number of columns を修正します。 #18190 を修正。 #18980Nikolai Kochetov)。
  • シャットダウン時にごくまれに発生していたデッドロックを修正しました。 #18977 (tavplubix).
  • サーバーのメモリが不足した際にまれに発生していたクラッシュを修正しました。 #18976 (tavplubix).
  • ALTER TABLE ... DROP PART 'part_name' クエリがパーティション全体の重複排除ブロックをすべて削除してしまう誤った動作を修正しました。 #18874 の修正。 #18969 (alesapin)。
  • 問題 #18894 を修正。通常、Looker などの BI ツールによって自動生成されることが多い長いカラムエイリアス('table.column' スタイル)が長いテーブル名と一致する場合に例外が発生しないよう、チェックを追加しました。 #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') のような)を含むミューテーションが誤ってシリアライズされていたバグを修正しました。 #18878 を解決しました。 #18944alesapin)。
  • ATTACH PARTITION はミューテーションをリセットします。 #18804. #18935 (fastio).
  • bitmapOrCardinality により発生しうる nullptr 参照の問題を修正しました。これにより #18911 をクローズします。#18912sundyli)。
  • Nullable(String) から Nullable(Decimal(P, S)) への CAST 実行時に発生していた Attempt to read after eof エラーを修正しました。CAST 関数は、NULL 許容の文字列から Decimal をパースできない場合に NULL を返すようになりました。#7690 を修正。#18718Winter Zhang)。
  • MySQL エンジンにおけるデータ型変換の不具合を修正。 #18124 (bo zeng).
  • select のみを実行している際に発生していた clickhouse-client のアボート例外を修正しました。 #19790 (taiyang-li).

ビルド/テスト/パッケージングの改善

  • CI で SQLancer(論理 SQL 用ファジングツール)を実行。#19006Ilya Yatsishin)。
  • Query Fuzzer が、新しく追加されたテストに対してより広範にファズテストを実行するようにした。これにより #18916 がクローズされる。#19185alexey-milovidov)。
  • より良いファズテストのために Big List of Naughty Strings と統合。#19480alexey-milovidov)。
  • MSan で実行されるインテグレーションテストを追加。#18974alesapin)。
  • cyrus-sasl と musl における MemorySanitizer のエラーを修正。#19821Ilya Yatsishin)。
  • positionCaseInsensitiveUTF8 関数における引数不足のチェックが address sanitizer をトリガーしていた問題を修正。#19720alexey-milovidov)。
  • インテグレーションテストで docker-compose に対する --project-directory を削除。Docker コンテナからのログのフォーマットを修正。#19706Ilya Yatsishin)。
  • インテグレーションテスト向けの macros.xml の生成を容易にした。dicttoxml からの過剰なログ出力は発生しなくなった。dicttoxml プロジェクトは 5 年以上アクティブではない。#19697Ilya Yatsishin)。
  • 環境変数 CLICKHOUSE_WATCHDOG_ENABLE により watchdog を明示的に有効化/無効化できるようにした。デフォルトでは、サーバーがターミナルに接続されていない場合に有効になる。#19522alexey-milovidov)。
  • arm64 上で Kafka サポート付きの ClickHouse をビルドできるようにした。#19369filimonov)。
  • SSL なしで librdkafka をビルドできるようにした。#19337filimonov)。
  • FreeBSD ビルドでの Kafka 入力を復元。#18924Alexandre Snarskii)。
  • テーブル関数 VALUES で発生しうる nullptr 参照の問題を修正。#19357alexey-milovidov)。
  • arrayElement 関数、substringarraySum における UBSan レポートを回避。#19305 を修正。#19287 を修正。これにより #19336 がクローズされる。#19347alexey-milovidov)。

ClickHouse リリース 21.1

ClickHouse リリース v21.1.3.32-stable, 2021-02-03

バグ修正

  • BloomFilter インデックスがクラッシュする不具合を修正。#19757 を解決。#19884Maksim Kita)。
  • UNION DISTINCT サブクエリへの述語のプッシュダウン時に発生していたクラッシュを修正しました。これにより #19855 が修正されます。 #19861Amos Bird)。
  • 127 を超える UInt8 値でのフィルタリングを修正。 #19799 (Anton Popov).
  • 以前のバージョンでは、関数 arrayEnumerateUniq に対する異常な引数がクラッシュや無限ループを引き起こす可能性がありました。この修正により #19787 がクローズされました。#19788alexey-milovidov)。
  • 算術型と文字列型の正確な比較を行う際に発生していたスタックオーバーフローを修正しました。 #19773 (tavplubix).
  • ネストされたカラム名が WHERE または PREWHERE で使用された場合にクラッシュする問題を修正しました。 #19755 を修正。 #19763Nikolai Kochetov)。
  • bitmapAndnot 関数で発生していたセグメンテーションフォルトを修正。#19668 の不具合を解決。#19713Maksim Kita)。
  • 大きな整数を扱う一部の関数がセグメンテーションフォルトを引き起こす場合があります。Big integers 機能は実験的な段階です。これにより #19667 がクローズされます。 #19672 (alexey-milovidov)。
  • LowCardinality 引数を取る関数 neighbor で誤った結果が返される問題を修正。#10333 を修正。#19617Nikolai Kochetov)。
  • 切断後に Connection 内の CompressedWriteBuffer で発生していた use-after-free を修正。 #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 が修正されます。#19472alexey-milovidov)。
  • IV として空文字列が渡された場合、encrypt/decrypt 関数において未初期化メモリの読み取りが可能でした。 この変更により #19391 が解決されました。 #19397 (alexey-milovidov).
  • Uber H3 ライブラリで発生しうるバッファオーバーフローを修正しました。詳細は https://github.com/uber/h3/issues/392 を参照してください。これにより #19219 が解決されました。#19383alexey-milovidov)。
  • system.parts _state 列の順序が誤っていたため、この列をクエリすると LOGICAL_ERROR が発生していた問題を修正。 #19346 (Azat Khuzhin).
  • マテリアライズドビューとそのターゲットテーブルの構造が異なる場合に、集約処理時に誤った結果が返されたりセグメンテーションフォルトが発生したりする可能性があった問題を修正しました。 #18063 を修正。 #19322 (tavplubix).
  • Cannot convert column now64() because it is constant but values of constants are different in source and result という、定数だがソースと結果で定数の値が異なるためにカラム now64() を変換できないエラーを修正。#7156 の続き。#19316Nikolai Kochetov)。
  • ALTERDROP クエリが同時に実行された場合に、ReplicatedMergeTree テーブルの処理中にハングする可能性がある不具合を修正しました。 #19237 (alesapin).
  • Template または CustomSeparated フォーマットを使用して HTTP インターフェース経由でデータを挿入する際に発生していた There is no checkpoint エラーを修正しました。これにより #19021 が修正されます。 #19072tavplubix)。
  • 結果を算出できない場合には、解析ステージにおけるサブクエリの定数畳み込みを無効化しました。 #18446 (Azat Khuzhin).
  • MOVEREPLACE PARTITION の後に、存在しないパーツを待ち続けて Mutation がハングすることがあり、まれに DETACHDROP PARTITION の後に発生することもありました。この問題は修正されました。 #15537 (tavplubix).

ClickHouse release v21.1.2.15-stable 2021-01-18

後方互換性のない変更

  • 設定 input_format_null_as_default がデフォルトで有効になりました。 #17525 (alexey-milovidov).
  • 設定ファイル内のプロファイル設定に対して、設定制約のチェックを行うようになりました。users.xml に対応する制約を満たさない設定が含まれている場合、サーバーは起動に失敗します。 #18486 (tavplubix).
  • データパーツに影響するストレージ設定(write_final_mark および enable_mixed_granularity_parts)を ALTER MODIFY SETTING で変更できないように制限しました。 #18306 (Amos Bird).
  • insert_quorum_parallel のデフォルト値を 1 に設定しました。「逐次的」なクォーラム挿入よりも、はるかに使い勝手が良いです。ただし、逐次一貫性に依存している場合は、この設定値を 0 に戻す必要があります。 #17567 (alexey-milovidov).
  • sumburConsistentHash 関数を削除しました。これにより #18120 がクローズされます。 #18656 (alexey-milovidov).
  • 集約関数 timeSeriesGroupSumtimeSeriesGroupRateSum を削除しました。理由は、私の友人が「これらは一度も動作しなかった」と言ったためです。これにより #16869 が修正されます。もしこれらの関数を問題なく使えていた場合は、[email protected] までメールを送ってください。 #17423 (alexey-milovidov).
  • toUnixTimestamp(Date()) の使用を禁止しました(以前は Date の UInt16 表現をそのまま返していました)。 #17376 (Azat Khuzhin).
  • avg および avgWeighted 関数で拡張整数型(Int128, Int256, UInt256)を使用できるようにしました。また、avgWeighted 関数では、値と重みで異なる型(整数、Decimal、浮動小数点)を使用できるようにしました。これは後方互換性のない変更です。avg および avgWeighted 関数は、常に Float64 を返すようになりました(ドキュメントどおり)。この変更以前は、Decimal 引数に対しては戻り値の型も Decimal でした。 #15419 (Mike).
  • toUUID(N) は動作しなくなりました。代わりに toUUID('00000000-0000-0000-0000-000000000000') を使用してください。この変更は、N がゼロ以外の場合の toUUID(N) の結果が直感的でないために行われました。
  • 「key usage」が正しくない SSL 証明書は拒否されます。以前のバージョンでは、これらも使用できていました。 #19262 を参照してください。
  • 置換ファイル(/etc/metrika.xml)への incl 参照が、デフォルトの設定 (<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>) から削除されました。もし置換ファイルを使用しており、これらの暗黙の参照に依存していた場合は、アップデート前に incl="..." 属性を持つ対応するセクションを追加して、手動で明示的に戻す必要があります。 #18740 (alexey-milovidov) を参照してください。

新機能

  • ClickHouse に gRPC プロトコルを実装しました。 #15111 (Vitaly Baranov)
  • 複数の ZooKeeper クラスターを使用できるようにしました。#17070 (fastio)。
  • REPLACE TABLECREATE OR REPLACE TABLE クエリを実装しました。 #18521 (tavplubix)。
  • UNION DISTINCT を実装し、通常の UNION 句はデフォルトで UNION DISTINCT として扱います。UNION ALL として扱う、またはモードの明示的な指定を必須にできる設定 union_default_mode を追加しました。 #16338 (flynn).
  • 関数 accurateCastOrNull を追加しました。これにより #10290 がクローズされました。x IN (subquery) 式に型変換を追加しました。これにより #10266 がクローズされました。#16724Maksim Kita)。
  • IP Dictionary は IPv4 / IPv6 型を直接サポートするようになりました。#17571 (vdimir).
  • IP Dictionary がキーの取得をサポートするようになりました。 #18241 を解決しました。 #18480vdimir)。
  • データのインポートおよびエクスポートに対して *.zst 圧縮/伸長のサポートを追加しました。これにより、file() 関数で *.zst を使用できるようになり、HTTP クライアントで Content-encoding: zstd ヘッダーを利用可能になります。これにより #16791 が解決されました。#17144Abi Palagashvili)。
  • 集約関数 mannWitneyUTeststudentTTestwelchTTest を追加しました。rankCorr を一部リファクタリングしました。 #16883 (Nikita Mikhaylov).
  • 関数 countMatches / countMatchesCaseInsensitive を追加。#17459Azat Khuzhin)。
  • countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8() を実装(部分文字列の出現回数をカウントする関数)。 #17347 (Azat Khuzhin).
  • 使用されたデータベース、テーブル、およびカラムに関する情報を system.query_log に追加し、query_kindnormalized_query_hash フィールドを追加。 #17726 (Amos Bird).
  • 設定 optimize_on_insert を追加しました。有効にすると、マージ処理がこのブロックに対して実行された場合と同じ変換(例: Replacing、Collapsing、Aggregating...)を、INSERT されたデータブロックに対して行います。この設定はデフォルトで有効になっています。これはマテリアライズドビューおよび MaterializeMySQL の動作に影響を与える可能性があります(詳細な説明を参照)。これにより #10683 がクローズされました。 #16954 (Kruglov Pavel)。
  • HDFS 向けの Kerberos 認証。 #16621 (Ilya Golshtein).
  • system.settings の設定パラメータを表示するための SHOW SETTINGS ステートメントをサポートしました。SHOW CHANGED SETTINGS および LIKE / ILIKE 句にも対応しました。 #18056 (Jianmei Zhang)。
  • 関数 position は、SQL 互換性を高めるために POSITION(needle IN haystack) 構文をサポートするようになりました。これにより #18701 が解決されました。... #18779Jianmei Zhang)。
  • MergeTree ファミリーのテーブル向けに、新しいストレージ設定 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;#18060Maksim Kita)。
  • 集約関数 arrayMinarrayMaxarrayAvg を追加しました。 #18032 (Maksim Kita).
  • ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ... クエリを実装しました。このクエリは、指定された構造で新しいテーブルを作成し、user_files 内の指定されたディレクトリのテーブルデータをテーブルに関連付けます。 #17903 (tavplubix).
  • StorageMemory にミューテーションのサポートを追加します。これにより #9117 がクローズされます。 #15127 (flynn)。
  • 構文 EXISTS DATABASE name をサポート。#18458 (Du Chuan).
  • MySQL と同様に、組み込み関数 isIPv4String および isIPv6String をサポートしました。 #18349 (Du Chuan)。
  • マルチシャード構成の分散テーブルに対して、分散キーを指定せずに挿入できるようにする新しい設定 insert_distributed_one_random_shard = 1 を追加しました。 #18294 (Amos Bird).
  • min_compress_block_sizemax_compress_block_size の設定を MergeTreeSettings に追加しました。これらはグローバル設定よりも優先して適用され、設定されている場合にのみ有効になります。 13890 をクローズしました。 #17867 (flynn)。
  • 64ビット Roaring ビットマップのサポートを追加しました。 #17858 (Andy Yang).
  • 重複の判定に使用する列のリストを明示的(またはアスタリスク/カラムトランスフォーマーによる暗黙的)に指定できるように、OPTIMIZE ... DEDUPLICATE 構文を拡張しました。... #17846 (Vasily Nemkov)。
  • 関数 toModifiedJulianDayfromModifiedJulianDaytoModifiedJulianDayOrNullfromModifiedJulianDayOrNull を追加しました。これらの関数は、プロレプティックグレゴリオ暦の日付と修正ユリウス日(Modified Julian Day)番号との間の変換を行います。 #17750 (PHO)
  • カスタム TLD リストの利用に対応: 関数 firstSignificantSubdomainCustomcutToFirstSignificantSubdomainCustom を追加。 #17748 (Azat Khuzhin)。
  • ネイティブな TCP インターフェイスをラップするために PROXYv1 プロトコルのサポートを追加しました。クォータをプロキシから転送された IP アドレスをキーとして使用できるようにしました(PROXYv1 アドレスおよび HTTP インターフェイスからの X-Forwarded-For に適用されます)。これは、(CloudFlare などの)信頼できるプロキシ経由でのみ ClickHouse へのアクセスを提供しつつ、ユーザーの利用量や制限を元の IP アドレスごとに管理したい場合に有用です。これにより #17268 が修正されました。#17707alexey-milovidov)。
  • clickhouse-client で、Alt-Shift-E によってコマンド編集用に EDITOR を開けるようになりました。 #17665 (Amos Bird).
  • 文字列を XML のテキストノードまたは属性に配置する際に必要な文字のエスケープを行う関数 encodeXMLComponent を追加しました。 #17659 (nauta).
  • DETACH TABLE/VIEW ... PERMANENTLY 構文を導入しました。これにより、テーブルは再起動後に自動的に再アタッチされることはなくなり(明示的に要求した場合のみ再アタッチされます)、短い構文である ATTACH TABLE を使って再度アタッチすることが可能です。#5555 を実装しました。#13850 を修正しました。#17642filimonov)。
  • MergeTree テーブル内の合計行数、バイト数、およびパーツ数に関する非同期メトリクスを追加。これにより #11714 が修正されました。 #17639 (flynn)。
  • SQL の外側で行うページネーションのために、limitoffset 設定を追加しました: #16176 これらは API の構築に役立ちます。これら 2 つの設定は、select * from (your_original_select_query) t limit xxx offset xxx; が追加されたかのように SELECT クエリに対して動作します。 #17633 (hexiaoting)。
  • クエリから SimpleAggregateFunction 型を構築するための新しい集約コンビネータ -SimpleState を追加しました。これは AggregatingMergeTree エンジンのマテリアライズドビューを定義する際に有用であり、プロジェクションにも役立ちます。 #16853 (Amos Bird)。
  • clickhouse-clientclickhouse-localqueries-file パラメーターを追加しました。 #15930 (Maksim Kita)。
  • clickhouse-benchmarkquery パラメータを追加しました。#17832 (Maksim Kita)。
  • EXPLAIN ASTSELECT 以外のクエリに対しても使用できるようになりました。 #18136 (taiyang-li).

実験的機能

  • テキスト n-gram および shingle の 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).
  • AggregateFunctionWindowFunnelDataPODArrayPODArrayWithStackMemory に置き換え、windowFunnel 関数のパフォーマンスを改善しました。 #18817 (flynn).
  • Distributed テーブルへの同期 INSERT 時に、空のブロックをシャードへ送信しないようにしました。これにより #14571 がクローズされました。#18775alexey-milovidov)。
  • StorageMemory 向けの読み取りを最適化しました。 #18052 (Maksim Kita).
  • float から文字列への変換において、ryu の代わりに Dragonbox アルゴリズムを使用するようにしました。これにより、float から文字列への変換処理のパフォーマンスが大幅に向上します。 #17831 (Maksim Kita)。
  • IPv6CIDRToRange の実装を高速化。#17569vdimir)。
  • remerge_sort_lowered_memory_bytes_ratio 設定を追加しました(remerge 後のメモリ使用量がこの比率まで低減されない場合、remerge は無効化されます)。#17539 (Azat Khuzhin)。
  • PK に SimpleAggregateFunction(String) を使用している AggregatingMergeTree のパフォーマンスを改善。 #17109 (Azat Khuzhin).
  • これにより -If コンビネータがデバーチャル化され、count が正しくベクトル化されました。これは この PR に対応しています。#17043Amos Bird)。
  • 膨大な数の MergeTree テーブルにまたがる Merge テーブルからの読み取り性能を改善しました。#7748 を修正。#16988Anton Popov)。
  • 関数 repeat のパフォーマンスを改善しました。#16937 (satanson).
  • float 型のパース性能をわずかに向上しました。 #16809 (Maksim Kita).
  • OPTIMIZE TABLE ... FINAL でマージ済みパーティションをスキップする機能を追加しました。 #15939 (Kruglov Pavel).
  • 浮動小数点数をパースするために、Daniel Lemire による fast_float を統合しました。#16787Maksim Kita)。ただし、ClickHouse における従来の簡易的な float パーサーと比べて依然として性能が低いため、現在は有効化されていません。
  • 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).
  • 列のサイズが不明な場合でも、コンパクトパーツで 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 になります。#18145Mike)。
  • ミニマルな Web UI を改良: 履歴機能を追加、共有機能のサポートを追加、異なるリクエスト間の競合状態を回避、リクエスト処理中および準備完了を示すインジケーターを追加、favicon を追加、textarea にフォーカスがない場合でも Ctrl+Enter を検出できるようにした。 #17293 #17770 (alexey-milovidov).
  • clickhouse-server は ZooKeeper サーバーに close リクエストを送信しませんでした。 #16837 (alesapin).
  • メモリ制限が極端に低い場合(max_memory_usage = 1 / max_untracked_memory = 1)にサーバーが異常終了しないようにしました。 #17453 (Azat Khuzhin).
  • 異なるイベントに同一のタイムスタンプが発生する場合における windowFunnel 関数の非決定的な結果が出る問題を修正。 #18884 (Fuwang Hu).
  • Docker: clickhouse-server Docker イメージにおいて、clickhouse ユーザーおよびグループの uid/gid を固定値 101 に明示的に設定しました。 #19096 (filimonov).
  • Distributed テーブルへの非同期 INSERT:MergeTree ファミリーと同様に、2 つの新しい設定が追加されました。- fsync_after_insert - 挿入ごとに fsync を実行します。これにより INSERT のパフォーマンスが低下します。- fsync_directories - すべての操作(書き込み、リネームなど)の完了後に、一時ディレクトリ(非同期 INSERT のみで使用される)に対して fsync を実行します。#18864 (Azat Khuzhin).
  • SYSTEM KILL コマンドが Docker で利用できるようになりました。これにより #18847 が解決されました。 #18848alexey-milovidov)。
  • FETCH PARTITION 実行時に ZooKeeper パス内のマクロを展開するようにしました。 #18839 (fastio).
  • ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ... をすべてのレプリカに適用してください。この種の ALTER コマンドはレプリケーションの対象にならないためです。#18789Amos Bird)。
  • カラムトランスフォーマー EXCEPT で、正規表現マッチャーとして文字列を受け付けられるようにしました。これにより #18685 が解決されました。 #18699Amos Bird)。
  • SummingMergeTree における SimpleAggregateFunction の挙動を修正しました。現在は AggregateFunction と同様に動作します。以前のバージョンでは、どの集約関数であっても値が単純に合計されていました。この修正により #18564#8052#18637 が解決されています(Amos Bird)。SummingMergeTreeSimpleAggregateFunction を使用する際の別の不具合も修正しました。この修正により #18676#18677 が解決されています(Amos Bird)。
  • 関数 bar の最後の引数が NaN の場合に、アロケータ内部で発生していたアサーションエラーを修正しました。現在は通常の ClickHouse の例外が送出されるようになりました。これにより #17876 が修正されました。#18520Nikita Mikhaylov)。
  • 一部ツールで例外メッセージの後に改行が入らないユーザビリティ上の問題を修正。 #18444 (alexey-milovidov).
  • プライマリキーおよびパーティションキーのカラム型を LowCardinality(Type) から Type、またはその逆に変更できる機能を追加しました。また、プライマリキーカラム型を EnumX から IntX 型に変更できる機能も追加しました。#5604 を修正しました。 #18362 (alesapin)。
  • untuple のフィールドアクセスを実装しました。 #18133. #18309 (hexiaoting).
  • CSV 内で、配列を表現した文字列がネストされた CSV としてシリアライズされている場合に、Array 型フィールドとしてパースできるようにしました。例: "[""Hello"", ""world"", ""42"""" TV""]"['Hello', 'world', '42" TV'] としてパースされます。さらに、角かっこで囲まずに、文字列中の CSV 形式で記述された配列もパースできるようにしました。例: "'Hello', 'world', '42"" TV'"['Hello', 'world', '42" TV'] としてパースされます。 #18271 (alexey-milovidov).
  • MergeTree の wide part に対するアダプティブな粒度計算を改善しました。 #18223 (alesapin).
  • これで clickhouse install が Mac でも動作するようになりました。このプラットフォームでは procfs が利用できないことが原因でした。#18201 (Nikita Mikhaylov)。
  • SHOW ... クエリ構文に関するヒントを改善。 #18183 (Du Chuan).
  • 配列集約関数 arrayMinarrayMaxarraySumarrayAvgInt128Int256UInt256 をサポートするようになりました。 #18147 (Maksim Kita).
  • Set および Join 用のストレージ設定に disk を追加しました。 #18112 (Grigory Pervakov)。
  • アクセス制御: テーブル関数 merge() では、データを取得する各テーブルに対して、現在のユーザーが SELECT 権限を持っている必要があります。このPRは #16964 を修正します。#18104 #17983Vitaly Baranov)。
  • 一時テーブルは、作成されたセッション内からのみシステムテーブル system.tables および system.columns に表示されるようになりました。内部データベース _temporary_and_external_tables はこれらのシステムテーブル上では非表示となり、その代わりに一時テーブルは、is_temporary フラグが設定された、データベース名が空のテーブルとして表示されます。 #18014 (Vitaly Baranov)。
  • ターミナルウィンドウのサイズ変更時に発生する clickhouse-client の描画問題を修正。#18009 (Amos Bird)。
  • クライアントが接続を切断した際のイベントのログ出力レベルを、Warning から Information に下げました。 #18005 (filimonov).
  • DiskS3 向けにファイルシステム上の空または不正なメタデータファイルを強制的に削除します。S3 は実験的な機能です。 #17935 (Pavel Kovalenko).
  • アクセス制御: allow_introspection_functions=0 はイントロスペクション関数の使用を禁止しますが、それらに対する権限を付与すること自体は、禁止されなくなりました(付与された権限を実際に利用するには、被付与者自身が allow_introspection_functions=1 を設定する必要があります)。同様に、allow_ddl=0 は DDL コマンドの使用を禁止しますが、それらに対する権限の付与自体は、禁止されなくなりました。#17908 (Vitaly Baranov)。
  • ユーザビリティの改善:カラム名のヒントを追加。#17112#17857fastio)。
  • 2つのマージテーブルが互いのデータを読み取ろうとする場合に診断情報を追加しました。 #17854 (徐炘)
  • ClickHouse の Docker イメージを使用する際に、実行中のスクリプトのタイムアウト値を上書きできるようにしました。 #17818 (Guillaume Tassery).
  • システムログテーブルの ENGINE 定義の構文を検査し、一部の設定エラーを防ぐようにしました。この構文チェックはセマンティックなものではないため、存在しないカラムや式・関数といった種類の誤りは、テーブルが実際に作成されるまで検出されません。 #17739 (Du Chuan).
  • RabbitMQ テーブルの初期化時に、接続がない場合に例外をスローしていた処理を削除しました(バックグラウンドで再接続を行うようになりました)。 #17709 (Kseniia Sumarokova).
  • Buffer のフラッシュ処理中にサーバーのメモリ制限を無視しないようにしました。 #17646 (Azat Khuzhin).
  • use-after-free エラーを修正するため、RocksDB(ClickHouse-Extras からの)パッチ適用済みバージョンに切り替え。 #17643 (Nikita Mikhaylov).
  • 並列パース時の例外メッセージにオフセット情報を追加しました。これにより #17457 を修正しました。#17641Nikita Mikhaylov)。
  • INSERT クエリの途中で "Too many parts" エラーが発生しないようにしました。 #17566 (alexey-milovidov).
  • ALTER クエリ内の UPDATE 文でクエリパラメータを使用可能にしました。#10976 を修正。#17563alexey-milovidov)。
  • クエリ難読化機能: 識別子名として一部の SQL キーワードを使用しないようにしました。 #17526 (alexey-milovidov).
  • DDLWorker が実行した現在の最大 DDL エントリをサーバーメトリクスとしてエクスポートします。これは、DDLWorker がどこかでハングしていないかを確認するのに役立ちます。 #17464 (Amos Bird)。
  • すべてのサーバー上で現在実行中のスレッドに関する非同期メトリクスをエクスポートします。このような問題の追跡や特定に役立ちます。#17463Amos Bird)。
  • 設定 asterisk_include_materialized_columns および asterisk_include_alias_columns が有効な場合、ワイルドカードクエリに MATERIALIZED / ALIAS などの動的カラムを含めるようになりました。 #17462 (Ken Chen).
  • config.xml<ttl> 属性を使用して、system log tables から古いレコードを削除するための TTL を指定できるようにしました。#17438Du Chuan)。
  • これにより、MySQL および PostgreSQL プロトコル経由でサーバーに送信されるクエリには、それぞれ固有のインターフェース種別が割り当てられます(テーブル system.query_loginterface 列で確認できます)。MySQL には 4、PostgreSQL には 5 が使用され、一方で、以前使用されていた 1 は現在はネイティブプロトコル専用となりました。#17437Vitaly Baranov)。
  • INSERT ... SELECT ... SETTINGS クエリの SETTINGS 句のパースを修正しました。 #17414 (Azat Khuzhin).
  • RadixSort でのメモリ使用量を正しく計測するようにしました。 #17412 (Nikita Mikhaylov).
  • サーバーの receiveHello に eof チェックを追加して、Attempt to read after eof 例外の発生を防ぎます。 #17365 (Kruglov Pavel).
  • bigint 変換時にスタックオーバーフローが発生しうる問題を回避しました。BigInt は実験的な機能です。 #17269 (flynn).
  • これにより、set インデックスが GLOBAL IN と併用できるようになりました。これによって #17232#5576 が修正されました。#17253Amos Bird)。
  • S3 ストレージへのリクエストにおける HTTP リダイレクトの最大回数を制限する設定(s3_max_redirects)を追加。 #17220 (ianton-ru).
  • -OrNull コンビネータを -If-Merge-MergeState-State コンビネータと組み合わせて使用する場合は、-OrNull を前に付ける必要があります。 #16935 (flynn)。
  • HTTP プロキシおよび HTTPS での S3 エンドポイントの設定をサポートしました。 #16861 (Pavel Kovalenko).
  • S3 クライアント向けに、環境、~/.aws、および AssumeRole を用いた正しい認証処理を追加しました。 #16856 (Vladimir Chebotarev).
  • OpenTelemetry の span をさらに追加。span データを Zipkin にエクスポートする例を追加。#16535 (Alexander Kuzmenkov).
  • Cache dictionaries: 取得時のコールバックやロックを完全に排除しました。キーは「not found」と「expired」に分けず、クエリ中は同じマップで管理されます。 #14958 (Nikita Mikhaylov)。
  • fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync(実験的な機能)がこれまで正しく動作していなかった問題を修正。 #18845 (Azat Khuzhin).
  • MaterializeMySQL エンジンのネストされたデータベースとして Atomic エンジンを使用できるようにしました。 #14849 (tavplubix)。

不具合修正

  • ごくまれなケースでサーバーが接続の受け付けを停止してしまう問題を修正しました。 #17542 (Amos Bird、alexey-milovidov).
  • 定数引数を持つ二項関数のインデックス解析を修正し、誤ったクエリ結果を返してしまう問題を解消しました。これは #18364 を修正します。#18373Amos Bird)。
  • インデックス比較の型が異なる場合に誤ったインデックス解析が行われる可能性があった問題を修正します。これにより #17122 が修正されます。#17145Amos Bird)。
  • マージ中の AIO を用いた書き込みを無効化しました。これは、マージ処理の際にプライマリキー列のデータが極めて稀に破損する可能性があるためです。#18481 (alesapin)。
  • ワイドパーツからコンパクトパーツへのマージを制限しました。垂直マージの場合、結果として生成されるパーツが壊れてしまう原因となっていました。 #18381 (Anton Popov).
  • MergeTree* からの読み取り時に read backoff が発生している場合に、クエリ結果が不完全になる可能性がある問題を修正(ログにはメッセージ <Debug> MergeTreeReadPool: Will lower number of threads が出力される)。この問題は #16423 で導入されました。#18137 を修正しました。#18216Nikolai Kochetov)。
  • rocksdb ライブラリの use-after-free バグを修正しました。 #18862 (sundyli).
  • ORC フォーマットのファイルを無限に読み込み続けてしまう問題を修正(#10580 で導入された不具合)。#19095 を修正。#19134Nikolai Kochetov)。
  • マージツリーのデータライターにおいて、固定グラニュラリティのサイズより大きいサイズのマークが生成されてしまう可能性がある不具合を修正しました。これにより #18913 が修正されました。#19123alesapin)。
  • ClickHouse が起動時に LowCardinality(Nullable(...)) から圧縮コーデックを読み取れず、Attempt to read after EOF という例外をスローしてしまうバグを修正しました。 #18340 を修正しました。 #19101 (alesapin)。
  • 旧構文で作成された MergeTree テーブルに対する MODIFY TTL クエリを制限しました。以前はクエリ自体は成功していましたが、実際には何の効果もありませんでした。 #19064 (Anton Popov).
  • Enum 型の引数に対して groupUniqArray が正しい戻り値の型を返すように修正しました。これにより #17875 がクローズされました。#19019alexey-milovidov)。
  • 関数 ignoreLowCardinality 引数と共に使用した際に発生する可能性のあるエラー Expected single dictionary argument for function を修正しました。#14275 に対応します。#19016Nikolai Kochetov)。
  • TinyLog エンジンを持つテーブルへの LowCardinality 列の挿入処理を修正。#18629 を解決。#19010Nikolai Kochetov)。
  • Join は const カラムを実体化しようとしますが、コード側ではそれらが別の場所にあることを前提としています。 #18982 (Nikita Mikhaylov).
  • optimize_move_functions_out_of_any を無効化しました。これは、この最適化が常に正しく動作するとは限らないためです。これにより #18051 がクローズされ、#18973 もクローズされました。#18981alexey-milovidov)。
  • クエリプランの Expression ステップのマージによって発生する可能性のある例外 QueryPipeline stream: different number of columns を修正しました。 #18190 を解決しました。 #18980Nikolai Kochetov)。
  • シャットダウン時にごくまれに発生するデッドロックを修正しました。 #18977 (tavplubix)。
  • ALTER TABLE ... DROP PART 'part_name' クエリがパーティション全体の重複排除ブロックをすべて削除してしまう誤った動作を修正。#18874 の問題を解決。#18969alesapin)。
  • ATTACH PARTITION がミューテーションをリセットするようになりました。 #18804. #18935 (fastio).
  • bitmapOrCardinality に起因して nullptr のデリファレンスが発生し得る不具合を修正しました。これにより #18911 が解決されます。 #18912 (sundyli).
  • clickhouse-local のシャットダウン時に発生しうるハングを修正しました。これにより #18891 が解決されました。 #18893 (alexey-milovidov).
  • 外部データベース(MySQL、ODBC、JDBC)向けのクエリで、x IN table 形式の式が含まれている場合に誤って書き換えられていました。これを修正しました #9756#18876alexey-milovidov)。
  • 単項関数および Nullable 型を扱う If コンビネータを修正。 #18806 (Azat Khuzhin).
  • 設定 network_compression_method がグローバルにデフォルト以外の値に設定されている場合に、非同期分散 INSERT がサーバーによって拒否される可能性がある問題を修正しました。これにより #18741 が修正されます。#18776alexey-milovidov)。
  • Nullable(String) から Nullable(Decimal(P, S)) への CAST 実行時に発生していた Attempt to read after EOF エラーを修正しました。NULL を含み得る文字列から Decimal 型をパースできない場合、関数 CASTNULL を返すようになりました。#7690 を修正。#18718 (Winter Zhang)。
  • ログ関連の軽微な問題を修正。 #18717 (sundyli).
  • 古い構文で作成された ReplicatedMergeTree テーブルにおける空パーツ削除処理を修正。#18582 を修正。#18614Anton Popov)。
  • 以前の「値によって日付のオーバーフローの挙動が異なる」バグを修正。Date 型の値の上限を「2106-02-07」に厳密に制限し、「2106-02-07」を超える日付は値 0 にキャストするようにした。#18565hexiaoting)。
  • MySQL からのレプリケーションにおける FixedString データ型のサポートを追加しました。MySQL からのレプリケーションは実験的な機能です。このパッチは #18450 を修正し、#6556 も併せて修正します。#18553 (awesomeleo)。
  • RIGHT または FULL 結合を含むサブクエリの後で ORDER BY を使用した場合に発生する可能性のある Pipeline stuck エラーを修正。 #18550 (Nikolai Kochetov).
  • 対応する mutation の強制終了後に ALTER クエリがハングする可能性のあるバグを修正しました。thread fuzzer により発見されました。#18518 (alesapin)。
  • parseDateTimeBestEffort 関数において午前0時 (12:00 AM) を適切にサポートします。これにより #18402 を修正します。#18449vladimir-golovchenko)。
  • Nullable(String) 型の引数で toType(...) 関数(toDatetoUInt32 など)を実行した際に発生していた value is too short エラーを修正しました。これらの関数は、パースエラー時には例外をスローするのではなく NULL を返すようになりました。#7673 を修正します。#18445tavplubix)。
  • SHOW TABLES の予期しない挙動を修正しました。#18431 (fastio)。
  • SimpleState コンビネータが互換性のない引数型と戻り値型を生成していた問題を修正。 #18404 (Amos Bird).
  • Set または Join テーブルを並行して使用しつつ system.tables から SELECT を実行した場合に発生しうるレースコンディションを修正。 #18385 (alexey-milovidov)。
  • テーブル system.settings_profile_elements へのデータ投入を修正。この PR は #18231 を解決します。 #18379Vitaly Baranov)。
  • 二段階集約を使用している場合に、Distinct コンビネータ付きの集約関数で発生しうるクラッシュを修正しました。#17682 を修正。#18365Anton Popov)。
  • デュアル IPv4/IPv6 スタックを搭載したマシンで、サーバーから clickhouse-odbc-bridge プロセスに到達できない問題を修正しました。ODBC 辞書の更新が不正な形式のクエリで実行されたり、odbc-bridge プロセスのクラッシュを引き起こしたりする問題を修正しました。おそらく #14489 をクローズします。#18278Denis Glazachev)。
  • アクセス制御: ユーザーがテーブルの列のうち少なくとも 1 つにアクセス権を持っている場合、SELECT count() FROM table を実行できるようになりました。この PR によって #10639 が修正されました。#18233 (Vitaly Baranov)。
  • アクセス制御: SELECT JOIN では、結合される各テーブルに対する SELECT 権限が必要になりました。この PR で #17654 が修正されました。#18232 (Vitaly Baranov)。
  • Enum 型と Int 型のキー比較の不具合を修正。これにより #17989 が解決されます。#18214Amos Bird)。
  • MySQL からのレプリケーション(実験的機能)に対応。#18186 を修正。#16372 を修正。MaterializeMySQL データベースエンジンにおけるユニークキー変換の問題を修正。#18211 (Winter Zhang)。
  • WITH FILLWITH TIES の両方を含むクエリにおける一貫性の問題を修正 #17466#18188hexiaoting)。
  • 最後のカラムでパースエラーが発生した場合に、デフォルト値の行が挿入されてしまう問題を修正。#17712 を修正。#18182Jianmei Zhang)。
  • 設定プロファイルの設定時に発生する Unknown setting profile エラーを修正。 #18167 (tavplubix).
  • クエリ MODIFY COLUMN ... REMOVE TTL で列の TTL が実際には削除されない不具合を修正。#18130 (alesapin)。
  • S3 URL のパース時に発生していた std::out_of_range: basic_string を修正しました。 #18059 (Vladimir Chebotarev).
  • DateTime64Date の比較処理を修正。#13804#11222 を解決。... #18050Vasily Nemkov)。
  • MySQL からのレプリケーション(実験的機能):#15187 を修正、#17912 を修正し、MaterializeMySQL 向けの MySQL プレフィックスインデックスの変換をサポート。 #17944Winter Zhang)。
  • logger.size パラメーターに 2^32 より大きい数値を設定してサーバーログのローテーションを行っていた場合、ログが正しくローテーションされませんでした。この問題は修正されました。#17905 (Alexander Kuzmenkov).
  • クエリに ARRAY JOIN が含まれている場合(つまりクエリは実際には自明ではない場合)に、自明なクエリ最適化によって誤った結果を返す問題がありました。 #17887 (sundyli).
  • topK 集約関数でセグメンテーションフォルトが発生する可能性のあった問題を修正しました。これにより #17404 がクローズされました。 #17845 (Maksim Kita).
  • WAL(実験的機能):in_memory_parts_enable_wal が無効になっている場合は WAL からパーツを復元しないようにしました。 #17802 (detailyang)。
  • 削除可能なテーブルの最大サイズに関する例外メッセージが正しく表示されていませんでした。 #17764 (alexey-milovidov).
  • Distributed テーブルへの挿入時に空き容量が不足している場合に発生する可能性のあったセグメンテーションフォルトを修正しました。 #17737 (tavplubix).
  • ClickHouse が MySQL サーバーへの再接続に失敗する問題を修正しました。 #17681 (Alexander Kazakov).
  • Windows: Windows Subsystem for Linux 上で動作している ClickHouse の Atomic データベースで RENAME クエリを実行すると発生していた Function not implemented エラーを修正しました。#17661 を修正。#17664tavplubix)。
  • pool_size > 1 の場合のレースコンディションにより、ON CLUSTER クエリの実行時にクラスタが循環(クロス)レプリケーションされているかどうかが誤って判定される場合がありました。修正済みです。 #17640 (tavplubix).
  • サーバーがデーモンモードで起動している場合に system.stack_trace テーブルが空になる問題を修正。 #17630 (Amos Bird).
  • MergeTree テーブルで、例外 fmt::v7::format_error をバックグラウンドでログ出力できるようになりました。これにより #17613 が修正されます。 #17615 (alexey-milovidov)。
  • clickhouse-client を対話モードで複数行クエリとともに使用した場合、単一行コメントが誤ってクエリの末尾まで延長されていました。これにより #13654 が修正されました。#17565alexey-milovidov)。
  • 対応するミューテーションが別のレプリカで kill された場合に ALTER クエリがハングしてしまう不具合を修正しました。 #16953 の修正。 #17499alesapin)。
  • ClickHouse による mark キャッシュサイズの過小見積もりが原因で発生していたメモリ計上の問題を修正しました。これは、マークを含む非常に小さなファイルが多数存在する場合に発生することがあります。#17496 (alesapin)。
  • 設定 optimize_redundant_functions_in_order_by が有効なときの ORDER BY の動作を修正しました。 #17471 (Anton Popov).
  • 誤った最適化により DISTINCT の後に重複が発生する可能性があった問題を修正しました。#17294 を修正。 #17296li chengxiang)。 #17439Nikolai Kochetov)。
  • *MergeTree テーブルのバックグラウンドタスクにおける高い CPU 使用率を修正しました。#17416 (tavplubix).
  • LowCardinality 型を含む JOIN テーブルからの読み取り時に発生し得るクラッシュを修正しました。これにより #17228 を解決しました。#17397Nikolai Kochetov)。
  • MySQL からのレプリケーション(実験的機能):#16835 を修正。MySQL の SHOW ステートメントとのヘッダー不一致を修正します。#17366Winter Zhang)。
  • 述語オプティマイザにおける非決定的関数の扱いを修正。これにより #17244 を修正。#17273Winter Zhang)。
  • LIMIT を含む Distributed クエリで発生しうる Unexpected packet Data received from client エラーを修正しました。 #17254 (Azat Khuzhin)。
  • サブクエリに const 列が含まれている場合に set インデックスが無効化されてしまう問題を修正しました。これにより #17246 が解消されました。 #17249 (Amos Bird).
  • clickhouse-copier: 非パーティション化テーブル向けの修正 #15235. #17248 (Qi Chen).
  • S3 ディスク上に保存されたパーツに対して正しく動作しない可能性があった mutation を修正しました(実験的機能)。 #17227 (Pavel Kovalenko).
  • 関数 fuzzBits のバグ修正。関連する issue: #16980#17051hexiaoting)。
  • OFFSET 句のみを含むクエリに対する optimize_distributed_group_by_sharding_key を修正。#16996 (Azat Khuzhin).
  • JOIN を含む Distributed テーブルに対する Merge テーブルからのクエリを修正。 #16993 (Azat Khuzhin).
  • 単調関数を用いた ORDER BY の最適化を修正しました。#16107 の修正。#16956Anton Popov)。
  • 異なるスケールを持つ DateTime64 型同士の誤った比較を修正しました。#16655 ... #16952Vasily 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 ワイヤープロトコル経由の INSERT クエリに対して、影響を受けた行数を返すようにしました。以前の ClickHouse は常に 0 を返していましたが、これを修正しました。これにより #16605 が解決されています。 #16715Winter Zhang)。
  • 最適化された単純な count クエリおよび system テーブルに対して select_sequential_consistency により発生していた一貫性のない動作を修正しました。 #16309 (Hao Chen).
  • 存在しないカラムに対して REPLACE カラムトランスフォーマーが適用された場合はエラーをスローするようにしました。 #16183 (hexiaoting).
  • RIGH|FULL JOIN で等値結合ではない ON 句が指定された場合は、例外をスローするようにしました。 #15162 (Artem Zuikov).

ビルド/テスト/パッケージングの改善

  • ClickHouse バイナリに対する簡易的な整合性チェックを追加しました。これにより、ハードウェア障害(ストレージ媒体のビットロットや RAM 内のビット反転)による破損を検出できるようになります。 #18811 (alexey-milovidov).
  • OpenSSLBoringSSL に変更します。これにより、sanitizer 関連の問題を回避できます。これにより #12490 が修正されます。これにより #17502 が修正されます。これにより #12952 が修正されます。#18129alexey-milovidov)。
  • Sys/V init スクリプトを簡素化しました。Ubuntu 12.04 以前では正常に動作していませんでした。 #17428 (alexey-milovidov).
  • ./clickhouse install スクリプトに複数の改善を行いました。 #17421 (alexey-milovidov).
  • ClickHouse は擬似的な ZooKeeper として振る舞えるようになりました。現在は、ストレージ実装は単純なインメモリのハッシュテーブルにすぎず、サーバーは ZooKeeper プロトコルを部分的にサポートしているだけです。 #16877 (alesapin)。
  • TestKeeperStorage(ZooKeeper のモック)における dead list watch の削除ロジックを修正。 #18065 (alesapin).
  • フォールトインジェクション用の SYSTEM SUSPEND コマンドを追加しました。フェイルオーバーのテストを容易にするために利用できます。これにより #15979 がクローズされます。 #18850 (alexey-milovidov)。
  • ClickHouse が lld とリンクされている場合にビルド ID を生成するようにしました。手元の環境では、lld はデフォルトではビルド ID を生成しないようです。ビルド ID はクラッシュレポートやイントロスペクションに使用されます。 #18808 (alexey-milovidov)。
  • スタイルチェックにおける shellcheck エラーを修正。#18566Ilya Yatsishin)。
  • タイムゾーン情報を2020eに更新。 #18531 (alesapin).
  • codespell の警告を修正。スタイルチェックを複数のパートに分割。スタイルチェック用の Docker イメージを更新。 #18463 (Ilya Yatsishin).
  • ドキュメント内に残ったコンフリクトマーカーを自動的にチェックする機能を追加しました。#18332 (alexey-milovidov)。
  • ステートレステストのフレークテスト検出用に Thread Fuzzer を有効化。#18299 (alesapin)。
  • 非スレッドセーフな関数 strerror を使用しないでください。 #18204 (alexey-milovidov).
  • anchore/scan-action@main ワークフローアクションを更新(デフォルトブランチが master から main に変更されたため)。#18192 (Stig Bakken).
  • clickhouse-test は、タイムアウト付きでデータベースの DROP/CREATE 操作を行うようになりました。 #18098 (alesapin).
  • ステートレステスト向け Pytest フレームワークの実験的サポートを有効化しました。 #17902 (Ivan).
  • これにより、統合テストで最新の Docker デーモンバージョンを使用するようになりました。 #17671 (alesapin)。
  • 公式ビルド、メモリ、CPU、および空きディスク容量に関する情報を、Sentry が有効化されている場合に Sentry へ送信します。Sentry は、ClickHouse の開発者を支援するためのオプトイン機能です。これにより #17279 がクローズされます。#17543alexey-milovidov)。
  • clickhouse-copier のコード内に未初期化の変数がありました。 #17363 (Nikita Mikhaylov)。
  • #173091件の MSan レポート を修正しました。#17344Nikita Mikhaylov)。
  • Arrow Flight ライブラリにおける IPv6 に関する問題を修正しました。詳細はコメントを参照してください。#16664Zhanna)。
  • 一部の libc 関数をプロセスを終了させるトラップに置き換えるライブラリを追加。 #16366 (alexey-milovidov).
  • スタックオーバーフロー発生時にサーバーログに診断情報を出力し、エラーメッセージを clickhouse-client に送信するようにしました。これにより #14840 がクローズされました。#16346alexey-milovidov)。
  • これで、ほぼすべてのステートレス機能テストを並列実行できるようになりました。 #15236 (alesapin).
  • librdkafka の snappy 伸長処理で発生していたデータ破損の不具合を修正しました(問題は gcc10 ビルドでのみ発生していましたが、公式ビルドではすでに clang を使用しているため、少なくとも最近の公式リリースには影響していません)。 #18053 (Azat Khuzhin).
  • サーバーが OOM Killer によって強制終了された場合に、ログにメッセージを出力するようにしました。 #13516 (alexey-milovidov).
  • PODArray: 引数 (nullptr, 0) で memcpy を呼び出さないように修正 (UBSan レポートへの対応)。#18525 を修正します。#18526 (alexey-milovidov).
  • DDLWorker 内での ZooKeeper パスの連結処理をわずかに改善。 #17767 (Bharat Nallan)。
  • デバッグファイルからシンボルを再読み込みできるようにしました。このPRでは build-id に関連する問題も修正しています。 #17637 (Amos Bird)。

2020年の変更履歴