後方互換性を持たない変更
JSON とデータフォーマットの変更
- デフォルトで、JSON フォーマットでの 64 ビット整数のクォートを無効化。 #74079 (Pavel Kruglov).
- JSON で異なる型の値を含む配列について、名前なしの
TupleではなくArray(Dynamic)を推論するように変更。以前の動作を使用するには、設定input_format_json_infer_array_of_dynamic_from_array_of_different_typesを無効にしてください。 #80859 (Pavel Kruglov). - デフォルトで、
Enum型の値を Parquet 出力フォーマットではENUM論理型を持つBYTE_ARRAYとして書き出すように変更。 #84169 (Pavel Kruglov).
ストレージとパーティション化
- Hive パーティション形式での書き込みのサポートを追加し、読み取り実装をリファクタリングしました (Hive パーティションカラムは仮想カラムではなくなりました) 。 #76802 (Arthur Passos).
- MergeTree 設定
write_marks_for_substreams_in_compact_partsをデフォルトで有効化しました。これにより、新しく作成された Compact パーツからのサブカラムの読み取り性能が大幅に向上します。25.5 未満のバージョンのサーバーでは、新しい Compact パーツを読み取れません。 #84171 (Pavel Kruglov). - SummingMergeTree で合計対象として明示的に指定されたカラムに対する
RENAME COLUMNまたはDROP COLUMNを禁止しました。 #81836 をクローズします。 #82821 (Alexey Milovidov).
関数の機能強化
extractKeyValuePairs関数に、新しい引数unexpected_quoting_character_strategyが追加されました。これは、quoting_characterが予期せず見つかった場合の動作を制御します。詳細については、extractKeyValuePairsのドキュメントを参照してください。#80657 (Arthur Passos).- これまでは、
countMatches関数は、patternが空文字列との一致を許可する場合でも、最初の空一致でカウントを停止していました。この問題に対処するため、countMatchesは空一致が発生した際に 1 文字進めて処理を継続するようになりました。従来の動作を維持したい場合は、設定count_matches_stop_at_empty_matchを有効にできます。#81676 (Elmi Ahmadov).
データ型の改善
DecimalからFloat32への変換精度を改善し、DecimalからBFloat16への変換を実装しました。#82660 をクローズしました。#82823 (Alexey Milovidov).
パフォーマンスとリソース管理
- 以前は、
BACKUPクエリ、マージ、ミューテーションでは、ローカル (max_local_read_bandwidth_for_serverおよびmax_local_write_bandwidth_for_server) およびリモート (max_remote_read_network_bandwidth_for_serverおよびmax_remote_write_network_bandwidth_for_server) トラフィックに対するサーバー全体のスロットラーは使用されず、専用のサーバー設定 (max_backup_bandwidth_for_server、max_mutations_bandwidth_for_server、max_merges_bandwidth_for_server) によってのみ帯域が制限されていました。現在は、両方の種類のスロットラーが同時に使用されます。#81753 (Sergei Trifonov). - 新しい設定
cluster_function_process_archive_on_multiple_nodesが追加されました。この設定を true (デフォルト) にすると、クラスター関数でアーカイブを処理する際の性能が向上します。以前のバージョンでアーカイブを含むクラスター関数を使用している場合は、互換性を保ち、25.7+ へのアップグレード時のエラーを回避するため、falseに設定する必要があります。#82355 (Kseniia Sumarokova). - 以前の
concurrent_threads_schedulerのデフォルト値はround_robinでしたが、多数の単一スレッドクエリ (例:INSERT) がある場合には不公平であることが判明しました。この変更により、より安全な代替であるfair_round_robinスケジューラがデフォルトになります。#84747 (Sergei Trifonov). - 遅延マテリアライゼーションは、アナライザなしでの保守を避けるため、アナライザ使用時にのみ有効になります。アナライザなしでは問題が発生する可能性があるためです (たとえば、条件で
indexHint()を使用する場合) 。#83791 (Igor Nikonov).
スキーマとSQL構文
- 挿入可能なカラムを持たないテーブルの作成を禁止。 #81835 (Pervakov Grigorii).
- ドットを含む識別子が複合識別子としてパースされるのを防ぐため、デフォルト式内ではそのような識別子を backticks で囲むことを必須化。 #83162 (Pervakov Grigorii).
- PostgreSQL スタイルのヒアドキュメント構文
$tag$ string contents... $tag$(dollar-quoted 文字列リテラルとも呼ばれる) をサポート。以前のバージョンではタグに対する制約がより緩く、句読点や空白を含む任意の文字を含めることができました。このため、ドル記号で始まる識別子との間でパース上の曖昧さが生じていました。一方、PostgreSQL ではタグに単語文字しか使用できません。この問題を解決するため、ヒアドキュメントのタグに使用できる文字を単語文字のみに制限しました。 #84731 をクローズ。 #84846 (Alexey Milovidov).
セキュリティと権限
SYSTEM RESTART REPLICASは、SHOW TABLES権限のあるデータベース内のレプリカのみを再起動するようになりました。以前は、このクエリにより、Lazy データベースへのアクセス権がなくても、そのデータベース内のテーブルが同時に drop されている最中に、それらのテーブルが起動されていました。#83321 (Alexey Milovidov).- 関数
azureBlobStorage、deltaLakeAzure、icebergAzureは、AZURE権限を正しく検証するよう更新されました。すべてのクラスター対応関数 (-Cluster関数) は、対応する非クラスター版の関数に対して権限を検証するようになりました。権限エラーを防ぐため、-Cluster関数を呼び出すユーザーに適切な特権 (例:GRANT S3 ON *.* TO user) が付与されていることを確認してください。さらに、icebergLocalおよびdeltaLakeLocal関数でも、FILE権限チェックが適用されるようになりました。#84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov
新機能
データ型
- 新しいデータ型
Time([H]HH:MM:SS)およびTime64([H]HH:MM:SS[.fractional])、さらに基本的なキャスト関数と、他のデータ型を操作するための関数が追加されました。レガシー関数ToTimeとの互換性を確保するための設定も追加されました。#81217 (Yarik Briukhovetskyi).
関数
- ビットスライス化された roaring-bitmap 圧縮を基盤とする新しいベクトルデータ構造
NumericIndexedVectorを追加し、構築、分析、要素ごとの算術演算のための 20 以上の関数もあわせて提供します。スパースデータに対する JOIN、フィルター、集計を高速化し、ストレージ使用量を削減できます。#70582 および、VLDB 2024 の T. Xiong と Y. Wang による “Large-Scale Metric Computation in Online Controlled Experiment Platform” 論文 を実装しています。#74193 (FriendLey)。 - 金融関数を追加しました:
financialInternalRateOfReturnExtended(XIRR)、financialInternalRateOfReturn(IRR)、financialNetPresentValueExtended(XNPV)、financialNetPresentValue(NPV)。#81599 (Joanna Hulboj) 。 - 2 つのポリゴンが交差しているかどうかを確認するための地理空間関数
polygonIntersectsCartesianとpolygonIntersectsSphericalを追加しました。#81882 (Paul Lamb) 。 lagおよびleadのウィンドウ関数のサポートを追加しました。#9887 をクローズします。#82108 (Dmitry Novik) 。- sRGB 色空間と OkLCH 色空間の間で色を変換する関数
colorSRGBToOkLCHとcolorOkLCHToSRGBを追加しました。 #83679 (Fgrtue). JSONExtractCaseInsensitive(およびそのほかのJSONExtract系関数) を使って、JSON キーを大文字・小文字を区別せずにルックアップできるようになりました。#83770 (Alistair Evans) 。- 新しい関数
nowInBlock64を追加しました。#84178 (Halersson Paris) 。 - DateTime 値を UUIDv7 に変換する関数
dateTimeToUUIDv7を追加しました。使用例:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))は0198af18-8320-7a7d-abd3-358db23b9d5cを返します。#84319 (samradovich). - 指定した開始タイムスタンプ、終了タイムスタンプ、およびステップで定義される時間グリッドにデータを再サンプリングする集約関数
timeSeriesDerivToGridとtimeSeriesPredictLinearToGridを追加しました。それぞれ、PromQL ライクなderivとpredict_linearを計算します。#84328 (Stephen Chi). timeSeriesRangeおよびtimeSeriesFromGrid関数が追加されました。#85435 (Vitaly Baranov) 。
システムテーブル
- Kafka などのエンジンから届く不正なメッセージを保持するための
system.dead_letter_queueテーブルを追加しました。#68873 (Ilya Golshtein). - ZooKeeper 接続に関する履歴情報を保存する
system.zookeeper_connection_logシステムテーブルを追加しました。#79494 (János Benjamin Antal). - 利用可能なコーデックを確認するための新しいシステムテーブル
system.codecsを追加しました (issue #81525) 。#81600 (Jimmy Aguilar Mena). system.completionsテーブルを導入しました。#81889 をクローズしました。#83833 (|2ustam).
Iceberg と Delta Lake
- Iceberg のスキーマ進化で複雑な型をサポートしました。 #73714 (scanhex12).
insertクエリでの Iceberg への書き込みを導入しました。 #82692 (scanhex12).- Iceberg テーブルエンジンで位置削除をサポートしました。 #83094 (Daniil Ivanik).
- フィールド ID に基づいて Iceberg のデータファイルを読み取れるようになりました。 #83065 を解決しました。 #83653 (scanhex12).
- CREATE 時の Iceberg への書き込み。 #83927 を解決しました。 #83983 (scanhex12).
- Glue カタログへの書き込み。 #84136 (scanhex12).
- Iceberg REST カタログへの書き込み。 #84684 (scanhex12).
- Iceberg のすべての position delete files をデータファイルにマージします。これにより、Iceberg ストレージ内の Parquet ファイルの数とサイズが削減されます。Syntax:
OPTIMIZE TABLE table_name. #85250 (scanhex12). - Iceberg で
DROP TABLEをサポートしました (REST/Glue カタログからの削除と、テーブルに関するメタデータの削除) 。 #85395 (scanhex12). - merge-on-read フォーマットの Iceberg で
ALTER DELETEmutation をサポートしました。 #85549 (scanhex12). - Delta Lake への書き込みをサポートしました。 #79603 を解決しました。 #85564 (Kseniia Sumarokova).
- min-max プルーニングのため、メタデータ (manifest エントリ) に、より多くの Iceberg 統計情報 (カラムサイズ、下限値、上限値) を書き込むようになりました。 #85746 (scanhex12).
- Iceberg で単純な型のカラムの追加/削除/変更をサポートしました。 #85769 (scanhex12).
MergeTree とストレージ
- すべてのテーブルで
_table仮想カラムがサポートされるようになり、Merge 型テーブルに限られなくなりました。#63665 (Xiaozhe Yu)。 Float32およびFloat64型のカラム向けに、非可逆でありながら誤差境界が保証された圧縮コーデックとして SZ3 を追加しました。#67161 (scanhex12)。MergeTreeファミリーのテーブルに対する論理更新のサポートを追加しました。論理更新は、新しい構文UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>で使用できます。また、lightweight_delete_mode = 'lightweight_update'を設定することで有効化できる、論理更新を利用した論理削除の実装も追加しました。#82004 (Anton Popov)。- MergeTree ファミリーのテーブルで
_part_granule_offset仮想カラムをサポートしました。このカラムは、各行が属する granule/mark の、その data part 内における 0 始まりの索引を示します。これにより #79572 に対応しています。#82341 (Amos Bird)。
プロトコルとクライアントのサポート
arrowflightテーブルエンジンを追加し、ArrowFlight RPC プロトコルをサポートしました。#74184 (zakr600).- PostgreSQL プロトコルの
COPYコマンドのサポートを追加しました。#74344 (scanhex12). - mysql プロトコルで C# クライアントをサポートしました。これにより #83992 をクローズします。#84397 (scanhex12).
mysql_portおよびpostgresql_portでセキュアな connection を必須にしました。#82962 (Shaohua Wang).
SQL とクエリ機能
DESCRIBE (SELECT ...)に加えて、DESCRIBE SELECTもサポートしました。#82947 (Yarik Briukhovetskyi).USE DATABASE {name}の記述もサポートしました。#81307 (Yarik Briukhovetskyi).- 並列レプリカでプロジェクションからの読み取りを実装しました。プロジェクションのサポートを有効にするかどうかを制御するため、新しい設定
parallel_replicas_support_projectionが追加されました。実装を簡素化するため、プロジェクションのサポートはparallel_replicas_local_planが有効な場合にのみ有効になります。#82807 (zoomxi).
フォーマット
format_schemaの取得元を定義するformat_schema_source設定を追加しました。#80874 (Tuan Pham Anh).- 新しい出力フォーマット
Hashを追加しました。これは、結果のすべてのカラムと行に対する単一のハッシュ値を計算します。たとえば、データ転送がボトルネックになるユースケースで、結果の「フィンガープリント」を計算するのに役立ちます。例:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashはe5f9e676db098fdb9530d2059d8c23efを返します。#84607 (Robert Schulze).
サーバー設定とワークロード管理
- サーバー設定
cpu_slot_preemptionにより、ワークロードに対するプリエンプティブな CPU スケジューリングが有効になり、ワークロード間で CPU 時間の max-min 公平な配分が保証されます。CPU スロットリング向けの新しいワークロード設定max_cpus、max_cpu_share、max_burst_cpu_secondsが追加されました。#80879 (Sergei Trifonov). - ワークロード設定
max_waiting_queriesがサポートされるようになりました。これはクエリキューのサイズ制限に使用できます。制限に達すると、それ以降のすべてのクエリはSERVER_OVERLOADEDエラーで終了します。#81250 (Oleg Doronin). - 設定されたクエリ数または時間のしきい値に達すると、TCP 接続を切断するようになりました。#68000 を解決します。#81472 (Kenny Sun).
Cloud ストレージ
client_idとtenant_idを使用して認証できるよう、AzureBlobStorageにextra_credentialsを追加しました。#84235 (Pablo Marcos).
Keeper
- Keeper の Multi クエリで任意のウォッチを設定できるようになりました。#84964 (Mikhail Artemenko).
- 部分集計されたメトリクスをサポートしました。#85328 (Mikhail Artemenko).
実験段階の機能
テーブルエンジンとテーブル関数
- Ytsaurusのテーブルエンジンとテーブル関数を追加しました。#77606 (MikhailBurdukov).
テキスト索引の改善
- テキスト索引を検索するための汎用関数
searchAnyとsearchAllを追加しました。 #80641 (Elmi Ahmadov). - テキスト索引で
stringトークナイザーがサポートされるようになりました。 #81752 (Elmi Ahmadov). text索引のデフォルトの粒度値を 64 に変更しました。これにより、内部ベンチマークにおける平均的なテストクエリの想定性能が向上します。 #82162 (Jimmy Aguilar Mena).- 256-bit bitmap は state の outgoing label を順序付きで保持しますが、outgoing state は hash table に現れる順でディスクに保存されます。そのため、ディスクから読み込む際に label が誤った次の state を指してしまうことがありました。 #82783 (Elmi Ahmadov).
- 現在、FST tree は非圧縮のままディスクに保存されます。これにより、ディスクへの書き込み時とディスクからの読み取り時の両方で、性能低下や I/O 帯域の増加を招く可能性があります。 #83093 (Elmi Ahmadov).
機能の成熟度に関する更新
- カタログをベータに移行しました。#85848 (Melvyn Peignon) 。
- 論理更新を experimental からベータに移行しました。#85952 (Anton Popov) 。
パフォーマンス改善
クエリ実行と集計
-If集約関数コンビネーターに対する軽微な最適化。 #78454 (李扬).- メモリ効率の高い集計時に、一部のバケットを順不同で送信できるようにする新しいロジック (設定
enable_producing_buckets_out_of_order_in_aggregationで制御され、デフォルトで有効) を追加しました。一部の集計バケットのマージに他より大幅に時間がかかる場合でも、その間にイニシエーターがより大きい bucket id のバケットをマージできるため、パフォーマンスが向上します。欠点として、メモリ使用量が増える可能性があります (増加は大きくない想定です) 。 #80179 (Nikita Taranov). TOTALSステップ後のパイプラインをマルチスレッド化。 #80331 (UnamedRus).- 集計クエリに
NOT NULLカラムに対する単一のCOUNT()関数しか含まれない場合、ハッシュテーブルのプロービング中に集計ロジック全体が完全にインライン化されます。これにより、集計状態の割り当てや維持が不要になり、メモリ使用量と CPU オーバーヘッドを大幅に削減できます。これは #81982 に部分的に対応するものです。 #82104 (Amos Bird). - 複数の文字列カラムまたは数値カラムで group by する際、シリアライズされた key を列指向で計算するようにしました。 #83884 (李扬).
-Ifコンビネーター向けにaddManyDefaultsを実装。 #83870 (Raúl Marín).
JOIN の最適化
- JOIN の入力 block と出力 block の最小サイズ (行数) を制御する新しい設定
min_joined_block_size_rowsを追加しました (min_joined_block_size_bytesと同様。デフォルトは 65409) 。join algorithm が対応している場合に有効で、小さな block はまとめられます。#81886 (Nikita Taranov). - キーカラムが 1 つだけの典型的なケースで hash map への追加ループを削除し、
HashJoinの性能を最適化しました。また、常にtrue/falseとなる場合のnull_mapとjoin_maskのチェックも省略しました。#82308 (Nikita Taranov). - #82308 の
null_mapとJoinMaskの最適化を、複数の論理和条件を持つ JOIN のケースにも適用しました。あわせて、KnownRowsHolderdata structure も最適化しました。#83041 (Nikita Taranov). - フラグにアクセスするたびに hash を計算しないよう、join フラグには単純な
std::vector<std::atomic_bool>を使用します。#83043 (Nikita Taranov). - hash JOIN のメインループの外で
max_joined_block_rowsを処理するようにしました。ALL JOIN の性能がわずかに向上します。#83216 (Nikolai Kochetov). HashJoinがlazy出力モードを使用する場合、結果カラム用メモリを事前確保しないようにしました。これは特に一致数が少ない場合に非効率です。さらに、JOIN 完了後には一致数を正確に把握できるため、より適切に事前確保できます。#83304 (Nikita Taranov).- 右側が join キーカラムによって関数的に決定される場合 (すべての行の join key 値が一意な場合) 、すべての
LEFT/INNERJOIN は自動的にRightAnyに変換されます。#84010 (Nikita Taranov). Joinモードでのパッチパート適用の性能を改善しました。#85040 (Anton Popov).
分散クエリの改善
- ブロックの圧縮・展開およびシリアライゼーション・デシリアライゼーションを、ネットワーク接続に関連付けられた単一スレッドではなく、パイプラインスレッドにオフロードするオプションを追加しました。これは設定
enable_parallel_blocks_marshallingで制御されます。イニシエーターとリモートノードの間で大量のデータを転送する分散クエリの高速化が期待されます。 #78694 (Nikita Taranov). - 各分片で
INSERT SELECTが独立して実行されるモードでは、並列分散INSERT SELECTがデフォルトで有効になりました。詳細は設定parallel_distributed_insert_selectを参照してください。 #80425 (Igor Nikonov). - ネイティブプロトコルで logs とプロファイルイベントを圧縮するようにしました。100 台以上のレプリカを持つクラスターでは、非圧縮のプロファイルイベントが 1..10 MB/秒 に達し、低速なインターネット接続では進行状況バーの動作が鈍くなります。これにより #82533 を解決します。 #82535 (Alexey Milovidov).
- 各分片で
INSERT SELECTが独立して実行されるモードでは、並列分散INSERT SELECTがデフォルトで有効になりました。詳細は設定parallel_distributed_insert_selectを参照してください。 #83040 (Igor Nikonov). - 並列レプリカの最小タスクサイズの計算を修正しました。 #84752 (Nikita Taranov).
索引の改善
- ベクトル類似度索引を使用するベクトル検索クエリが、ストレージからの読み取り量と CPU 使用率の削減により、より低レイテンシで完了するようになりました。#79103 (Shankar Iyer).
filterPartsByQueryConditionCacheでmerge_tree_min_{rows,bytes}_for_seekを考慮するようにし、索引でフィルタリングを行う他のメソッドと動作をそろえました。#80312 (李扬).- 粒度が高い min-max 索引を先に処理するようにしました。#75381 をクローズしました。#83798 (Maruth Goyal).
columnがArray型ではない場合のhas([c1, c2, ...], column)のような条件でも、bloom filter 索引が使われるようになりました。これにより、この種のクエリの性能が向上し、IN演算子と同程度に効率的になります。#83945 (Doron David).- ファイルサイズの昇順で索引を処理するようにしました。その結果、索引の順序付けでは、minmax 索引とベクトル索引がそれぞれ単純さと選択性の高さから優先され、その後に小さい索引が続きます。minmax/ベクトル索引の内部でも、より小さい索引が優先されます。#84094 (Maruth Goyal).
- 以前は、テキスト索引のデータは複数のセグメントに分割されていました (各セグメントのサイズはデフォルトで 256 MiB でした) 。これによりテキスト索引の構築時のメモリ消費量は抑えられる可能性がありましたが、その一方で必要なディスク容量が増え、クエリ応答時間も長くなっていました。#84590 (Elmi Ahmadov).
サブクエリの最適化
- 同値類を用いて冗長な
JOIN操作を削除することで、相関サブクエリに対して生成される実行計画を最適化しました。すべての相関カラムに等価な式がある場合、query_plan_correlated_subqueries_use_substitution設定が有効であればCROSS JOINは生成されません。 #82435 (Dmitry Novik). - 相関サブクエリが関数
EXISTSの引数として現れる場合、必要なカラムだけを読み取るようにしました。 #82443 (Dmitry Novik).
Azure Blob Storage の改善
azureBlobStorageテーブルエンジンで、可能な場合はマネージド ID の認証トークンを cache して再利用するようになり、スロットリングを回避できるようになりました。 #79860 (Nick Blakely).- Azure Blob Storage 向けの curl HTTP client を poco HTTP client に置き換えました。これらのクライアント向けに、S3 の設定に対応する複数の設定が追加されました。Azure と S3 の両方で、短めの接続 timeout が導入されました。Azure の プロファイルイベント とメトリクスの introspection も改善されました。新しい client はデフォルトで有効になっており、Azure Blob Storage 上のコールドクエリのレイテンシを大幅に改善します。古い
Curlclient に戻すには、azure_sdk_use_native_client=falseを設定してください。 #83294 (alesapin).
ストレージエンジンの改善
- Redis および KeeperMap ストレージで、キーによるフィルタリングを修正しました。 #81833 (Pervakov Grigorii).
ATTACH PARTITIONを実行しても、すべてのキャッシュが削除されることはなくなりました。 #82377 (Alexey Milovidov).- ストレージスナップショットデータの作成中にロックを保持しないようにし、高い同時実行負荷時のロック競合を軽減しました。 #83510 (Duc Canh Le).
- 一時的なパーツの削除には時間がかかることがあり (特に S3 の場合) 、現状では
MergeTreeBackgroundExecutorでグローバルロックを保持したままこれを行っています。接続断によってすべてのテーブルを再起動する必要があり、バックグラウンドタスクの完了を待っている間、テーブルが 1 時間も readonly モードのままになることさえあります。しかし、cancelの呼び出しにこのロックは不要なようです。 #84311 (Alexander Tokmakov).
フォーマットの改善
- 新しい Parquet リーダーの実装。通常は従来より高速で、ページレベルのフィルタ pushdown と
PREWHEREをサポートします。現在は実験的です。有効にするには、設定input_format_parquet_use_native_reader_v3を使用してください。#82789 (Michael Kolupaev). - パースエラーが発生しない場合にシリアライザーを再利用することで、ProtobufSingle 入力フォーマットのパフォーマンスを改善しました。#83613 (Eduard Karacharov).
データ型とシリアライゼーションの最適化
- MergeTree 内の
JSON共有データ向けに新しいシリアライゼーションを実装し、共有データからのJSONサブカラムの読み取り性能を大幅に向上。 #83777 (Pavel Kruglov). - コードを簡素化することで、文字列のデシリアライゼーションを最適化。 #38564 をクローズ。 #84561 (Alexey Milovidov).
パイプラインと実行の改善
- パイプライン構築時に、ポートヘッダーでのメモリコピーを最小限に抑えました。元の PR は heymind によるものです。#83381 (Raúl Marín)。
- パイプライン構築のパフォーマンスを改善しました。#83631 (Raúl Marín)。
- MergeTreeReadersChain::getSampleBlock を最適化しました。#83875 (Raúl Marín)。
- 1行だけを返すために定数を実体化する場合の最適化を行いました。#85071 (Alexey Milovidov)。
メモリとリソースの最適化
- パフォーマンス向上のため、jemalloc の設定を一部調整しました。#81807 (Antonio Andelic).
- 偽共有を減らすため、ProfileEvents のカウンターにアラインメントを追加しました。#82697 (Jiebin Sun).
- CompressedReadBufferBase::readCompressedData で不要な memcpy 呼び出しを削減しました。#83986 (Raúl Marín).
クエリ計画と分析
- QueryTreeHash を高速化。#82617 (Nikolai Kochetov).
ロギングの改善
- 非同期ロギングを導入。#82516 (Raúl Marín).
関数の最適化
- 一時データを削除することで
largestTriangleThreeBucketsを最適化しました。#84479 (Alexey Milovidov). - 多くの文字列処理関数の実装を最適化・簡素化しました。いくつかの関数で誤っていたドキュメントも修正しました。注: String カラムおよび String カラムを含む複合型に対する
byteSizeの出力は、空文字列あたり 9 バイトから 8 バイトに変更されました。これは想定どおりの動作です。#85063 (Alexey Milovidov).
Keeper の改善
- RocksDB の初期読み込みを改善し、Keeper を強化。#83390 (Antonio Andelic) 。
データレイクの改善
- delta-kernel-rsバックエンドでの並列ファイル処理を改善。 #85642 (Azat Khuzhin).
改善
アクセス制御とセキュリティ
- ソースに対する新しいアクセス種別として
READとWRITEを導入し、ソース関連の従来のアクセス種別はすべて非推奨になりました。これまではGRANT S3 ON *.* TO userでしたが、現在はGRANT READ, WRITE ON S3 TO userとなります。これにより、たとえばGRANT READ ON * TO user、GRANT WRITE ON S3 TO userのように、ソースに対するREAD権限とWRITE権限を分離して付与できるようになりました。この機能はaccess_control_improvements.enable_read_write_grants設定で制御され、デフォルトでは無効です。#73659 (pufit). CREATE USERクエリで、ユーザー名にパラメーターを使用できるようにしました。#81387 (Diskein).- コアダンプから機密データを除外するようにしました。AWS ライブラリ互換の
AwsNodumpMemoryManagerと、STL 互換のJemallocNodumpSTLAllocatorという 2 つのアロケータを追加しました。どちらも Jemalloc アロケータのラッパーです。これらは Jemalloc の extent hooks と madvise を使用して、メモリページを「ダンプしない」ようにマークします。S3 の認証情報、ユーザーの認証情報、および一部のクエリデータで使用されます。#82441 (Miсhael Stetsyuk). - 一時ユーザーが作成したビューは、実際のユーザーのコピーを保持するようになり、一時ユーザーが削除された後も無効化されなくなりました。#84763 (pufit).
- 外部認証の forward_headers を大文字と小文字を区別せずに照合するようにしました。#84737 (ingodwerust).
GRANT READ/WRITEのソースタイプとGRANT TABLE ENGINEのテーブルエンジンを判別するため、system.grantsにparameterカラムを追加しました。#85643 (MikhailBurdukov).
バックアップとリストア
- PostgreSQL、MySQL、DataLake データベースのバックアップをサポートしました。こうしたデータベースのバックアップでは、内部のデータは保存されず、定義のみが保存されます。#79982 (Nikolay Degterinsky).
- バックアップファイルの書き込みに関するすべてのログメッセージを TRACE レベルに設定しました。#82907 (Hans Krutzer).
- バックアップおよびリストア操作中に使用される S3 の再試行バックオフ戦略を設定するため、
backup_restore_s3_retry_initial_backoff_ms、backup_restore_s3_retry_max_backoff_ms、backup_restore_s3_retry_jitter_factorを導入しました。#84421 (Julia Kartseva). SlowDownなどのエラーによって発生する再試行ストーム時の S3 への負荷を軽減するため、新しいbackup_slow_all_threads_after_retryable_s3_error設定を導入しました。1 件でも再試行可能なエラーが検出されると、すべてのスレッドを低速化します。#84854 (Julia Kartseva).
データ整合性と検証
- コミット直前に、パーツの
checksum.txtファイルの整合性を検証するようにしました。#76625 (Sema Checherinda). - 現在未完了のデータミューテーションの影響を受けているカラムの名前を変更することになる場合、
RENAME COLUMNalter mutation を開始できないようにしました。#81823 (Mikhail Artemenko). - ミューテーションのスナップショットが、可視パーツのスナップショットから構築されるようになりました。スナップショットで使用されるミューテーションカウンターも、含まれるミューテーションに基づいて再計算されます。#82945 (Mikhail Artemenko).
- パーツのプレフィックスと接尾辞を解析する機能に加え、定数でないカラムに対するカバレッジを確認する機能を追加しました。#83377 (Mikhail Artemenko).
Iceberg テーブルエンジン
- Iceberg テーブルエンジンで position delete をサポートしました。 #80237 (YanghongZhong).
- ClickHouse で、Iceberg の圧縮された
metadata.jsonファイルをサポートするようになりました。 #70874 を修正しました。 #81451 (alesapin). - 複合型でのフィールド ID による Iceberg の読み取りを修正しました。 #84821 (scanhex12).
- pyiceberg から読み取れる Iceberg への書き込みをサポートしました。 #84466 (scanhex12).
- データレイクのテーブルエンジンにスナップショットバージョンを追加しました。 #84659 (Pete Hampton).
- Iceberg で version-hint ファイルの書き込みをサポートしました。これにより #85097 はクローズされます。 #85130 (scanhex12).
iceberg_metadata_compression_method設定で、圧縮された.metadata.jsonファイルをサポートしました。ClickHouse のすべての圧縮方式に対応しています。これにより #84895 はクローズされます。 #85196 (scanhex12).- Iceberg の positional delete ファイルのメモリ使用量を最適化しました。すべての delete ファイルのデータをメモリに読み込む代わりに、Parquet の delete ファイルでは現在の row-group のみを RAM に保持します。これにより、大きな positional delete ファイルを扱う際のメモリ消費を大幅に削減できます。 #85329 (scanhex12).
- 各 data file の object を明示的に保持しなくても、Iceberg テーブルから object を非同期に反復処理できるようにしました。 #85369 (Daniil Ivanik).
- Iceberg の equality delete をサポートしました。 #85843 (Han Fei).
DeltaLake テーブルエンジン
DeltaLakeテーブルエンジンを改善: delta-kernel-rs にはExpressionVisitorAPI があり、この PR で実装され、パーティションカラム式の変換に適用されました。これにより、これまでコード内で使われていた delta-kernel-rs の古い非推奨の方法が置き換えられます。今後、このExpressionVisitorによって、統計ベースのプルーニングや Delta Lake 固有の機能も実装できるようになります。さらに、この変更はDeltaLakeClusterテーブルエンジンでパーティションプルーニングをサポートすることも目的としています (パース済み式の結果である ActionsDAG はデータパスとともにイニシエーターからシリアライズして送信されます。これは、プルーニングに必要なこの種の情報が、データファイル一覧の取得時に得られるメタ情報としてしか存在せず、その一覧取得はイニシエーターでしか行われない一方で、その情報自体は各読み取りサーバー上のデータに適用する必要があるためです) 。 #81136 (Kseniia Sumarokova).- データレイクのクラスターテーブル関数でのパーティションプルーニングを修正。 #82131 (Kseniia Sumarokova).
DeltaLakeClusterテーブル関数でパーティション化されたデータの読み取りを修正。この PR ではクラスター関数のプロトコルバージョンを引き上げ、イニシエーターからレプリカへ追加情報を送信できるようにしました。この追加情報には、パーティションカラム (および今後は generated columns など) をパースするために必要な delta-kernel の変換式が含まれます。 #82132 (Kseniia Sumarokova).- database Datalake が、よりわかりやすい例外を返すようになりました。#81211 を修正。 #82304 (alesapin).
- storage
DeltaLakeに、内部delta-kernel-rsフィルタリング (統計およびパーティションプルーニング) を実装。 #84006 (Kseniia Sumarokova). - デバッグ時には test log level であっても expression visitor のログが冗長になりすぎる場合があるため、それを無効化する設定
delta_lake_enable_expression_visitor_loggingを追加。 #84315 (Kseniia Sumarokova). - テーブルエンジン
DeltaLakeで特定の スナップショットバージョン を読み取れるようにする設定delta_lake_snapshot_versionを追加。 #85295 (Kseniia Sumarokova).
データレイク インテグレーション
- 非同期リクエストにより、データカタログでのテーブル一覧表示を高速化。 #81084 (alesapin).
- Glue カタログで
TimestampTZをサポート。これにより #81654 をクローズ。 #83132 (scanhex12). - FormatParserGroup を 2 つの独立した構造体に分割。1 つ目は共有のコンピュートおよび I/O リソース、2 つ目は共有のフィルターリソース (filter ActionDag、KeyCondition) を担当します。これにより、異なるスレッド間でこれらの構造体をより柔軟に共有できるようになりました。 #83997 (Daniil Ivanik).
- Azure 設定に不足していた
partition_columns_in_data_fileを追加。 #85373 (Arthur Passos). - system.tables へのデータレイクのテーブル追加を制御する
show_data_lake_catalogs_in_system_tablesフラグを追加し、#85384 を解決。 #85411 (Smita Kulkarni).
S3 とオブジェクトストレージ
s3_plain_rewritableにmoveFileおよびreplaceFileメソッドを実装し、データベース用のディスクとしてサポートできるようにしました。 #79424 (Tuan Pham Anh).max_remote_read_network_bandwidth_for_serverおよびmax_remote_write_network_bandwidth_for_serverのスロットリングに関する問題を回避するため、S3 の読み取りおよび書き込みリクエストは、S3 リクエスト全体ではなく HTTP ソケットレベルでスロットリングされるようになりました。 #81837 (Sergei Trifonov).- この PR では、
s3_slow_all_threads_after_network_error設定が有効な場合に、S3 の再試行メカニズムへジッターを導入しました。 #81849 (zoomxi). - 明示的に指定した IAM role を使用する AWS S3 認証を実装しました。GCS 向けの OAuth も実装しました。これらの機能は最近まで ClickHouse Cloud でのみ利用可能でしたが、現在はオープンソース化されています。さらに、オブジェクトストレージ向けの接続パラメータのシリアライゼーションなど、一部のインターフェイスも同期しました。 #84011 (Alexey Milovidov).
- 外部集約/ソートに対して、任意のストレージポリシー (つまり S3 などのオブジェクトストレージ) を使用できるようにしました。 #84734 (Azat Khuzhin).
- 削除されたすべてのオブジェクトを収集し、オブジェクトストレージに対する削除操作を 1 回で実行するようにしました。 #85316 (Mikhail Artemenko).
S3Queue テーブルエンジン
{uuid}などのマクロを、S3Queue テーブルエンジンのkeeper_path設定で使用できるようになりました。#82463 (Nikolay Degterinsky).- S3Queue テーブルエンジンのテーブルでストリーミングを無効化する新しいサーバー設定
s3queue_disable_streamingを追加しました。この設定はサーバーを再起動せずに変更できます。#82515 (Kseniia Sumarokova). system.s3queue_logにcommit_time、commit_idカラムを追加しました。#83016 (Kseniia Sumarokova).- s3queue のシャットダウン処理に関するログを追加しました。#83163 (Kseniia Sumarokova).
- サーバーのシャットダウン時に、サーバー上のテーブルを停止する前に S3(Azure/etc)Queue のストリーミングを停止するようにしました。#83530 (Kseniia Sumarokova).
S3Queueのテーブルレベルで mv の insert settings を変更できるようにしました。新しいS3Queueレベル設定min_insert_block_size_rows_for_materialized_viewsとmin_insert_block_size_bytes_for_materialized_viewsを追加しました。デフォルトでは profile レベル設定が使用され、S3Queueレベル設定でそれらを上書きできます。#83971 (Kseniia Sumarokova).- S3Queue の ordered mode を修正しました。シャットダウンが呼び出された場合は、より早く終了します。#84463 (Kseniia Sumarokova).
Kafka インテグレーション
- StorageKafka2 で、以前にコミットされたオフセットに依存しないよう、消費済みメッセージを手動でカウントするようにしました。 #81662 (János Benjamin Antal).
StorageKafka2をsystem.kafka_consumersに統合しました。 #82652 (János Benjamin Antal).
ClickHouse Keeper の改善
- Keeper の改善: バックグラウンドスレッドで変更ログファイルをディスク間で移動できるようにしました。従来は、変更ログを別のディスクに移動すると、移動が完了するまで Keeper 全体がブロックされていました。そのため、移動に長時間かかる場合 (たとえば S3 ディスクへの移動) には、パフォーマンスが低下していました。 #82485 (Antonio Andelic).
- Keeper の改善: 新しい config
keeper_server.cleanup_old_and_ignore_new_aclを追加しました。これを有効にすると、すべてのノードの ACL がクリアされ、新しいリクエストの ACL は無視されます。ノードから ACL を完全に削除することが目的であれば、新しい snapshot が作成されるまで、この config を有効のままにしておくことが重要です。 #82496 (Antonio Andelic). - Keeper の改善: world:anyone ACL に対する個別の権限をサポートしました。 #82755 (Antonio Andelic).
- config で、パスごとに追加の Keeper ACL を指定できるようにしました。特定のパスに追加 ACL を設定する場合は、config の
zookeeper.path_aclsで定義します。 #82898 (Antonio Andelic). - ソフトメモリ制限により Keeper が書き込みを拒否したときの ProfileEvent を追加しました。 #82963 (Xander Garbett).
- 新しい種類のリクエストを有効にする
create_if_not_exists、check_not_exists、remove_recursiveの feature flags を、Keeper でデフォルトで有効にしました。 #83488 (Antonio Andelic). apply_to_childrenconfig を使用して、特定の Keeper ノードに追加 ACL を適用できるようにしました。 #84137 (Antonio Andelic).- KeeperClient に
get_aclコマンドを追加しました。 #84641 (Antonio Andelic). - Keeper に 4LW の
lgrqを追加し、受信したリクエストのログ出力を切り替えられるようにしました。 #84719 (Antonio Andelic). - Keeper のストレージロックの競合を軽減しました。 #84732 (Antonio Andelic).
encrypt_decryptツールが、暗号化された ZooKeeper 接続をサポートするようになりました。 #84764 (Roman Vasin).keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdおよびkeeper_server.coordination_settings.commit_logs_cache_entry_count_thresholdを使用して、Keeper のログエントリ cache サイズをエントリ数で制限できるようにしました。 #84877 (Antonio Andelic).
JSON 型と Dynamic 型
- パーツ内に格納されているすべてのサブストリームを追跡するため、wide パーツに
columns_substreams.txtファイルを追加しました。これにより、JSON 型および Dynamic 型の動的ストリームを追跡できるようになり、動的ストリームの一覧を取得するためにこれらのカラムのサンプルを読み取る必要がなくなります (たとえば、カラムサイズの計算時) 。また、すべての動的ストリームがsystem.parts_columnsに反映されるようになりました。 #81091 (Pavel Kruglov). - JSON カラムおよび Dynamic カラムで
ALTER UPDATEを使用できるようになりました。 #82419 (Pavel Kruglov). - JSON 型内で
Time型およびTime64型を使用できるようになりました。 #83784 (Yarik Briukhovetskyi). - JSON 型のパース時に JSON のキー内のドットをエスケープする設定
json_type_escape_dots_in_keysを追加しました。この設定はデフォルトで無効です。 #84207 (Pavel Kruglov).
Parquet および ORC フォーマット
- ORC の圧縮ブロックサイズを設定するための設定を導入し、Spark や Hive との整合性を保つため、デフォルト値を 64KB から 256KB に変更しました。 #80602 (李扬).
- spec の規定に従い、Parquet の enum をバイト配列として書き込めるようにしました。詳細は後ほど追記します。 #81090 (Arthur Passos).
- GeoParquet を出力フォーマットとして書き込めるようにしました。 #81784 (scanhex12).
分散クエリと並列レプリカ
- 新しい設定
enable_add_distinct_to_in_subqueriesが導入されました。有効にすると、ClickHouse は分散クエリの IN 句内のサブクエリに自動的に DISTINCT を追加します。これにより、分片間で転送される一時テーブルのサイズを大幅に削減でき、ネットワーク効率の向上が見込めます。注: これはトレードオフです。ネットワーク転送量は減る一方で、各ノードで追加のマージ (重複排除) 処理が必要になります。ネットワーク転送がボトルネックで、マージのコストを許容できる場合にこの設定を有効にしてください。 #81908 (fhw12345). address_expression引数でクラスターが指定されている場合、remote-()テーブル関数で並列レプリカをサポートするようになりました。あわせて、#73295 も修正されています。 #82904 (Igor Nikonov).- 並列レプリカを使用する JOIN で、join の論理ステップを使用するようになりました。並列レプリカを使用する JOIN クエリで問題が発生した場合は、
SET query_plan_use_new_logical_join_step=0を試したうえで、issue を報告してください。 #83801 (Vladimir Cherkasov).
設定と構成
allow_experimental_join_condition設定を廃止としてマークしました。#80566 (Vladimir Cherkasov).- 全体およびユーザーごとのネットワークスロットラーはリセットされなくなり、これにより
max_network_bandwidth_for_all_usersとmax_network_bandwidth_for_all_usersの制限を超えないことが保証されます。#81729 (Sergei Trifonov). optimize_rewrite_regexp_functions設定 (デフォルトで有効) を導入しました。これにより、特定の正規表現パターンが検出された場合、オプティマイザが一部のreplaceRegexpAll、replaceRegexpOne、extractの呼び出しを、より単純で効率的な形式に書き換えられるようになります。 (issue #81981) 。#81992 (Amos Bird).- TCP サーバーのキュー (デフォルトは 64) を、listen_backlog (デフォルトは 4096) に基づいて調整しました。#82045 (Azat Khuzhin).
- サーバーを再起動せずに
max_local_read_bandwidth_for_serverとmax_local_write_bandwidth_for_serverを動的に再読み込みできるようにしました。#82083 (Kai Zhu). - ベクトル類似度索引を使用するために有効化が必要な
enable_vector_similarity_index設定を導入しました。既存のallow_experimental_vector_similarity_index設定は現在廃止されています。必要な場合は引き続き使用できます。#83459 (Robert Schulze). - サイズの大きいカラムを含む JOIN のメモリ使用量を制限するため、
max_joined_block_size_rowsに加えてmax_joined_block_size_bytesを追加しました。#83869 (Nikolai Kochetov). - cluster_function_process_archive_on_multiple_nodes の互換性を修正しました。#83968 (Kseniia Sumarokova).
- 相関サブクエリのサポートをデフォルトで有効にしました。#85107 (Dmitry Novik).
- DatabaseReplicatedSettings のデフォルト値を定義する
database_replicated設定を追加しました。この設定が Replicated DB の CREATE クエリに存在しない場合は、この設定の値が使用されます。#85127 (Tuan Pham Anh). s3またはs3Clusterテーブルエンジン/関数で、キーと値形式の引数を使用できるようにしました。たとえばs3('url', CSV, structure = 'a Int32', compression_method = 'gzip')のように指定できます。#85134 (Kseniia Sumarokova).- 非相関の
EXISTSをスカラーサブクエリとして実行するようにしました。これにより、スカラーサブクエリキャッシュを使用して結果を定数畳み込みできるため、索引に有用です。互換性のため、新しい設定execute_exists_as_scalar_subquery=1を追加しました。#85481 (Nikolai Kochetov). - 複合識別子の解決について、より多くのケースをサポートしました。特に、
ARRAY JOINと古いアナライザとの互換性が向上します。古い動作を維持するための新しい設定analyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedを導入しました。#85492 (Nikolai Kochetov).
システムテーブルとオブザーバビリティ
- ClickHouse の非同期メトリクスに pressure メトリクスを追加しました。 #80779 (Xander Garbett).
- mark cache からのエビクションを追跡するためのメトリクス
MarkCacheEvictedBytes、MarkCacheEvictedMarks、MarkCacheEvictedFilesを追加しました。 (issue #60989). #80799 (Shivji Kumar Jha). system.formatsテーブルに、HTTP の content type や schema inference の機能など、フォーマットに関する拡張情報が含まれるようになりました。 #81505 (Alexey Milovidov).TRUNCATE TABLE system.warningsを使ってsystem.warningsテーブル内のすべての警告を消去できるようになりました。 #82087 (Vladimir Cherkasov).system.licensesに Rust crate のライセンス一覧を追加しました。 #82440 (Raúl Marín).- たとえば
(a < 1 and a > 0) or b = 3のような複雑な CNF/DNF を、統計に基づいて推定するようにしました。 #82663 (Han Fei). - 場合によっては、メトリクスに複数の次元が必要です。たとえば、単一のカウンターにするのではなく、失敗した merge や mutation をエラーコードごとにカウントするケースです。 #83030 (Miсhael Stetsyuk).
MergePartsエントリ向けの part_log profile events に、プロセス resource メトリクス (UserTimeMicroseconds、SystemTimeMicroseconds、RealTimeMicrosecondsなど) を追加しました。 #83460 (Vladimir Cherkasov).- Cgroup レベルのメトリクスとシステム全体のメトリクスが、まとめて報告されるようになりました。Cgroup レベルのメトリクスは
CGroup<Metric>、OS レベルのメトリクス (procfsから収集) はOS<Metric>という名前になります。 #84317 (Nikita Taranov). - 同時実行の bounded queue のサイズを監視するための次元メトリクスを追加しました。オブザーバビリティ向上のため、queue type と instance ID のラベルが付与されます。 #84675 (Miсhael Stetsyuk).
system.columnsテーブルで、既存のnameカラムの alias としてcolumnが利用できるようになりました。 #84695 (Yunchi Pang).system.errorsに format string カラムを追加しました。このカラムは、アラートルールで同じ error type ごとにグループ化するために必要です。 #84776 (Miсhael Stetsyuk).- Async Log の制限を調整可能にし、イントロスペクションを追加しました。 #85105 (Raúl Marín).
system.columnsのテーブルカラムサイズを取得する際にUNKNOWN_DATABASEを無視するようにしました。 #85632 (Azat Khuzhin).
データベース エンジン
システムおよび内部の改善
- DatabaseCatalog にテーブル UUID を手動で追加することで、読み取り専用のリモートディスクを持つデータベースをアタッチできない問題を修正しました。 #82670 (Tuan Pham Anh).
distributed_ddl_output_mode='*_only_active'における DDL task の処理を改善し、レプリケーションラグがmax_replication_lag_to_enqueueを超えている新規または復旧済みのレプリカを待機しないようにしました。これにより、初期化または復旧後に新しいレプリカがアクティブになっても、大量のレプリケーションログが蓄積している場合にDDL task is not finished on some hostsエラーを回避しやすくなります。あわせて、レプリケーションログがmax_replication_lag_to_enqueueを下回るまで待機するSYSTEM SYNC DATABASE REPLICA STRICTクエリも実装しました。 #83302 (Alexander Tokmakov).- SystemLogs のシャットダウン順序を変更し、通常のテーブルの後、システムテーブルの前に実行されるようにしました (従来は通常のテーブルの前) 。 #83134 (Kseniia Sumarokova).
- Replicated database の設定向けに server setting
logs_to_keepを追加し、Replicated databases に対するデフォルトのlogs_to_keepparameter を設定できるようにしました。小さい値にすると ZooKeeper ノード数を削減でき (特にデータベース数が多い場合に有効) 、大きい値にすると長時間停止していたレプリカでも追いつけるようになります。 #84183 (Alexey Khatskevich). - Replicated database setting
max_retries_before_automatic_recoveryのデフォルト値を 10 に変更し、一部のケースでより高速に復旧できるようにしました。 #84369 (Alexander Tokmakov). - 古い一時テーブルの作成とリネームをスキップすることで、Replicated databases における追記型ではないリフレッシャブルmaterialized view の DDL 操作を最適化しました。 #84858 (Tuan Pham Anh).
レプリケーションと同期
SystemAndInternalImprovements
- ZooKeeper の接続問題が発生した際にテーブル作成を再試行するよう
SYSTEM RESTART REPLICAを改善し、テーブルが失われるのを防ぐようにしました。#82616 (Nikolay Degterinsky). - StorageID の取得から
IDatabase::alterTableの呼び出しまでの間にテーブルが EXCHANGE された場合でも不正なテーブル定義を防げるよう、ReplicatedMergeTree::executeMetadataAlterに UUID の検証を追加しました。#82666 (Nikolay Degterinsky). - 実験的なゼロコピー レプリケーションに関連する、実験的な
send_metadataロジックを削除しました。このコードは一度も使われたことがなく、サポートもされておらず、おそらく壊れていたうえ、その機能を検証するテストもありませんでした。#82508 (alesapin). remote_fs_zero_copy_zookeeper_pathでのマクロ展開をサポートしました。#85437 (Mikhail Koviazin).
関数と式
- 関数
addressToSymbolとsystem.symbolsテーブルでは、仮想メモリアドレスではなくファイルオフセットが使用されるようになりました。#81896 (Alexey Milovidov). - 名前付きタプルのスーパータイプを導出する際、要素名を保持するようにしました。 #81345 (lgbo) 。
- 異なるウィンドウ間で、同じカラムに対して異なる照合順序を混在して使用できるようにしました。#82877 (Yakov Olkhovskiy) 。
- 型をwkbフォーマットで書き出す関数を追加しました。#82935 (scanhex12) 。
TimeとTime64で、MM:SS、M:SS、SS、または S 形式を解析できるようになりました。#83299 (Yarik Briukhovetskyi) 。- 関数
reinterpret()が、Tが固定サイズのデータ型であるArray(T)への変換をサポートするようになりました (issue #82621) 。#83399 (Shankar Iyer) 。 structureToProtobufSchemaおよびstructureToCapnProtoSchema関数を修正し、改行文字ではなくゼロ終端バイトを正しく追加するようにしました。これにより、出力で改行が欠落する問題や、ゼロバイトに依存する関数 (logTrace、demangle、extractURLParameter、toStringCutToZero、encrypt/decryptなど) で発生する可能性のあるバッファオーバーフローを防止します。#85062 をクローズします。#85063 (Alexey Milovidov).- ゼロバイトを含む文字列を処理できるよう、
regexp_treeDictionary のレイアウトを修正しました。#85063 (Alexey Milovidov) 。 formatRowNoNewline関数について、Valuesフォーマットまたは行末に改行がない任意のフォーマットで呼び出した際に、出力の最後の文字が誤って切り落とされる問題を修正しました。 #85063 (Alexey Milovidov).- まれな状況でメモリリークを引き起こす可能性があった、
stem関数の例外安全性の不具合を修正しました。#85063 (Alexey Milovidov) 。 - 前のブロック内の文字列が単語文字で終わっている場合でも、
FixedString引数に対してinitcap関数が文字列先頭の単語の開始を正しく認識できるよう修正しました。#85063 (Alexey Milovidov) 。 - Apache
ORCフォーマットで、未初期化メモリが露出するおそれのあるセキュリティ脆弱性を修正しました。#85063 (Alexey Milovidov) 。 replaceRegexpAllおよびその alias であるREGEXP_REPLACEの動作を変更し、直前の一致で文字列全体が処理されていた場合でも、文字列末尾での空一致を許可するようにしました (例:^a*|a*$または^|.*) 。これにより、JavaScript、Perl、Python、PHP、Ruby のセマンティクスに合わせつつ、PostgreSQL とは異なる動作になります。#85063 (Alexey Milovidov).- 多くの文字列処理関数の実装を最適化・簡素化しました。いくつかの関数に関する誤ったドキュメントを修正しました。注意: StringカラムおよびStringカラムを含む複合型に対する
byteSizeの出力は、空文字列あたり 9 バイトから 8 バイトに変更されました。これは想定どおりの動作です。#85063 (Alexey Milovidov). - 関数
timeSeries*ToGrid()で step にゼロを指定できるようにしました。これは https://github.com/ClickHouse/ClickHouse/pull/75036 の#3の一部です。#85390 (Vitaly Baranov). - 関数
nestedが内側の配列をサポートするようになりました。 #85719 (Nikolai Kochetov).
MergeTree の改善
- オンザフライで更新されたカラムやパッチパートに依存するスキッピング索引を、より細かい粒度で無効化できるようにしました。これにより、スキッピング索引はオンザフライミューテーションまたはパッチパートの影響を受けたパーツでのみ無効化され、従来のようにすべてのパーツで無効化されることはなくなりました。#84241 (Anton Popov).
- MergeTree setting
search_orphaned_parts_drivesを追加し、たとえばローカルメタデータを持つディスクごとに、パーツを探索する範囲を制限できるようにしました。#84710 (Ilya Golshtein). WHEREに対するread_in_order_use_virtual_rowの不足していたサポートを追加しました。これにより、フィルターがPREWHEREに完全にプッシュダウンされていないクエリで、追加のパーツの読み取りをスキップできるようになります。#84835 (Nikolai Kochetov).- MergeTree における「compact」な Variant 判別子のシリアライゼーションの使用を修正しました。以前は、使用可能なケースでも一部で使われていませんでした。#84141 (Pavel Kruglov).
- パッチパート内の非圧縮バイト総量に対する制限 (テーブル設定
max_uncompressed_bytes_in_patches) を追加しました。これにより、論理更新後のSELECTクエリの大幅な遅延を防ぎ、論理更新の不適切な使用も抑制します。#85641 (Anton Popov).
キャッシュとメモリ管理
- ファイルシステムキャッシュの論理エラー「0 バイトなのに、範囲が完了していない」を修正しました。#81868 (Kseniia Sumarokova).
- キャッシュの局所性を改善するため、rendezvous hashing を追加しました。#82511 (Anton Ivashkin).
- ファイルシステムキャッシュの動的リサイズ機能をリファクタリングしました。introspection 用のログも追加しました。#82556 (Kseniia Sumarokova).
- 実行可能なユーザー定義関数におけるクエリのメモリ追跡オーバーヘッドを削減しました。#83929 (Eduard Karacharov).
- 外部ライブラリによるすべての割り当てが ClickHouse の memory tracker から見えるようになり、適切に計上されるようになりました。その結果、一部のクエリでは報告されるメモリ使用量が「増加」したり、
MEMORY_LIMIT_EXCEEDEDで失敗したりする可能性があります。#84082 (Nikita Mikhaylov). - 暗号化された named collections 向けの encrypted_buffer で、必要最小限のメモリだけを割り当てるようにしました。#84432 (Pablo Marcos).
ベクトル類似度索引
NumericIndexedVectorでユーザーがnanとinfを使用できないようにしました。#82239 の修正に加え、関連する追加修正も含まれています。#82681 (Raufs Dunamalijevs).- ベクトル類似度索引が二値量子化をサポートするようになりました。二値量子化により、メモリ消費量が大幅に削減され、ベクトル索引の構築も高速化されます (距離計算が高速になるため) 。また、既存の設定
vector_search_postfilter_multiplierは廃止され、より汎用的な設定vector_search_index_fetch_multiplierに置き換えられました。#85024 (Shankar Iyer). - ベクトル類似度索引を使用した近似ベクトル検索が GA になりました。#85888 (Robert Schulze).
エラー処理とメッセージ
Connectionヘッダーは、ヘッダーの最後に送信されるようになりました。接続を維持すべきかどうかが判明した時点で送信されます。 #81951 (Sema Checherinda).- 以前のバージョンでは、aggregate function の state と IPv4 の乗算で、適切なエラーコードではなく論理エラーが発生していました。 #82817 をクローズします。 #82818 (Alexey Milovidov).
AsynchronousMetricsのエラー処理を改善しました。/sys/blockディレクトリが存在していてもアクセスできない場合、サーバーはブロックデバイスの監視を行わずに起動します。 #79229 をクローズします。 #83115 (Alexey Milovidov).- 不正な SELECT を含む materialized view に対する
INSERTで、依存関係のチェックが誤っていました。そのため、ユーザーには明確な説明を伴う意味のあるエラーではなく、分かりにくいstd::exceptionが返されることがありました。現在は修正されています。修正対象: #82889。 #83190 (Nikita Mikhaylov). - 例外メッセージに、式 actions の非常に長い説明を出力しないようにしました。 #83164 をクローズします。 #83350 (Alexey Milovidov).
- Storage のシャットダウン時には、
getStatusがErrorCodes::ABORTED例外を throw します。以前はこれにより SELECT クエリが失敗していました。現在はErrorCodes::ABORTED例外を捕捉し、意図的に無視するようになりました。 #83435 (Miсhael Stetsyuk). - projections の読み込みおよび追加に関する特定の状況で、例外メッセージが読みやすくなりました。 #83728 (Robert Schulze).
- クローズされた接続から読み取らないよう、EOF を確認する前に接続がキャンセルされているかどうかを確認するようにしました。 #83893 を修正します。 #84227 (Raufs Dunamalijevs).
- 内部チェックを簡素化し、クライアント接続に対するサーバーのシャットダウン処理を改善しました。 #84312 (Raufs Dunamalijevs).
- UDF 実行中の低レベルエラーでは、以前のように異なるエラーコードが返されるのではなく、
UDF_EXECUTION_FAILEDエラーコードで失敗するようになりました。 #84547 (Xu Jia).
SQL フォーマットの改善
CREATE DICTIONARYのフォーマットの不整合を修正しました。#82105 をクローズします。#82829 (Alexey Milovidov).materialize関数を含む場合のTTLのフォーマットの不整合を修正しました。#82828 をクローズします。#82831 (Alexey Milovidov).- INTO OUTFILE などの出力オプションを含む場合の、サブクエリ内の
EXPLAIN ASTのフォーマットの不整合を修正しました。#82826 をクローズします。#82840 (Alexey Milovidov). - 別名が許可されていないコンテキストで、別名付きのかっこで囲まれた式のフォーマットの不整合を修正しました。#82836 をクローズします。#82837 をクローズします。#82867 (Alexey Milovidov).
- クエリパラメータを使用する CREATE USER のフォーマットを修正しました (例:
CREATE USER {username:Identifier} IDENTIFIED WITH no_password) 。#84376 (Azat Khuzhin). - パラメータを持つカラム (たとえば Decimal(8)) の後に続く、CREATE DICTIONARY クエリのカラム定義内の末尾カンマのパースを修正しました。#85586 をクローズします。#85653 (Nikolay Degterinsky).
External integrations
- named collections を使用する際の ODBC と JDBC のパラメータ名を統一しました。#83410 (Andrey Zvonov).
- MongoDB: String から数値型への暗黙的なパース。従来は、ClickHouseテーブルの数値カラムに対して MongoDB ソースから String 値を受け取ると、例外がスローされていました。現在は、エンジンがその String から数値を自動的にパースするようになりました。#81167 をクローズしました。#84069 (Kirill Nikiforov).
- サポート対象外のアーキテクチャでも
simdjsonを使用できるようにしました (従来はCANNOT_ALLOCATE_MEMORYエラーの原因となっていました) 。#84966 (Azat Khuzhin).
その他の改善
- Ytsaurus テーブルエンジンおよびテーブル関数を追加しました。#77606 (MikhailBurdukov).
- HashJoin::needUsedFlagsForPerRightTableRow を改善し、cross join では false を返すようにしました。#82379 (lgbo).
- Mapカラムを Tuple の配列として読み書きできるようにしました。#82408 (MikhailBurdukov).
- この PR はリバートされました。#82884 (Mithun p).
- 非同期ログ: キュー内に保持できるエントリの最大数を制限しました。#83214 (Raúl Marín).
- JSON input formats で Date/Date32 を整数として扱えるようにしました。#83597 (MikhailBurdukov).
- 1 つ目の引数が定数配列 (set) で、2 つ目が索引対象のカラム (subset) の場合に、Bloom filter索引 (regular、ngram、token) を利用できるようサポートを改善し、より効率的なクエリ実行を可能にしました。#84700 (Doron David).
- KeyValue ストレージの主キー (例: EmbeddedRocksDB、KeeperMap) に対して
IN/GLOBAL INフィルタをプッシュダウンする際、Set の値の型変換を許可しました。#84515 (Eduard Karacharov). - 並列レプリカ読み取りで、索引解析の結果が空の範囲になる場合のフルスキャンを排除しました。#84971 (Eduard Karacharov).
- ローカルホストで結合テストを実行しようとした際に発生しうる一連の問題を修正しました。#82135 (Oleg Doronin).
- 古いデプロイ環境で trace_log.symbolize をデフォルトで有効にしました。#85456 (Azat Khuzhin).
バグ修正 (正式な安定版リリースでユーザーに明らかに見える不具合)
パフォーマンス最適化
- https://github.com/ClickHouse/ClickHouse/pull/79051 によって 25.5 で導入された SummingMergeTree のパフォーマンス低下を修正しました。#82130 (Pavel Kruglov).
- 有効化されたアナライザで、secondary クエリが常に VIEW からすべてのカラムを読み込んでいたことによるパフォーマンス低下を修正しました。#81718 を修正します。#83036 (Dmitry Novik).
- 依存関係のない CREATE TABLE では循環依存をチェックしないようにしました。これにより、https://github.com/ClickHouse/ClickHouse/pull/65405 で導入された、数千のテーブルを作成するユースケースでのパフォーマンス低下を修正しました。#83077 (Pavel Kruglov).
DISTINCTウィンドウ集約が線形時間で実行されるようにし、sumDistinctのバグを修正しました。#79792 をクローズしました。#52253 をクローズしました。#79859 (Nihal Z. Miaji).
クエリ実行に関する修正
ORDER BY ... LIMIT BY ... LIMIT Nを組み合わせたクエリで、ORDER BY が PartialSorting として実行される場合、カウンターrows_before_limit_at_leastは、ソート変換で消費された行数ではなく、LIMIT 句で消費された行数を反映するようになりました。#78999 (Eduard Karacharov).<=>演算子および Join ストレージに関する論理エラーを修正し、クエリが適切なエラーコードを返すようになりました。#80165 (Vladimir Cherkasov) 。remote関数ファミリーとともに使用した場合にloop関数がクラッシュする問題を修正しました。loop(remote(...))で LIMIT 句が正しく適用されるようにしました。#80299 (Julia Kartseva)。- Unix epoch (1970-01-01) 以前の日付および最大日付 (2106-02-07 06:28:15) 以後の日付を処理する際の
to_utc_timestamp関数とfrom_utc_timestamp関数の誤った動作を修正しました。これらの関数は、それぞれの値を epoch の開始時刻および最大日付に正しくクランプするようになりました。#80498 (Surya Kant Ranjan). - 左辺引数が null で、サブクエリの結果が Nullable ではない場合の、
transform_null_in=1におけるINの実行を修正しました。#81584 (Pavel Kruglov). - スカラー相関サブクエリの処理中に必要なカラムが読み込まれない問題を修正しました。この修正は #81716 に対応します。#81805 (Dmitry Novik) 。
- クエリで定数のエイリアスカラムのみが使用される場合のフィルタ解析を修正しました。#79448。#82037 (Dmitry Novik) 。
WHERE条件下でarrayJoinとIndexSetを使用するクエリにおけるNot found columnエラーを修正しました。#82113 (Nikolai Kochetov) 。- CTE の定義が、同じ名前の別のテーブル式を参照している場合に
TOO_DEEP_SUBQUERIES例外が発生する問題を修正しました。#83413 (Dmitry Novik) 。 WHERE ... IN (<subquery>)句を使用し、クエリ条件キャッシュ (設定use_query_condition_cache) が有効な場合に、クエリが誤った結果を返す問題を修正しました。#83445 (LB7666).INSERT SELECTでUNION ALLを使用すると、まれなケースでヌルポインタ逆参照が発生する可能性がありました。これにより #83618 をクローズしました。#83643 (Alexey Milovidov).- 相関カラムに対する行ポリシー式の解析中に発生する
LOGICAL_ERRORを修正しました。#82618 (Dmitry Novik) 。 - recursive CTE と併用した際に query condition cache を使用すると誤った結果が返される問題を修正しました (issue #81506) 。#84026 (zhongyuankai) 。
- 無効な
WINDOW定義の解析で無限再帰が発生する問題を修正しました。#83131。#84242 (Dmitry Novik) 。 additional_table_filters expression設定内のIN (subquery)で発生するNot-ready Setを修正しました。 #85210 (Nikolai Kochetov).optimize_syntax_fuse_functionsが有効な場合に、重複するサブクエリによって発生する論理エラーを修正し、#75511 をクローズしました。 #83300 (Vladimir Cherkasov).
Iceberg と DataLake の修正
- REST カタログ経由で Iceberg テーブルをクエリする際のメタデータ解決を修正。… #80562 (Saurabh Kumar Ojha).
- Iceberg におけるデータ競合を修正。 #82088 (Azat Khuzhin).
- Iceberg で発生する “Context has expired” を修正。 #82146 (Azat Khuzhin).
- スキーマ進化後でも、ClickHouse が Glue カタログから Iceberg テーブルを読み取れるようになりました。#81272 を修正。 #82301 (alesapin).
- Iceberg におけるデータ競合を修正。 #82841 (Azat Khuzhin).
- Iceberg の Array 要素および Iceberg の map の値 (それらの配下にあるすべてのネストされたサブフィールドを含む) に対する、境界ベースのファイル pruning を無効化。 #83520 (Daniil Ivanik).
- 複合型に対する Iceberg への書き込みを修正。 #85330 (scanhex12).
- 複合型では下限値および上限値の書き込みはサポートされなくなりました。 #85332 (scanhex12).
- Iceberg におけるフィールドの nullability を修正。 #85977 (scanhex12).
- 空の Iceberg delete file を作成しないようにしました。 #86061 (scanhex12).
- Iceberg への書き込み時にメタデータの timestamp を更新。 #85711 (scanhex12).
- Spark が position delete files を読み取れない問題を修正。 #85762 (scanhex12).
- マニフェストファイルからスキーマを取得するのをやめ、代わりに各スナップショットごとに関連するスキーマを個別に保存するようにしました。各データファイルについて、対応するスナップショットから関連するスキーマを推論します。以前の動作は、existing status を持つマニフェストファイルのエントリに関する Iceberg 仕様に違反していました。 #84588 (Daniil Ivanik).
- Iceberg は、select クエリ間で関連するスナップショットバージョンを cache しようとせず、常に正しくスナップショットを解決するようになりました。以前の Iceberg スナップショットの cache の試みは、タイムトラベルを伴う Iceberg テーブルの利用時に問題を引き起こしていました。 #85038 (Daniil Ivanik).
- REST カタログ経由で Iceberg テーブルをクエリする際のメタデータ解決を修正。… #85531 (Saurabh Kumar Ojha).
- icebergS3Cluster および icebergAzureCluster table function における secrets のマスキングを修正。 #85658 (MikhailBurdukov).
Delta Lake の修正
- ストレージ
DeltaLakeの delta-kernel におけるカラムプルーニングを修正しました。#84543 をクローズします。#84745 (Kseniia Sumarokova)。 - ストレージ DeltaLake の delta-kernel で認証情報を更新するようにしました。#84751 (Kseniia Sumarokova)。
- delta-kernel 実装で発生する segfault を修正しました。#85160 (Kseniia Sumarokova)。
DeltaLakeエンジンの delta-kernel 実装におけるレースコンディションを修正しました。#85221 (Kseniia Sumarokova)。DeltaLakeエンジンで delta-kernel を無効にした場合に、パーティション化されたデータを読み取れない問題を修正しました。この問題は 25.7 で発生していました (https://github.com/ClickHouse/ClickHouse/pull/81136)。[#85223](https://github.com/ClickHouse/ClickHouse/pull/85223) (Kseniia Sumarokova)。- 互換性のため、
allow_experimental_delta_kernel_rsの 25.5 より前の値をfalseに変更しました。#84587 (Kseniia Sumarokova)。 - Delta Lake の cache から件数を読み取る処理を修正しました。#85704 (Kseniia Sumarokova)。
有効期限 (TTL) と MergeTree の修正
- 有効期限 (TTL) によって行数が減った際に min-max 索引を再計算し、
minmax_count_projectionなど、これに依存するアルゴリズムの正しさを確保するようにしました。これにより #77091 を解決しました。 #77166 (Amos Bird)。 - 有効期限 (TTL) の更新時に、有効期限 (TTL) GROUP BY における 有効期限 (TTL) の再計算が誤っていた問題を修正しました。 #81222 (Evgeniy Ulasik)。
- 有効期限 (TTL) 式で dict を使用した場合に、マージ中に “Context has expired” が発生する問題を修正しました。 #81690 (Azat Khuzhin)。
- GROUP BY 用と SET 用の 有効期限 (TTL) で同じカラムを使用した際に発生する LOGICAL_ERROR と、それに続くクラッシュを修正しました。 #82054 (Pablo Marcos)。
- テーブルからすべての 有効期限 (TTL) が削除された場合、MergeTree は 有効期限 (TTL) 関連の処理を一切行わなくなりました。 #84441 (alesapin)。
ALTER MODIFY ORDER BYがソートキー内の 有効期限 (TTL) カラムを検証しない問題を修正しました。ALTER操作中にORDER BY句で 有効期限 (TTL) カラムが使われた場合は正しく拒否されるようになり、テーブル破損の可能性を防ぎます。 #84536 (xiaohuanlin)。
プロジェクションの修正
- カラム型が Nullable に変更された際に、プロジェクションの実体化中に発生する論理エラーを修正しました。#80741 (Pavel Kruglov).
enable_shared_storage_snapshot_in_query = 1のとき、mergeTreeProjectionテーブル関数 で親メタデータが誤って使用される問題を修正しました。これは #82634 に対する修正です。#82638 (Amos Bird).- テーブルにプロジェクションがあり、
lightweight_mutation_projection_mode = 'rebuild'が設定されていて、ユーザーがテーブル内のいずれかの block からすべての行を削除する lightweight delete を実行した場合に、まれに ClickHouse がクラッシュする問題を修正しました。#84158 (alesapin). - 壊れたプロジェクションを含むパーツのバックアップを修正しました。#85362 (Antonio Andelic).
_part_offsetカラムは、安定化されるまでリリース版ではプロジェクション内で使用できないようにしました。#85372 (Sema Checherinda).
並列レプリカの修正
- 並列レプリカで実行される一部のクエリでは、順序どおりに読み取る最適化がイニシエーターには適用されても、リモートノードには適用されないことがありました。その結果、並列レプリカのコーディネーター (イニシエーター上) とリモートノードで異なる読み取りモードが使われるという論理的な誤りが発生していました。 #80652 (Igor Nikonov).
- サブクエリに
FINALが含まれる場合は、並列レプリカを無効化します #81401 by . #83455 (zoomxi). - 並列レプリカを使用するクエリで、複数の INNER JOIN の後に RIGHT JOIN が続く場合の
LOGICAL_ERRORを修正しました。このようなクエリでは並列レプリカを使用しません。 #84299 (Vladimir Cherkasov). - 逆順で順序どおりに読み取る最適化を使用する並列レプリカのクエリでは、誤った結果が生成される可能性があります。 #85406 (Igor Nikonov).
認証とセキュリティ
- ログ/query_log で named collection の値が隠されない問題を修正しました。#82405 をクローズしました。#82510 (Kseniia Sumarokova).
- 型
SCRAM_SHA256_PASSWORDで AST からパースする際に、認証データの salt を設定するようにしました。#82888 (Tuan Pham Anh). - Avro スキーマレジストリの認証情報をマスクし、ユーザーやログから見えないようにしました。#83713 (János Benjamin Antal).
REVOKE S3 ON system.*の実行時に、*.*に対する S3 権限まで取り消されてしまう誤った動作を修正しました。これにより #83417 を修正しました。#83420 (pufit).no_passwordで作成されたユーザーが、サーバー設定allow_no_passwordを 0 に変更した後にログインを試みるとサーバーがクラッシュする問題を修正しました。#84426 (Shankar Iyer).- JWT で識別されるユーザーを作成しようとした際のエラーメッセージを改善しました。#85072 (Konstantin Bogdanov).
deltaLakeAzure、deltaLakeCluster、icebergS3Cluster、icebergAzureClusterの認証情報をマスクするようにしました。#85889 (Julian Maicher).- #79963 で導入されたバグを修正しました。definer を持つ materialized view への insert では、権限チェックに definer の grants を使用するよう修正しました。これにより #79951 を修正しました。#83502 (pufit).
バックアップと復元に関する修正
- 空の
Memoryテーブルのバックアップに関する不具合を修正しました。この不具合により、バックアップの復元がBACKUP_ENTRY_NOT_FOUNDエラーで失敗していました。#82791 (Julia Kartseva). - 読み取り専用ディスク上でバックアップを復元する際に、誤解を招くエラーメッセージが表示される不具合を修正しました。#83051 (Julia Kartseva).
- 接続の問題発生後に不要な内部バックアップが開始される不具合を修正しました。#84755 (Vitaly Baranov).
ウィンドウ関数と集約関数
- マージ中に例外が発生した場合に
Aggregatorがクラッシュする可能性がある問題を修正しました。 #81450 (Nikita Taranov). - マージ中に例外が発生した場合に
Aggregatorがクラッシュする可能性がある問題を修正しました。 #82022 (Nikita Taranov). - arraySimilarity のコピー&ペーストミスを修正し、UInt32 および Int32 の重みを使用できないようにしました。テストとドキュメントも更新しました。 #82103 (Mikhail f. Shiryaev).
numericIndexedVectorPointwiseAdd、numericIndexedVectorPointwiseSubtract、numericIndexedVectorPointwiseMultiply、numericIndexedVectorPointwiseDivideの各関数を大きな数値に適用した際に発生していたオーバーフローを修正しました。 #82165 (Raufs Dunamalijevs).
Parquet とファイルフォーマットの修正
WHERE function(key) IN (...)のような条件を、WHERE key IN (...)であるかのように誤って適用していた Parquet bloom filter の問題を修正しました。#81255 (Michael Kolupaev).- Parquet writer が Decimal 型に対して誤った統計情報 (min/max) を出力していた問題を修正しました。#83754 (Michael Kolupaev).
- 要素が空の場合の
groupArraySample/groupArrayLastのデシリアライゼーションを修正しました (入力が空の場合、デシリアライゼーション時にバイナリデータの一部がスキップされることがあり、その結果、データ読み取り時の破損や TCP プロトコルでの UNKNOWN_PACKET_FROM_SERVER につながる可能性がありました) 。これは数値型および日時型には影響しません。#82763 (Pedro Ferreira). - RowBinary フォーマットで NULL 値を含む JSON パスを書き込む際の問題を修正しました。#83923 (Pavel Kruglov).
JOIN の修正
- ストレージ
Mergeのテーブルとの JOIN 式を含むクエリで、フィルタ変更が正しく行われない問題を修正しました。#82092 を修正しました。#82950 (Dmitry Novik)。 - キー・バリュー ストレージを型変換されたキーで JOIN した場合にクラッシュする問題を修正しました。#82497 (Pervakov Grigorii)。
- 複数の JOIN を含むクエリでマッチャーを解決する際に発生する論理エラーを修正し、#81969 をクローズしました。#82421 (Vladimir Cherkasov)。
- 等価比較のオペランドの型が異なる場合、または定数を参照している場合に、フィルタが JOIN 条件にマージされる問題を修正しました。#83432 を修正しました。#84145 (Dmitry Novik)。
- 一方のカラムが
LowCardinalityで、もう一方が定数である場合に、不等式条件で JOIN を実行するとExpected single dictionary argument for functionという論理エラーが発生する問題を修正しました。#81779 をクローズしました。#84019 (Alexey Milovidov)。
Replicated database の修正
- DDLWorker と DatabaseReplicatedDDLWorker の
markReplicasActiveを修正しました。#81395 (Tuan Pham Anh)。 DatabaseReplicated::getClusterImplを修正しました。hostsの先頭要素 (または先頭の複数要素) がid == DROPPED_MARKを持ち、かつ同じ分片に属する他の要素が存在しない場合、shardsの先頭要素が空のベクターとなり、std::out_of_rangeにつながる問題がありました。#82093 (Miсhael Stetsyuk)。- 非同期テーブル loading ジョブの数を追跡するようにしました。実行中のジョブがある場合、
TransactionLog::removeOldEntriesでtail_ptrを更新しません。#82824 (Tuan Pham Anh)。 - MergeTree table を
add_minmax_index_for_numeric_columns=1またはadd_minmax_index_for_string_columns=1を指定して作成した場合、その後の ALTER 操作で索引が materialized され、新しいレプリカ上で Replicated database を正しく初期化できなくなる問題を修正しました。#83751 (Nikolay Degterinsky)。 - DEFINER が削除されている場合に、Replicated database の新しいレプリカ上で RMV を作成できない問題を修正しました。#85327 (Nikolay Degterinsky)。
- メタデータファイルの移動に時間がかかる場合に、replicated databases を復旧できない問題を修正しました。#85177 (Tuan Pham Anh)。
- Keeper 内の database メタデータを復元した後、Replicated Database を強制的に復旧するようにしました。#85960 (Tuan Pham Anh)。
Replicateddatabase の復旧に関するバグを修正しました。テーブル名に%記号が含まれている場合、復旧中に別名でテーブルが再作成される可能性がありました。#85987 (Alexander Tokmakov)。- DDL worker がレプリカ集合から outdated なホストをクリーンアップするようになりました。これにより、ZooKeeper に保存されるメタデータ量が削減されます。#88154 (alesapin)。
論理更新の修正
ReplacingMergeTreeおよびCollapsingMergeTreeエンジンを使用するテーブルでの論理更新を修正しました。#84851 (Anton Popov).- テーブル内のすべてのカラムを更新する論理更新におけるロジックエラーを修正しました。#84380 (Anton Popov).
- 25.7 未満のバージョンのサーバー上で作成された
ReplicatedMergeTreeエンジンのテーブルでの論理更新を修正しました。#84933 (Anton Popov). - 非レプリケートの
MergeTreeエンジンのテーブルで、ALTER TABLE ... REPLACE PARTITIONクエリ実行後の論理更新を修正しました。#84941 (Anton Popov). ReplicatedMergeTreeにおけるパッチパートのクリーンアップを修正しました。これまでは、パッチパートを実体化するマージ済みまたはミューテーション済みのパーツが別のレプリカからダウンロードされるまで、論理更新の結果がそのレプリカ上で一時的に見えなくなることがありました。#85121 (Anton Popov).
S3 およびオブジェクトストレージの修正
- シークレットのマスキングにおける S3 テーブル関数 の引数検証を修正し、
LOGICAL_ERRORが発生する可能性を防止しました。#80620 をクローズしました。#82056 (Vladimir Cherkasov). - サーバーがメモリ逼迫状態にある際に、リモートクエリで発生する可能性のあるデッドロックを修正しました。#82160 (Kirill).
- AWS ECS トークンに有効期限を追加し、再読み込みできるようにしました。#82422 (Konstantin Bogdanov).
- 外部テーブルエンジンのキャッシュされたバッファで、boundary alignment を無効化できない問題を修正しました。これは https://github.com/ClickHouse/ClickHouse/pull/81868 で壊れていました。#82493 (Kseniia Sumarokova).
- S3 クライアントの
no_sign_requestを修正しました。これにより、S3 リクエストへの署名を明示的に回避できます。また、エンドポイントベースの設定を使って特定のエンドポイントに対して定義することもできます。#83379 (Antonio Andelic). - s3Cluster() から replicated MergeTree への INSERT SELECT 時に、利用できないノードをスキップするようにしました。#83676 (Igor Nikonov).
- S3 リクエストのレート低下に関する早期 return 条件を修正しました。再試行可能なエラーによってすべてのスレッドが一時停止した場合に低速化動作を有効にするには、s3_slow_all_threads_after_network_error または backup_slow_all_threads_after_retryable_s3_error のいずれかが true であればよく、両方は不要になりました。#85505 (Julia Kartseva).
- 分散テーブル または remote テーブル関数を介してオブジェクトストレージ関数から読み取る際に発生する論理エラーを修正しました。修正対象: #84658, #85173, #52022。#85359 (alesapin).
- S3Queue の “Table is already registered” による論理エラーを修正しました。#84433 をクローズしました。これは https://github.com/ClickHouse/ClickHouse/pull/83530 以降で壊れていました。#84677 (Kseniia Sumarokova).
- 大きな設定値によって S3Queue テーブルとレプリカの再起動が壊れる問題を修正しました。#86074 (Nikolay Degterinsky).
DynamicAndVariantTypeFixes
- パース失敗時の Dynamic カラムのロールバック処理を修正しました。#82169 (Pavel Kruglov).
- UNION における Variant 型で発生する可能性があるクラッシュを修正しました。#83295 (Pavel Kruglov).
- 遅延マテリアライゼーション時の Variant カラムの読み取りを修正しました。#84400 (Pavel Kruglov).
- 既存テーブルの読み取り時に、default/materialize expression の実行中は experimental/suspicious な型を検証しないようにしました。#81618 (Pavel Kruglov).
Keeper の修正
- Keeper の修正: セッション終了時にエフェメラルノードが削除された際、ウォッチ総数が正しく更新されるようにしました。#83583 (Antonio Andelic).
- Keeper changelog への書き込み順序の乱れを修正しました。以前は、changelog への書き込みが進行中の状態で、ロールバックによって宛先ファイルが同時実行で変更される可能性がありました。その結果、ログの不整合やデータ損失が発生するおそれがありました。#84434 (Antonio Andelic).
- RocksDB ストレージを使用する Keeper でのリークを修正しました (iterator が破棄されていませんでした) 。#84523 (Azat Khuzhin).
- Keeper の設定
rotate_log_storage_interval = 0によって ClickHouse がクラッシュする問題を修正しました。 (issue #83975) 。#84637 (George Larionov). - Keeper が返すウォッチ総数を修正しました。#84890 (Antonio Andelic).
- RefreshTask で ‘view’ から zookeeper を取得する際に ‘mutex’ をロックするようにしました。#84699 (Tuan Pham Anh).
索引関連の修正
- alternation を含み、かつ最初の選択肢がリテラルでない regexp による token/ngram 索引のフィルタリングで、グラニュールのスキップが過剰になる問題を修正しました。#79373 (Eduard Karacharov).
use_skip_indexes_if_final_exact_mode設定の実装 (25.6 で導入) では、MergeTreeエンジンの設定やデータ分布によって、適切な候補範囲を選択できないことがありました。この問題は解消されました。#82667 (Shankar Iyer).use_skip_indexes_if_final_exact_mode設定の最適化 (25.6 で導入) では、MergeTreeエンジンの設定やデータ分布によって、適切な候補範囲を選択できないことがありました。この問題は解消されました。#82879 (Shankar Iyer).- これまでは、
set索引でグラニュールが filter を通過するかどうかを判定する際に、Nullableカラムが考慮されていませんでした (issue #75485) 。#84305 (Elmi Ahmadov). MinMax索引の評価時に、nan 値との比較で正しい範囲が使われていませんでした。#84386 (Elmi Ahmadov).ngramおよびno_opトークナイザーで、空の入力トークンに対して (Experimental な) テキスト索引がクラッシュしなくなりました。#84849 (Robert Schulze).
materialized view の修正
- materialized view が INSERT クエリを見逃してしまう原因となっていた、テーブル依存関係のバグを修正しました。 #82222 (Nikolay Degterinsky).
- https://github.com/ClickHouse/ClickHouse/pull/79963 以降、materialized view でのサブカラムの使用が壊れており、ユーザーに
Not found column X in blockエラーが返される可能性がありました。この挙動を修正しました。修正対象: #82784。 #83221 (Nikita Mikhaylov). - mv で型が異なる場合に発生する illegal_type_of_argument を修正しました。 #85135 (Sema Checherinda).
Azure とクラウドストレージ関連の修正
- AzureBlobStorage でネイティブコピー時に authentication methods を比較する際、例外が発生した場合は、読み取りとコピー (つまり非ネイティブコピー) にフォールバックするようコードを更新しました。#82693 (Smita Kulkarni).
AzureIteratorAsyncにおける二重解放を修正しました。#85064 (Nikita Taranov).
クラッシュおよび安定性の修正
user_idが空になることがあるため、セッション終了時のログ処理で発生する可能性があるクラッシュを修正しました。 #82513 (Bharat Nallan).- 不正な
INSERTの後に接続が切断状態のままになることで、クライアントで発生するクラッシュを修正しました。 #83253 (Azat Khuzhin). - 空のカラムを含む block のサイズ計算時に発生するクラッシュを修正しました。 #83271 (Raúl Marín).
- CPU スケジューリングが有効な状態で高負荷時に実行された場合、設定 ‘max_threads=1’ のクエリで発生する可能性があるクラッシュを修正しました。 #83387 (Fan Ziqi).
zoutofmemoryをハードウェアエラーとして扱うようにしました。そうしないと論理エラーが発生します。https://github.com/clickhouse/clickhouse-core-incidents/issues/877 を参照してください。 #84420 (Han Fei).BackgroundSchedulePoolのシャットダウン中に発生する可能性がある abort (task からスレッドを join することによるもの) と、ハングの可能性 (単体テスト内) を修正しました。 #83769 (Azat Khuzhin).- バックグラウンドのキャンセルチェッカースレッドが原因で発生するデッドロックを修正しました。 #84203 (Antonio Andelic).
- library bridge のクリーンアップ中に再帰的なコンテキストロックが発生することで、シャットダウン時に起きるデッドロックを修正しました。 #83824 (Azat Khuzhin).
- 不正な
INSERTの後に接続が切断状態のままになることで、クライアントで発生するクラッシュを修正しました。 #83842 (Azat Khuzhin). - String のデシリアライズ中に
MEMORY_LIMIT_EXCEEDEDが発生した場合に起こりうる UB (クラッシュ) を修正しました。 #85440 (Azat Khuzhin). log_commentまたはinsert_deduplication_tokenの設定を変更する非同期挿入で発生するまれなクラッシュを修正しました。 #85540 (Anton Popov).
Glue とカタログの修正
- Glue カタログのインテグレーションの不具合を修正しました。これにより、ClickHouse は一部のサブカラムに Decimal 型を含むネストされたデータ型を持つテーブルを読み取れるようになりました。たとえば、
map<string, decimal(9, 2)>です。#81301 を修正しました。#82114 (alesapin)。 - ClickHouse は、テーブルタイプが小文字で指定された Glue カタログ のテーブルを読み取れるようになりました。#84316 (alesapin)。
- Unity Catalog は、Delta テーブル以外の場合、異常なデータ型を持つスキーマを無視するようになりました。#85699 を修正しました。#85950 (alesapin)。
関数の修正
- 関数
trim{Left,Right,Both}が、型 “FixedString(N)” の入力文字列をサポートするようになりました。たとえば、SELECT trimBoth(toFixedString('abc', 3), 'ac')が動作するようになりました。 #82691 (Robert Schulze)。 - 関数
trimを入力がすべて定数の状態で呼び出した場合、出力文字列も定数になるようになりました。 (バグ #78796) 。 #82900 (Robert Schulze)。 - フォーマッタ
%fを可変長のフォーマッタ (例:%M) と組み合わせて使用した場合に、関数formatDateTimeの出力が不正になる問題を修正しました。 #83020 (Robert Schulze)。 CASE関数におけるNULL引数のバグを修正しました。 #82436 (Yarik Briukhovetskyi)。lowCardinalityKeys関数で、共有 Dictionary の無関係な部分を使用しないようにしました。 #83118 (Alexey Milovidov)。- 定数引数と非定数引数が混在する場合の colorSRGBToOKLCH/colorOKLCHToSRGB を修正しました。 #83906 (Azat Khuzhin)。
array()関数で空のタプルが誤って構築される問題を修正しました。これにより #84202 も修正されます。 #84297 (Amos Bird)。- Bech32 のエンコードおよびデコードが不正になるバグを修正しました。テストに使用していたアルゴリズムのオンライン実装にも同じ問題があったため、このバグは当初見逃されていました。 #84257 (George Larionov)。
分散クエリの修正
LIMIT付きの並列分散INSERT SELECTが許可されていましたが、これは不正で、ターゲットテーブルでデータの重複を引き起こしていました。#84477 (Igor Nikonov).JOINまたはサブクエリがある場合、テーブル関数をそのクラスター版に置き換えないようにしました。#84335 (Konstantin Bogdanov).- 分散コンテキストで相関サブクエリが使用されている場合のチェックを追加し、クラッシュを回避するようにしました。#82205 を修正。#85030 (Dmitry Novik).
*Cluster関数の判定指標としてdistributed_depthを使用するのは不正確で、データの重複を引き起こす可能性がありました。代わりにclient_info.collaborate_with_initiatorを使用するようにしました。#85734 (Konstantin Bogdanov).Distributed宛先テーブルを使う並列分散INSERT SELECTで、WITHステートメントのグローバル定数をサポートしました。以前は、クエリでUnknown expression identifierエラーが発生する可能性がありました。#85811 (Nikolai Kochetov).DatabaseReplicatedでCREATE ... AS (SELECT * FROM s3Cluster(...))を実行しようとした際の論理エラーを修正しました。#85904 (Konstantin Bogdanov).- Distributed テーブルの ALTER 時に
sharding_keyのチェックを追加しました。以前は、不正な ALTER によってテーブル定義が壊れ、サーバーの再起動に失敗することがありました。#86015 (Nikolay Degterinsky).
メトリクスと監視に関する修正
- 非同期メトリクス設定
asynchronous_metrics_update_period_sおよびasynchronous_heavy_metrics_update_period_sの検証処理を修正しました。 #82310 (Bharat Nallan). IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFilesメトリクスを修正しました (以前はCacheプレフィックスのないメトリクスに含まれていました) 。 #83730 (Azat Khuzhin).- QueryMetricLog で発生する
LOGICAL_ERROR(Mutex はNULLにできない) を修正しました。 #82979 (Pablo Marcos). - KafkaAssignedPartitions および KafkaConsumersWithAssignment メトリクスの誤りを修正しました。 #85494 (Ilya Golshtein).
PREWHERE(明示的または自動) が使用されている場合に、処理済みバイト数の統計が過小評価される問題を修正しました。 #85495 (Michael Kolupaev).- background schedule pool と executor に起因するメモリ追跡のずれを修正しました。 #84946 (Azat Khuzhin).
データ型と変換の修正
- Time のパースで msan の問題が発生する可能性があるケースを修正しました。これにより、#82477 が修正されます。 #82514 (Yarik Briukhovetskyi).
LowCardinality(Float32|Float64|BFloat16)型における NaN 値のソートを修正しました。 #83786 (Pervakov Grigorii).DateからDateTime64へのキャスト時に、大きな値 (>2106-02-07) で発生するオーバーフローを修正しました。 #83982 (Yarik Briukhovetskyi).- 負の Time 値をテーブルに暗黙的に読み込む際の問題を修正し、ドキュメントのわかりにくさも解消しました。 #83091 (Yarik Briukhovetskyi).
- Codec
DoubleDeltaは、数値型のカラムにのみ適用できるようになりました。特に、FixedStringカラムはDoubleDeltaを使用して圧縮できなくなりました。 (#80220 を修正) 。 #84383 (Jimmy Aguilar Mena). - JSON 数値を Decimal types に変換する際の
JSONExtractにおける精度低下を修正しました。これにより、JSON の数値は正確な 10 進表現を保持し、浮動小数点の丸め誤差を回避できるようになりました。 #85665 (ssive7b).
メモリとリソース管理
max_untracked_memory周りの誤ったメモリ管理を修正しました。#83607 (Azat Khuzhin).async_read_countersをクエリ間で共有しないようにしました。#83423 (Azat Khuzhin).- 一時データストレージとして使用する際に発生する可能性がある、
file cacheの未初期化エラーを修正しました。#83539 (Bharat Nallan). filesystem_prefetches_limitを常に適用するようにしました (MergeTreePrefetchedReadPool経由だけでなく) 。#83999 (Azat Khuzhin).
構成と設定の修正
- URI 経由で設定を渡した場合は、最後の値が使用されるようになりました。#82137 (Sema Checherinda).
- クライアントでのデータ競合 (グローバルコンテキストを使わないことで回避) と
session_timezoneの override を修正しました (従来は、たとえばsession_timezoneがusers.xml/ クライアントオプションでは空でない値に設定され、クエリコンテキストでは空に設定されている場合、誤ってusers.xmlの値が使用されていました。現在は、クエリコンテキストが常にグローバルコンテキストより優先されます) 。#82444 (Azat Khuzhin). - サーバー処理が停止しないよう、
threadpool_writer_pool_sizeを 0 に設定できないようにしました。#82532 (Bharat Nallan). - 設定
role_cache_expiration_time_secondsの構成における軽微な整数 overflow を解消しました (issue #83374) 。#83461 (wushap). - 論理 error を引き起こす可能性があるため、max_insert_block_size に 0 を設定できないようにしました。#83688 (Bharat Nallan).
block_size_bytes=0の場合にestimateCompressionRatio()で発生する無限ループを修正しました。#83704 (Azat Khuzhin).date_time_input_formatのような parameter は、multipart を使用する HTTP では無視されていました。#85570 (Sema Checherinda).
MongoDB の修正
- これまで、
MongoDBテーブルエンジンの定義では、host:portargument に path 部分を含めることができましたが、その部分は暗黙的に無視されていました。mongodb integration はこのようなテーブルを読み込めませんでした。今回の修正により、MongoDBengine の引数が 5 つある場合は、そのようなテーブルも読み込めるようになり、arguments の database 名を使用して path 部分を無視します。注: この修正は、新規に作成されるテーブルやmongotable function を使用する queries、ならびに Dictionary ソースおよび named collections には適用されません。#81942 (Vladimir Cherkasov).
その他の修正
- 以前のバージョンでは、
/jsへのリクエストに対してサーバーが必要以上の内容を返していました。これにより #61890 が解決されます。#81895 (Alexey Milovidov). - 必要に応じて (たとえば、名前に
-のような特殊文字が含まれる場合に) データベース名とテーブル名をバッククォートで囲むよう、InterpreterInsertQuery::extendQueryLogElemImplを修正しました。#81528 (Ilia Shvyrialkin) 。 - 候補提示スレッドとメインのクライアントスレッドの間で発生する可能性があるデータレースを修正しました。 #82233 (Azat Khuzhin).
- union/積集合/except_default_mode の書き換えにおける例外安全性を修正。#82664 をクローズしました。 #82820 (Alexey Milovidov).
- キャッシュを行わない Database 実装を使用している場合、対応するテーブルのメタデータは、カラムが返された後に削除され、参照は無効化されます。#82939 (buyval01) 。
- JSONEachRowWithProgress の Onprogress 呼び出しが、終了処理と同期されるようになりました。 #83879 (Sema Checherinda) 。
- まれに
MATERIALIZE COLUMNクエリによってchecksums.txtに想定外のファイルが生成され、最終的にデタッチされたデータパーツにつながる不具合を修正しました。 #84007 (alesapin). - 定期的なパーツのリフレッシュ時に例外を適切に処理する。 #84083 (Azat Khuzhin).
- 真偽値リテラルのカラム名生成を修正し、“1”/“0” ではなく “true”/“false” を使うようにしました。これにより、クエリ内で真偽値リテラルと整数リテラルの間で発生するカラム名の競合を防止します。 #84945 (xiaohuanlin).
- Mergeテーブルエンジンにおける、ソート順が不正確になる可能性がある問題を修正しました。#85025 (Xiaozhe Yu) 。
- DiskEncrypted 向けに不足していた API を実装。 #85028 (Azat Khuzhin).
- 名前の衝突時に、新しいアナライザが
WITH句で外側のエイリアスを参照できるようにするための後方互換性設定を導入しました。#82700 を修正しました。#83797 (Dmitry Novik) 。 - アナライザが有効な場合、
remoteテーブル関数のview(...)引数で任意のテーブルを参照できるようになりました。#78717 を修正。#79377 を修正。#83844 (Dmitry Novik) 。 plain_rewritable/plainメタデータタイプでの append を伴う書き込みについて、これまでは単に無視されていた、実験的な transaction で使用される MergeTree における不具合を修正しました。 #83695 (Tuan Pham Anh).IAccessStorageにおけるロガーの使用を修正しました。 #84365 (Konstantin Bogdanov).- データレイクにおける、仮想カラムを使用したファイルプルーニングを修正しました。#84520 (Kseniia Sumarokova).
- 応答の遅いリモートソースへのクエリで
vector out of boundsが発生する可能性がある問題を修正しました。#84820 (George Larionov). - object queue engine のテーブルメタデータに、すべての設定が正しく保存されるようにしました。 #84860 (Antonio Andelic).
- 遅延カラムを外部ソートと併用した場合に発生する
CORRUPTED_DATAエラーを修正しました。#84738 (János Benjamin Antal). SYSTEM DROP REPLICAクエリ中の不要なgetStatus()呼び出しをなくしました。これにより、テーブルがバックグラウンドで削除された際にShutdown for storage is called例外がスローされるケースを修正しました。#85220 (Nikolay Degterinsky).CREATE OR REPLACEおよびRENAMEクエリで不足していた、テーブル名の長さのチェックを追加しました。#85326 (Michael Kolupaev).- JSON に対する
ALTER UPDATE実行中に発生するクラッシュとデータ破損を修正しました。#85383 (Pavel Kruglov) 。 - 大きな文字列で発生する coalescing merge tree の segfault を修正しました。これにより #84582 がクローズされます。#85709 (scanhex12).
- send_logs_source_regexp を修正 (#85105 の非同期ロギングのリファクタリング後) 。 #85797 (Azat Khuzhin).
MEMORY_LIMIT_EXCEEDEDエラー時に、update_fieldを持つ辞書で不整合が発生する可能性がある問題を修正しました。#85807 (Azat Khuzhin).- 非標準ポートへのアクセス時に、
url()テーブル関数が発行する HTTP リクエストの Host ヘッダーにポート番号が正しく含まれるよう修正しました。これにより、開発環境でよくある、カスタムポートで稼働する MinIO などの S3互換サービスで事前署名付き URL を使用した際の認証エラーが解消されます。 (#85898 を修正) 。#85921 (Tom Quist).