Skip to main content

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

クエリと構文の変更

  • ウィンドウ関数 RANK および DENSE_RANK は、SQL standard に準拠し、引数を受け付けずに NUMBER_OF_ARGUMENTS_DOESNT_MATCH をスローするようになりました。従来は RANK(x) OVER (ORDER BY id) のようなクエリが引数を無視したまま暗黙的に受け入れられており、ユーザーの混乱を招く一因となっていました。従来の寛容な動作に戻すには、allow_rank_dense_rank_arguments = 1 を設定してください。#104324 (groeneai)。

データ型の変更

  • icebergHash と icebergBucket は、Int128、UInt128、Int256、UInt256、Decimal256 型の引数を明示的なエラーで拒否するようになりました。以前は、より大きな値を暗黙的に切り詰め、ハッシュ衝突を引き起こしていました。Iceberg の仕様では、ハッシュは 32/64 ビット整数および精度が最大 38 の Decimal に対してのみ定義されています。収まる値で以前の動作を維持するには、Int64 または Decimal128 にキャストしてください。 #105866 (Algunenano).
  • toUUID、toUUIDOrNull、toUUIDOrZero、toUUIDOrDefault、UUID および Nullable(UUID) への CAST、UUID への accurateCastOrNull、ならびにテキストから UUID をパースする入力フォーマット (Avro、MsgPack、JSONExtract など) は、長さは正しいものの 16 進数以外の文字を含む文字列を拒否するようになりました。以前は、そのような入力は 16 進数字のルックアップテーブルの末尾を超えて参照することで、暗黙的に架空の UUID に変換されていました。今後は toUUID が CANNOT_PARSE_UUID を throw し、Or* 系のバリアントは NULL / ゼロ UUID / 指定されたデフォルト値を返します。 #104370 (groeneai).
  • Dynamic 型と Variant 型は、ウィンドウの PARTITION BY 句でも検証されるようになりました。以前は allow_suspicious_types_in_group_by が無効な場合にチェックされていませんでした。Dynamic または Variant カラムでウィンドウをパーティション化するクエリは、allow_suspicious_types_in_group_by = 1 でない限り throw するようになりました。 #105450 (Avogar).

ストレージおよび索引に関する変更

  • min/max 集約および minmax 索引で、ネストされた Dynamic/Variant を拒否するようになりました。以前は最上位レベルの Dynamic/Variant のみを検査していました。 #105468 (Avogar).
  • サーバー設定 insert_deduplication_version のデフォルトが compatible_double_hashes から new_unified_hash に変更されます。挿入の重複排除は、パーツ/パーティション単位ではなく、挿入ブロック全体 (挿入ごと) を対象に行われるようになりました。同じ挿入を再試行した場合は引き続き重複排除されますが、同一のパーツを生成する別々の挿入どうしは重複排除されなくなり、同じ行を異なる順序で挿入した場合も重複排除されなくなります。以前の動作に戻すには、insert_deduplication_version = compatible_double_hashes を設定してください。new_unified_hash では、非同期 INSERT の重複排除も同期ウィンドウによって制御されます。有効化の有無 (replicated_deduplication_window) と保持期間 (replicated_deduplication_window_seconds、デフォルトは1時間) はどちらも同期設定に従うため、*_for_async_inserts はレガシーであり、old_separate_hashes / compatible_double_hashes にのみ適用されます。old_separate_hashes がデフォルトだったリリースから直接アップグレードするインスタンスは、関連する最長の重複排除ウィンドウが経過するまで (非同期 INSERT を使用する場合は、デフォルトで1週間の replicated_deduplication_window_for_async_inserts を含む) 、まず compatible_double_hashes を使用して実行してから new_unified_hash を使用してください。compatible_double_hashes から切り替える非同期ワークロードでは、new_unified_hash が保持期間の長い async_blocks ID を確認しなくなるため、まず replicated_deduplication_window[_seconds] を非同期ウィンドウまで拡大して非同期ウィンドウ全体にわたって実行するか、非同期 INSERT を停止するか、compatible_double_hashes を継続して使用してください。 #107886 (CheSema).
  • 区切り文字を含む needle を指定した hasToken が、BAD_ARGUMENTS を発生させずにテキスト索引経由で結果を返していた問題を修正しました。 #108189 (Ergus).

削除された機能

  • 廃止された Arrow ベースの Parquet リーダーおよびライターは使用できなくなりました。代わりに常に native 実装が使用されます。旧実装を選択したり調整したりしていた次の設定は廃止され、無視されます: input_format_parquet_use_native_reader_v3、output_format_parquet_use_custom_encoder、output_format_parquet_version、output_format_parquet_compliant_nested_types、output_format_parquet_unsupported_types_as_binary。Native writer は常に準拠したネストされた型を用いて Parquet V2.6+ で書き込み、サポートされていない型については生データのバイナリとして書き込む代わりに UNKNOWN_TYPE をスローします。#100949 (alexey-milovidov)。
  • 廃止された allow_experimental_query_deduplication 設定と、それに伴うサポート対象外の実験的なクエリ重複排除の動作を削除しました。#99398 (devcrafter)。
  • ALTER TABLE ... REPLACE PARTITION ... FROM ... では、ログソーステーブルの指定されたパーティションにパーツがない場合、宛先パーティションのデータを暗黙的に削除しなくなりました。以前は、このようなリクエストにより宛先パーティションが削除され、代わりに何も書き込まれませんでした。現在はデフォルトで BAD_ARGUMENTS により拒否されます。これは後方互換性を持たない変更です。これまで成功していた空のログソースからの REPLACE PARTITION (宛先を消去する操作) は、アップグレード後は例外をスローします。以前の暗黙的な消去動作に戻すには、新しい設定 allow_replace_partition_from_empty_source = 1 を設定するか (クエリごと、またはプロファイル内) 、compatibility を 26.5 以下に設定してください。宛先データを明示的に削除するには、ALTER TABLE ... DROP PARTITION ... を使用してください。#104939 (groeneai)。
  • 実験的な KQL (Kusto) 関数 array_sort_asc および array_sort_desc と、それらの SQL バックエンドである kql_array_sort_asc および kql_array_sort_desc を削除しました。これらの関数は実験段階で、実装品質が低く、正確性やパーサーに関するバグの原因となっていました。これらの名前を使用するクエリは、現在 UNKNOWN_FUNCTION を返します。#108101 (groeneai)。

新機能

関数

  • prometheusQuery および prometheusQueryRange テーブル関数で、PromQL の histogram_quantile 関数をサポートしました。これにより、le ラベルで識別される従来の Prometheus ヒストグラムのバケットに対して分位点を計算できます。 #103477 (Yasumoto).
  • 中心ベース、完全包含、重複の包含モードをサポートする h3PolygonToCellsWithContainment 関数を追加しました。 #104455 (yousefQadry).
  • formatReadableSize、formatReadableDecimalSize、formatReadableQuantity 関数で、任意の精度引数を指定できるようになりました。これにより小数点以下の桁数を制御できます。デフォルトは 2 で、従来の動作を維持します。 #104648 (antoniofilipovic).
  • argMin および argMax の集約関数の別名として、min_by と max_by を追加しました。 #105712 (itsjoeoui).

SQL とクエリ機能

  • formatReadableTimeDelta が、Month および Year 以外の型の INTERVAL 式を入力として受け付けるようになりました。#64315 (Beetelbrox).
  • PNG 出力フォーマットのサポートを追加し、クエリ結果を PNG 画像として直接レンダリングできるようになりました。#74691 (m7kss1).
  • ワークロード向けのメモリ予約機能を導入しました。ワークロードスケジューリングのドキュメントを参照してください。#82414 (serxa).
  • IP_ADDRESS または FORWARDED_IP_ADDRESS をキーとするクォータ用に、IPV4_PREFIX_BITS および IPV6_PREFIX_BITS オプションを追加しました。これにより、クォータ制限を個々の完全な IP アドレスに適用する代わりに、IP サブネット単位で共有できます。#89270 (adityachopra29).
  • ALTER TABLE クエリに ADD ENUM VALUES を実装し、既存のすべての Enum 値を再指定せずに、既存の Enum 型へ新しい値を追加できるようにしました。#93830 (ilejn).
  • 読み取り用の GeoJSON 入力フォーマットを追加しました。#98124 (mneedham).
  • トークン化後のトークンを変換するポストプロセッサをテキスト索引に追加しました。#98939 (Ergus).
  • ClickHouse Keeper の有効期限 (TTL) ノードに対するオプトインサポートを追加しました。TTL ノードは設定された存続期間の経過後に自動的に期限切れとなり、子ノードを持つことはできません。#100397 (scanhex12).
  • 完全一致の hasPhrase 検索をサポートするため、テキスト索引にトークン位置の保存を追加しました。support_phrase_search 索引引数と allow_experimental_text_index_phrase_search MergeTree 設定を有効にしてください。#103172 (ahmadov).
  • 関数 arrayTopK と arrayBottomK を追加しました。- arrayTopK(k, array) は K 個の最大要素を降順で返します - arrayBottomK(k, array) は K 個の最小要素を昇順で返します。#104563 (vitlibar).
  • * LIKE '<pattern>' および * ILIKE '<pattern>' を使用して、名前パターンでカラムを選択できるようになりました。table.* LIKE '<pattern>' や table.* ILIKE '<pattern>' などの修飾形式にも対応しています。LIKE はカラム名を大文字・小文字を区別して照合し、ILIKE は区別せずに照合します。#104569 (niyue).
  • 一連のスナップショット読み取りを使用する MergeTree テーブル向けの継続クエリを追加しました。#105114 (Michicosun).
  • スキーマ進化のサポートを向上させるため、RowBinaryWithNamesAndTypesAndDefaults フォーマットを追加しました。#105736 (mzitnik).
  • SQL から直接 Mapbox Vector Tiles を提供するための関数を追加しました。MVTEncodeGeom はジオメトリを slippy-map タイルのピクセル空間に投影してクリップし、MVTEncode はグループ内の投影済みジオメトリを単一レイヤータイルのバイナリバイト列に集約します。MVTBoundingBox / MVTBoundingBoxMercator は、行をタイルに制限するためのタイルのバウンディングボックスを返します。Point、line、Polygon ジオメトリをサポートしています。PostGIS の別名である ST_AsMVTGeom および ST_AsMVT としても利用できます。#106107 (saarthak2002).
  • LOCALTIME および LOCALTIMESTAMP (SQL 標準 / PostgreSQL 構文) を追加しました。LOCALTIMESTAMP は now() の別名で、DateTime を返します。LOCALTIME は現在の時刻を Time 値として返します。#106139 (thomas-cabral).
  • 新たに hostname_longest_common_prefix と hostname_longest_common_suffix の 2 つの load_balancing 戦略を追加しました。これらは、イニシエーターのホスト名と最長の共通プレフィックス (それぞれ接尾辞) を持つレプリカを優先します。既存の nearest_hostname および hostname_levenshtein_distance 戦略では誤ったレプリカが選択される、数値セグメントの長さが可変なホスト名のプレフィックスまたは接尾辞にデータセンターがエンコードされている場合に有用です。#107360 (den-crane).
  • 新しい関数 quantizeBFloat16ToInt8 および dequantizeInt8ToBFloat16 を追加しました。これは、埋め込みの部分を 256 レベルのガウス Lloyd-Max 量子化器を使用して 8 ビットに圧縮するスカラー codec です。ビット切り捨てにより Int4/Int2/binary codes を抽出できます。#108102 (alexey-milovidov).

テーブルエンジンとストレージ

  • Azure Data Lake Storage Gen2 への書き込みをサポートしました。#105406 (scanhex12) 。

設定と構成

  • 浮動小数点数および Decimal 数値について、値が整数であってもテキストフォーマットでは常に小数点を出力する設定 output_format_always_write_decimal_point_in_float_and_decimal を追加しました。たとえば、1 ではなく 1. を出力します。デフォルトでは無効です。 #62614 (qoega).
  • 新しい不変の MergeTree 設定 allow_tuple_element_aggregation を追加しました。デフォルトでは無効です。有効にすると、SummingMergeTree、AggregatingMergeTree、CoalescingMergeTree は Tuple カラムを再帰的にフラット化し、マージ時に各リーフ要素を最上位カラムであるかのように個別に集約します。つまり、SummingMergeTree は合計し、AggregatingMergeTree は集約関数の状態をマージし、CoalescingMergeTree は最後の非 NULL 値を保持します。この設定はテーブル作成時に指定する必要があり、対応していないエンジンでは暗黙的に無視されます。 #98039 (JingYanchao).
  • 浮動小数点数のテキスト出力における小数桁数を制御する設定 output_format_float_precision を追加しました。 #99721 (phulv94).
  • MergeTree テーブル設定 materialize_projections_on_insert および materialize_projections_on_merge を追加しました。materialize_projections_on_insert = 0 の場合、INSERT 時に projection パーツの構築をスキップするため、多数の projection を持つテーブルの INSERT スループットが向上します。materialize_projections_on_merge = 1 の場合、すべてのソースパーツに存在しない projection をマージ時に再構築するため、INSERT 時ではなくマージ中に projection を構築できます。マージでは引き続き、同じ projection セットを共有するパーツのみが結合されます。 #100993 (cwurm).
  • 新しい S3Queue 設定 after_processing_move_preserve_path を追加しました。after_processing='move' および after_processing_move_prefix とともに有効にすると、処理済みオブジェクトはファイル名だけにフラット化されるのではなく、宛先プレフィックス配下にソースパス全体を保持したまま移動されます。 #105354 (asya-ch).
  • 指定したプレフィックスに一致するすべてのパスを照合するための HTTP ハンドラー構成要素 url_prefix および full_url_prefix と、明示的な url_regexp、full_url_regexp、headers_regexp 要素を追加しました。従来の <url>regex:...</url> 形式も引き続きサポートされます。 #107492 (vitlibar).

認証

  • S3 のロールベースアクセス向けに、任意の external_id 認証情報を追加しました。#106941 (eliangidoni) 。
  • 証明書ベース認証のオブザーバビリティを向上させるため、TLS クライアント証明書の情報 (subject、シリアル番号、issuer、有効期間) を system.session_log テーブルに追加しました。#107679 (alexey-milovidov) 。

システムテーブル

  • system.iceberg_files テーブルを追加しました。このテーブルでは、各テーブルの現在のスナップショットに含まれるデータファイルまたは削除ファイルごとに1行として、Iceberg テーブルのファイル単位のメタデータを参照できます。#104415 (asya-ch).
  • 仮想 (what-if) スキップ索引を追加しました。CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ... を使用してセッションスコープの仮想スキップ索引を定義し、EXPLAIN WHATIF SELECT ... を使用して、マテリアライズせずにスキップ率とコストを見積もれます。定義済みの索引は、新しい system.hypothetical_indexes テーブルで確認できます。#104608 (yariks5s).
  • すべてのテーブルの CHECK および ASSUME 制約に関する情報 (制約名、種類、式を含む) を提供する system.constraints テーブルを追加しました。#105337 (PedroTadim).
  • システムの共通コンポーネント (関数、テーブルエンジン、データ型、設定、フォーマットなど) の埋め込みリファレンスドキュメントを1つのテーブルに集約し、ドキュメントを Markdown としてレンダリングする新しいシステムテーブル system.documentation を追加しました。#107463 (alexey-milovidov).

実験的機能

  • inner join 向けの実験的な dphyp 結合順序変更アルゴリズムを query_plan_optimize_join_order_algorithm 設定の選択肢として追加しました。また、結合順序の探索に上限を設け、上限を超えた場合はチェーン内の次のアルゴリズムにフォールバックする query_plan_optimize_join_order_max_searched_plans 設定を追加しました。従来の上限なしの探索動作を維持するには、0 に設定します。 #98798 (davenger).
  • テキスト索引に遅延ポスティングリスト適用モードを追加しました。SET allow_experimental_text_index_lazy_apply = 1 および SET text_index_posting_list_apply_mode = 'lazy' で有効にすると、ポスティングリストは Roaring Bitmap として完全にマテリアライズされるのではなく、カーソルベースの方式で packed-block 粒度にオンデマンドでデコードされます。これにより、選択性の高いテキスト索引クエリのメモリ使用量と CPU 時間を削減できます。 #100035 (fastio).
  • オプションのプレフィックスを付けて、メイン HTTP ポートに prometheus ハンドラーをアタッチできるようにしました。 #104975 (JTCunning).
  • 小さなスキップ索引サブストリームをパーツごとに単一の skp_idx.packed アーカイブにまとめる実験的な MergeTree 設定 packed_skip_index_max_bytes を追加しました。これにより、テーブルに多数のスキップ索引が定義されている場合の inode 枯渇を抑えます。書き込み時にサブストリームごとに判定され、シリアライゼーション後のサイズがしきい値未満のサブストリームはアーカイブに格納され、それ以上のものはスタンドアロンの skp_idx_<name>.idx2 / .mrk2 レイアウトのままとなります。1 つのパーツ内でレイアウトを混在させることもできます。全文索引はサポートされず、常にファイル単位で保存されます。デフォルトは 0 (パッキング無効) です。 #105321 (Algunenano).
  • ABI BUFFERED_V1 を使用する WebAssembly UDF の Buffers シリアライゼーションをサポートし、永続化される WASM UDF 関数設定として webassembly_udf_enable_fuel を追加しました。 #105574 (antonio2368).
  • マルチステージ分散クエリ実行: プランナーはクエリプランを scatter / broadcast / gather / shuffle exchange で接続されたステージに分割し、プランフラグメントをワーカーノードにディスパッチします。ステージ間のデータは TCP 経由でストリーミングされるか、共有オブジェクトストレージ内の一時ファイルを介して受け渡されます。この経路では、分散 shuffle、broadcast hash join、shuffle 集約、分散ソートがサポートされます。この機能は実験的で、デフォルトでは無効です。 #106020 (davenger).
  • 実験的な分散クエリプランエンジン (make_distributed_plan) では、ワーカーごとに異なるタスクディスパッチポートおよびストリーミング exchange ポートを使用できるようになりました。これは <remote_servers> 内でレプリカごとに stateless_worker_port および streaming_exchange_port を指定して設定します。未設定の場合は、従来のサーバーレベルのポート (stateless_worker_client.port および distributed_query.streaming_exchange_port) が使用されます。これにより、1 台のホストで複数のワーカーを実行できます。 #107885 (davenger).

パフォーマンス改善

JOIN のパフォーマンス

  • JOIN の後に選択性の高い LIMIT、TopN、または別の JOIN が続く場合、selector 索引とレプリケーション索引を遅延適用するようにしました。遅延 selector 索引を有効にするために必要な payload カラム数は、設定 query_plan_min_columns_for_join_lazy_indexing で制御します (0 は最適化が無効であることを意味します) 。この最適化を適用する LIMIT は、設定 query_plan_max_limit_for_join_lazy_indexing で制御します。 #98883 (m-selmi).
  • ASOF JOIN で parallel_hash 結合アルゴリズムを使用できるようにし、異なる等価キー値ごとにビルド処理を並列化しました。以前は、ASOF は無条件に parallel_hash の対象外でした。 #105375 (gregakinman).
  • ハッシュ結合の FixedHashMap を、probe 側の JOIN ランタイムフィルタとして共有します。ビルド側のハッシュテーブルが FixedHashMap である場合、または FixedHashMap に変換可能な場合は、ランタイムフィルタとしてパブリッシュされ、BuildRuntimeFilterStep が通常設定する Set/BloomFilter を置き換えます。新しい設定 enable_join_runtime_filter_shared_fixed_hash_table (デフォルトは true) で制御します。 #105640 (wudidapaopao).
  • DP JOIN の結合順序変更が、並列レプリカでも許可されるようになりました。 #105889 (nickitat).
  • JOIN でランタイムフィルタ (デフォルトで有効な enable_join_runtime_filters) を使用する場合のクエリプランを改善しました。結合順序変更のコストモデルが右部分木の WindowTransform (およびその他の行を保持するプランステップ) を考慮できるようになり、統計情報なしにフォールバックする代わりに、基となる行数とカラムごとの NDV を使用します。 #107229 (UnamedRus).

クエリ最適化

  • 希少なトークンの処理を最適化し、マルチトークン検索におけるテキスト索引解析のパフォーマンスを改善しました。#98226 (CurtizJ).
  • OpenSSL 3.x で行ごとに暗黙的に行われる OpenSSL プロバイダーのルックアップを回避し、encrypt、decrypt、halfMD5 関数のパフォーマンスを改善しました。#99105 (thevar1able).
  • 一時的なプロジェクションパーツ数とマージのオーバーヘッドを削減するため、MATERIALIZE PROJECTION 時に projection.calculate() の前でソースブロックをまとめます。5,000 万行のテーブルで約 3.4 倍高速化されます。#100047 (amosbird).
  • Approximate Runtime Filters および Bloom Filter Indices のパフォーマンスを改善しました。#100201 (cv4g).
  • LIMIT BY のカラムが ORDER BY のプレフィックスである場合、Sort 中に各並列ソート済みストリーム内で LIMIT BY を実行することで、ORDER BY ... LIMIT BY クエリを高速化します。これにより、最終的なソートマージおよび後続のパイプラインステップを通過する行数が削減されます。この最適化は、新しい設定 query_plan_push_limit_by_into_sort (デフォルトで有効) で制御されます。#104000 (nihalzp).
  • 単純な SELECT クエリのクエリごとのオーバーヘッド (パース、解析、プランニング) を削減しました。たとえば、単一の接続から実行する SELECT count() FROM hits は約 50% 高速化されます。#104513 (Algunenano).
  • 範囲チェック時に rb_max を繰り返し呼び出すことを回避し、UInt64 以外の groupBitmap 状態に対する bitmapContains のパフォーマンスを改善しました。#105960 (niyue).
  • bloom_filter 索引を持つ LowCardinality カラムの挿入パフォーマンスを改善しました。#106410 (EmeraldShift).
  • QBit データ型に対する L2DistanceTransposed および cosineDistanceTransposed 関数のパフォーマンスを改善しました。#106701 (rienath).
  • 多数のカラムを持つテーブルに対するクエリのクエリ解析パフォーマンスを改善しました。不要な場合は、ソーステーブル式全体を含むカラムノードハッシュを計算しません。約 1,200 カラムのテーブルに対するネストされた SELECT * サブクエリの解析は、現在約 50 倍高速です。#106957 (novikd).
  • BoringSSL から OpenSSL 3.x への移行 (24.4) で失われたパフォーマンスを回復し、encrypt、decrypt、tryDecrypt、aes_encrypt_mysql、aes_decrypt_mysql 関数のパフォーマンスを最大で 10 倍改善しました。#107339 (thevar1able).
  • 不要な文字列のマテリアライズを回避し、Array(LowCardinality(String)) に対する arrayElement と、キーまたは値が LowCardinality(String) のマップに対する map LIKE 関数の実行を改善しました。#107450 (EmeraldShift).
  • DateTime64 カラムをフィルタリングするクエリの CPU 使用率を削減し、スキップ索引の評価パフォーマンスを改善しました。#107707 (shankar-iyer).
  • positionCaseInsensitiveUTF8、ILIKE、multiSearchAnyCaseInsensitiveUTF8 を含む、大文字と小文字を区別しない部分文字列検索のパフォーマンスを改善しました。#107882 (Algunenano) 。
  • 予測テーブルで VectorWithMemoryTracking を使用するようになった際に発生した、ARM 上の FPC 浮動小数点 codec のスループット約 16% のリグレッションを修正しました。#108182 (groeneai) 。
  • 単一の論理削除 DELETE によってテーブル全体の query condition cache が無効化されるパフォーマンスリグレッションを修正しました。論理削除の対象になったことのあるテーブルに対して選択性の高いクエリを繰り返し実行すると、granule の pruning が行われなくなり、すべての mark を読み取るようになっていました。#112947 (fm4v) 。
  • カラム STATISTICS から col IN (...) の選択性を推定するコストに上限を設けました。これにより、単一クエリのプランニングに数百ミリ秒が追加される可能性がありました。推定器は、選択性の値を 1 つ得るためだけに Set を補完する col IN (subquery) 内のサブクエリを実行しなくなりました。代わりに、未構築の Set はスキップされます。新しい statistics_max_set_size_for_exact_selectivity_estimation 設定 (デフォルトは 10000) を超える Set では、Set のサイズとその境界 range から選択性が導出されるようになりました。#114389 (nickitat) 。

関数および集約のパフォーマンス

  • 長い主キーおよび高カーディナリティの主キーに対する主キー索引解析を最適化しました。長い主キーでは、索引解析の実行時間は主キーの長さではなく、主にクエリのフィルタ (実際に使用するキーカラム) の複雑さに依存するようになりました。そのため、ソートキーを拡張しても、少数のカラムのみでフィルタするクエリの索引解析に対する追加オーバーヘッドはごくわずかです。高カーディナリティの主キーでは、ClickHouse はキーカラムの選択的なプレフィックスのみをメモリに保持し、末尾のカラムは読み込みません。索引解析はキー全体ではなく、このメモリ内のプレフィックスのみを対象に行われるようになりました。この最適化はデフォルトで有効で、新しい設定 use_lightweight_primary_key_index_analysis で無効にできます。 #91836 (nihalzp).
  • 大きな集約状態 (例: groupArray) を持つ部分的な二段階集約結果のマージ時に、ピークメモリ使用量を削減しました。マージ完了まで各バケットの元の状態をすべて保持する代わりに、マージ中に段階的に解放します。 #102330 (yurifedoseev).
  • 高カーディナリティかつ均等に分散されたキー向けに、新しい GROUP BY 最適化を追加しました。グループ化キーのハッシュに基づいて行をスレッド間に分散するため、各スレッドはマージフェーズなしで、重複しないキーのサブセットを集約できます。有効にするには enable_sharding_aggregator = 1 を設定します。 #104233 (nihalzp).
  • すべてのストリームを1つにマージしてから制限を適用する代わりに、各パーティションのストリーム内で LIMIT BY を並列実行することで、パーティション化された MergeTree テーブルの LIMIT BY クエリを高速化しました。これは、パーティション式が LIMIT BY カラムの決定論的関数であり、LIMIT BY のグループが2つのパーティションにまたがらない場合に適用されます。新しい設定 allow_limit_by_partitions_independently (デフォルトで有効) で制御されます。 #105126 (nihalzp).
  • <cols> がテーブルのソートキーのプレフィックスである場合、または WHERE col = const によって先頭のカラムが固定されてプレフィックスとなる場合に、SELECT ... LIMIT N BY <cols> クエリを高速化しました。これを有効にすると、MergeTree は主キー順にデータを読み取り、LIMIT BY はまずソート済みストリームごとに O(1) のメモリでストリーミングモードのフィルタリングを行い、データの大部分を除外します。続いて、絞り込まれたデータに対して通常の LIMIT BY を実行し、最終結果を取得します。新しい設定 optimize_limit_by_in_order (デフォルトで有効) で制御されます。 #105135 (nihalzp).
  • 冗長なキー式を除去することで LIMIT BY クエリを高速化しました。他のキーの決定論的関数であるキーは削除され (例: LIMIT 5 BY x, f(x) は LIMIT 5 BY x になります) 、キーの単射関数はその引数に置き換えられます (例: LIMIT 5 BY toString(x) は LIMIT 5 BY x になります) 。これにより、行ごとに評価する式の数が減り、評価コストも低減します。新しい設定 optimize_limit_by_function_keys および optimize_injective_functions_in_limit_by (どちらもデフォルトで有効) で制御されます。 #106818 (nihalzp).
  • 関数解決キャッシュから冗長なクエリツリーのハッシュを削除し、多数の関数呼び出しや深くネストした関数呼び出しを含むクエリの解析を高速化しました。 #107516 (novikd).
  • 再帰 CTE の結果処理を並列化しました。大規模な WITH RECURSIVE の結果に対する GROUP BY やその他の操作は、単一スレッドに制限されなくなりました。 #107694 (alexey-milovidov).

ストレージおよび I/O パフォーマンス

  • 同じエンドポイントとバケットを使用する S3 クライアント間で cache を共有し、重複するリージョン検出を回避します。#96802 (zvonand).
  • blob を並列にコピーすることで、オブジェクトストレージのコピー性能を改善しました。#105089 (asya-ch).
  • file や s3 などのファイル系テーブル関数で One input format を使用する際に、ファイル内容を読み取らないようにしました。#105157 (niyue).
  • MergeTree の主キーおよびスキップ索引で、ifNull(key = 0, 0) や coalesce(key = 0, 0) のように ifNull または coalesce で条件をラップしたフィルタに対して、グラニュールを枝刈りできるようになりました。このような述語は、NULL になる可能性のある比較を確定的なブール値に変換するためにクエリジェネレーターが生成することが多く、以前は索引解析で認識できなかったため、グラニュールをスキップできませんでした。これにより、既存の allow_key_condition_coalesce_rewrite 設定 (デフォルトで有効) が拡張されます。#106272 (andyzzhao).
  • BYTE_STREAM_SPLIT でエンコードされた Parquet の FLOAT および DOUBLE カラムのデコード性能を改善しました。#106376 (Algunenano).
  • 多数のアクセスエンティティ (行ポリシー、ロール、quota、設定プロファイル) が同時に変更された場合に、レプリケートされたアクセスストレージでログインやクエリ開始が長時間停止する問題を修正しました。エンティティごとの cache は、変更されたエンティティごとではなく通知バッチごとに一度だけ再計算されるようになり、アクセスロックを数分間保持する可能性があった二次的な処理を排除しました。#107672 (azat).
  • s3 などのテーブル関数を介してオブジェクトストレージから多数の小さなファイルを読み取る際に、プリフェッチが停止して同期読み取りにフォールバックし、多数の小さなファイルに対するシングルスレッドまたは低 Concurrency の読み取りが大幅に遅くなるパフォーマンスリグレッションを修正しました。#108872 (fm4v).
  • オブジェクトストレージの読み取りがファイルシステムキャッシュ (filesystem_cache_name) を経由する場合に、初回の小さなオブジェクトのプリフェッチを有効にしました。以前は、S3Queue の取り込みなどで多数の小さなファイルを読み取る際、ファイルシステムキャッシュが有効でも同期的なままでレイテンシーの影響を受けていました。#109478 (fm4v).
  • オンディスクサイズを考慮することで、Map サブカラムに対する PREWHERE 最適化を改善しました。#110623 (Avogar).
  • ReplacingMergeTree では、ORDER BY がなくても、FINAL、フィルタ、小さな LIMIT を含むクエリに遅延マテリアライゼーションが適用されるようになりました。#110722 (KochetovNicolai).
  • 多数のパーティションにまたがる非同期挿入フラッシュ時の重複排除にかかる CPU 時間を削減しました。#111150 (valerypetrov).
  • テーブルに LowCardinality カラムがある場合に、同じ MergeTree パーツに対して多数の独立した小規模読み取りを実行するクエリで発生する CPU リグレッションを修正しました。パーツに単一の共有 Dictionary があるかを判定するチェックは、以前は各読み取りタスクでパーツ全体のすべての mark を走査していましたが、現在は二分探索により同一 mark の各連続範囲を見つけます。index_granularity が小さいテーブルに対するこの形式のクエリは、26.6 以降、最大で数倍遅くなっていました。#116134 (groeneai).

メモリ最適化

  • Enumカラムを含むテーブルにおいて、Enum型のメタデータに使用するメモリを最大10分の1に削減しました。値から名前へのルックアップは同等以上の速度を維持する一方、パースおよびデシリアライゼーション時の名前から値へのルックアップは遅くなる場合があります。 #95668 (qoega).
  • バックアップエントリの書き込み時にファイル情報の内部リストをコピーしないようにすることで、BACKUPのピークメモリ使用量を削減しました (数百万個のファイルを含むバックアップで特に効果があります) 。 #111162 (jkartseva).

改善

クエリと SQL

  • クエリプランから未使用のカラムを削除する際、カラム名ではなく位置でカラムを識別するようにしました。これにより、カラム名が重複している場合でも未使用カラムを削除できます。 #100586 (antaljanosbenjamin).
  • PostgreSQL / SQL 標準との互換性のため、currentUser() の大文字・小文字を区別しないエイリアスとして SESSION_USER を追加しました。 #106081 (takumihara).
  • PostgreSQL ワイヤプロトコル経由で実行されるクエリのキャンセル遅延を短縮しました。KILL QUERY は、chunk 全体がクライアントに送信されるまで待つのではなく、単一の chunk 内で出力のシリアライゼーションを中断するようになりました。 #106535 (rvasin).
  • 定数引数を持つ lambda (例: arrayMap(t -> t.2, ...)) を含む、serialize_query_plan = 1 を指定した分散クエリで発生する ILLEGAL_TYPE_OF_ARGUMENT エラーを修正しました。ActionsDAG の INPUT ノードにある定数カラムが、クエリプランのシリアライゼーション中も保持されるようになりました。 #107124 (alexey-milovidov).
  • MySQL ワイヤプロトコル経由で実行されるクエリのキャンセル遅延を短縮しました。KILL QUERY は、chunk 全体がクライアントに送信されるまで待つのではなく、単一の chunk 内で出力のシリアライゼーションを中断するようになりました。 #107228 (rvasin).

関数

  • EXPLAIN SYNTAX の explain 出力で、演算子が一貫して関数呼び出し形式でフォーマットされるようになりました (例: 1 + 2 ではなく plus(1, 2)) 。#94681 (1abdelhalim).
  • PostgreSQL 形式の expr OP SOME(array) / expr OP ALL(array) (右辺がサブクエリではない形式) がサポートされるようになりました。=/<> の場合は has / NOT has に、それ以外の比較演算子の場合は arrayExists / arrayAll のラムダ式に書き換えられます。any は集約関数でもあるため、配列形式では ANY は使用できません。代わりに SOME を使用してください。ANY/SOME/ALL のサブクエリ形式は、引き続き IN / NOT IN に変換されます。#105129 (alexey-milovidov).
  • テキスト索引で関数 multiSearchAny、multiSearchAnyUTF8、multiMatchAny がサポートされるようになりました。また、関数 match のテキスト索引解析が改善され、選択グループを含むパターンでより多くのグラニュールをスキップできるようになりました。#106279 (CurtizJ).
  • 関数 h3PolygonToCells は、MultiPolygon 内のすべての Polygon に対して配列サイズの上限を適用し、基盤となる H3 ライブラリの戻りコードを検証するようになりました。また、空の結果を暗黙的に返す代わりに、MultiLineString 引数を拒否するようになりました。#106399 (Algunenano).
  • 集約関数 contingency、cramersV、cramersVBiasCorrected、theilsU の状態をデシリアライズする際に、保存されたカウントが整合性のある分割表を構成していることを検証し、そうでない場合は CORRUPTED_DATA 例外をスローするようになりました。#107185 (nihalzp).
  • クエリプランオプティマイザのカーディナリティ推定を改善しました。決定論的な単一引数関数 (例: toYear(date)) によって生成されるカラムは、統計情報がないままになるのではなく、引数の異なる値の数を上限として継承するようになりました。これにより、より正確な結合順序の変更が可能になります。#107757 (davenger).

テーブルエンジンとストレージ

  • パーティションの割り当て後も短いポーリング間隔を使い続けていた Kafka テーブルエンジンのコンシューマーを修正し、設定された kafka_poll_timeout_ms に戻るようにしました。これにより、リバランス後の過剰な空ポーリング、小さなパーツの挿入、追加のマージオーバーヘッドを回避できます。 #100431 (sugaf1204).
  • Iceberg や DeltaLake などのデータレイクテーブルエンジンで、cache でラップされた S3 および Azure ディスクを使用できるようになりました。これにより、繰り返しの読み取りでファイルシステムキャッシュを利用できます。 #102017 (RinChanNOWWW).
  • 初回の PREWHERE 選択後に導入されたフィルタ (predicate pushdown、ランタイムフィルタ、または明示的な PREWHERE とプランナーが設定した WHERE) を、MergeTree 読み取りの上に別個の Filter ステップとして残すのではなく、2 回目のオプティマイザーパスで既存の PREWHERE にマージできるようにしました。 #105445 (yariks5s).
  • wait_for_part_commit_in_dependent_materialized_views 設定を追加しました。有効にすると、ソースを再度結合する連鎖的な materialized view から、現在挿入中の行を参照できます。 #105943 (ahmadov).
  • タイムゾーンオフセットの時および分の部分を取得する PostgreSQL 互換の EXTRACT(TIMEZONE_HOUR FROM dt) と EXTRACT(TIMEZONE_MINUTE FROM dt)、およびインターバルから値を抽出する EXTRACT(<unit> FROM INTERVAL n <unit>) / date_part('<unit>', INTERVAL n <unit>) を追加しました。 #106227 (vinayakj592).
  • SYSTEM RESTART DISK <name> を実装しました。ディスクのインメモリメタデータを再読み込みし、そのディスク上にある readonly-replica テーブルのデータパーツを再スキャンします。これにより、共有 plain_rewritable ストレージ上のテーブルの readonly レプリカは、refresh_parts_interval を待ったりサーバーを再起動したりせずに、別のサーバーによって書き込まれたデータをオンデマンドで確認できます。 #106645 (jrdi).
  • JSON advanced shared data に対する不要なマークファイルの読み込みをスキップします。 #107051 (Avogar).
  • MaterializedPostgreSQL データベースエンジン用に、作成時に指定する materialized_postgresql_use_extended_date_and_time_types 設定を追加しました。デフォルトでは (有効) 、PostgreSQL の date/timestamp カラムは Date32/DateTime64 として推論されます。CREATE DATABASE 時にこれを 0 に設定すると、より狭い Date/DateTime 型が推論されます。この設定は MaterializedPostgreSQL テーブルエンジンには該当しません。 #107428 (alexey-milovidov).
  • MergeTree で、ブロックごとに異なる codec を使用する圧縮ストリームを読み取れるようになりました。これは Adaptive Codec Selection の読み取り側の前提条件です。 #108592 (rienath).
  • transform_null_in = 1 で IN セットに NULL 値が含まれない場合、直接索引付けされたカラムに対する IN predicates で bloom_filter スキップ索引を使用します。以前はこのようなクエリでは索引がスキップされ、フルスキャンが必要でした。 #111329 (groeneai).

S3 とオブジェクトストレージ

  • 例外を送出しない isGranted 経路 (checkAccessWithFilter) を含め、許可されたすべてのアクセスチェックで使用された権限を system.query_log.used_privileges に記録するようになりました。以前は、例外を送出するエントリポイント (checkAccess / checkGrantOption) でチェックされた権限のみが記録されていたため、file / s3 / azure / url テーブル関数を使用する DESCRIBE、CREATE TABLE AS などのクエリでは、READ ON FILE / READ ON S3 / READ ON AZURE / READ ON URL が監査ログに記録されませんでした。アクセス制御の動作に変更はありません。 #104693 (alexbakharew).
  • 最終的な S3 マルチパートアップロードリクエストをタスクトラッカー経由で非同期に完了するようにし、finalize で直列に実行するのではなく、最後のパートのアップロードと並行して実行できるようにしました。 #105487 (asya-ch).
  • S3Queue および AzureQueue の persistent_processing_node_ttl_seconds 設定のデフォルト値を 1 時間から 6 時間に引き上げ、長時間実行される処理や再起動後の処理でバケットのロックが早期に失われることを防止しました。 #106838 (kssenii).
  • s3_storage_class_name 設定で、STANDARD および INTELLIGENT_TIERING に加え、REDUCED_REDUNDANCY、STANDARD_IA、ONEZONE_IA、GLACIER_IR、EXPRESS_ONEZONE の値をサポートしました。 #107251 (adityaksolves).
  • オブジェクトストレージテーブル (例: S3) の Hive パーティション化サンプルパスは、CREATE/ATTACH 時ではなく、テーブルの初回使用時に解決されるようになりました。これにより、到達不能なエンドポイントがテーブルの作成やサーバーの起動を妨げることがなくなります。 #111842 (evillique).

設定と構成

  • 互換性設定 file_like_engine_default_partition_strategy で、Hiveパーティション方式がデフォルトになりました。#86746 (kssenii).
  • テキスト索引のデフォルトパラメータを制御する4つの新しいMergeTreeテーブル設定 text_index_dictionary_block_size、text_index_dictionary_block_frontcoding_compression、text_index_posting_list_block_size、text_index_posting_list_codec を追加しました。これらの設定により、各索引定義でパラメータを指定することなく、テーブルレベルでテキスト索引の動作を調整できます。索引ごとに明示的に指定した引数は引き続き優先されます。#100626 (CurtizJ).
  • output_format_pretty_grid_charset が UTF-8 の場合に、表形式の Pretty フォーマットのパディングを U+00A0 NO-BREAK SPACE で描画する設定 output_format_pretty_use_nbsp_for_padding を追加しました。これにより、通常のスペースを折りたたむツールでも、コピーした Pretty 出力の表の配置を維持できます。この設定はデフォルトで無効であり、ASCII 文字セットの出力では通常のスペースが使用されます。#103559 (ashrithb).
  • analyzer_compatibility_allow_non_aggregate_in_having 設定で旧アナライザとの互換性をサポートしました。有効にすると、非集約条件はHAVINGからWHEREへ移動されます。#104232 (novikd).
  • ターゲットテーブルに table_readonly = 1 が設定されている場合でも、OPTIMIZE TABLE ... ON CLUSTER などのDDLがハングしなくなりました。この設定では新たに専用エラーコード TABLE_IS_PERMANENTLY_READ_ONLY がスローされ、DDLWorker はこれを再試行不可として扱います (ReplicatedMergeTree のZooKeeperが一時的に切断された際に発生する一過性の TABLE_IS_READ_ONLY とは異なります) 。また、table_readonly 設定は、作成時および ALTER MODIFY SETTING 経由のいずれの場合も、ReplicatedMergeTree に対して明示的に拒否されるようになりました。#105109 (alexey-milovidov).
  • MergeTree のソートキーにおける降順ソート (例: ORDER BY (time DESC, key)) が常にサポートされるようになり、廃止された実験的設定 allow_experimental_reverse_key は不要になりました。#106440 (nikitamikhaylov).
  • 既存の CREATE QUOTA ... KEYED BY normalized_query_hash DDL構文に対応し、静的サーバー設定 (users.xml) で定義されたQUOTAで keyed_by_normalized_query_hash をサポートしました。#107654 (alexey-milovidov).
  • 互換性設定は廃止された設定を適用しなくなったため、それらを変更済みとしてマークしたり、廃止された設定に関する警告を出したりしなくなりました。#107737 (UberDever).
  • 設定 analyzer_compatibility_multiple_joins_qualify_column_names (デフォルトは false) を追加しました。有効にすると、クエリの FROM 句に2つ以上の JOIN が含まれる場合、アナライザによって生成される結果カラム名は旧アナライザの複数JOIN書き換えを模倣します。* から展開されたカラムには <alias-or-table>.<column> という名前が付けられ、SELECT リスト内のエイリアスなしカラム参照は記述どおりの名前を維持します。これにより、SELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...) のように修飾名を参照する外側のクエリも、旧アナライザと同様に動作します。また、group_by_use_nulls を ROLLUP、CUBE、または GROUPING SETS と組み合わせた場合に、* から展開されたカラムの修飾済み結果カラム名がアナライザで失われ、結果カラム名が重複してそれらのカラムへの外側からの参照が壊れる問題も修正しました。#110746 (novikd).
  • analyzer_compatibility_apply_final_to_all_joined_tables 設定を追加しました。この設定により、JOIN の最も左のテーブルの FINAL 修飾子が他の結合テーブルにも適用される従来の動作を復元できます。この設定は設定変更履歴に登録されているため、26.6 より前のバージョンとの compatibility では従来のセマンティクスが自動的に復元されます。 #111589 (fm4v).
  • テキスト索引のオンディスクフォーマットのバージョン (v0_initial、v1_with_codec、v2_with_positions) を制御する新しい MergeTree 設定 text_index_version を追加しました。ローリングアップグレード中またはダウングレード前には、古いサーバーでも読み取れるフォーマットで新しいサーバーがテキスト索引パーツを書き込み続けられるよう、古いバージョンに設定してください。互換性設定により自動的に調整されます。 #111803 (CurtizJ).

システムテーブルと監視

  • DataLakeCatalog 経由でテーブルをクエリした際に、system.query_log の used_storages にストレージエンジン名を記録するようになりました。#100706 (melvynator).
  • プロジェクションのマージ進行状況を公開するため、system.merges に current_projection、current_projection_progress、projections_completed、projections_remaining カラムを追加しました。#102611 (amosbird).
  • テーブルエンジンに埋め込みドキュメントが追加され、system.table_engines テーブルの新しい description、syntax、examples、introduced_in、related カラムを通じて参照できるようになりました。#106177 (alexey-milovidov).
  • データベースエンジンに埋め込みドキュメントが追加され、system.database_engines テーブルの新しい description、syntax、examples、introduced_in、related カラムを通じて参照できるようになりました。#106178 (alexey-milovidov).
  • データ型に埋め込みドキュメントが追加され、system.data_type_families テーブルの新しい description、syntax、examples、introduced_in、related カラムを通じて参照できるようになりました。#106180 (alexey-milovidov).
  • 入出力フォーマットに埋め込みドキュメントが追加され、system.formats テーブルの新しい description、examples、introduced_in、related カラムを通じて参照できるようになりました。#106181 (alexey-milovidov).
  • 集約関数コンビネータに埋め込みドキュメントが追加され、system.aggregate_function_combinators テーブルの新しい description、syntax、examples、introduced_in、related カラムを通じて参照できるようになりました。#106185 (alexey-milovidov).
  • 利用可能なデータスキッピングインデックスの型と埋め込みドキュメント (description、syntax、examples、introduced_in、related) を一覧表示する新しい system.data_skipping_index_types テーブルを追加しました。#106186 (alexey-milovidov).
  • 利用可能なディスクの型と埋め込みドキュメント (description、syntax、examples、introduced_in、related) を一覧表示する新しい system.disk_types テーブルを追加しました。#106187 (alexey-milovidov).
  • MergeTree ファミリーのテーブルに格納されたデータの合計非圧縮サイズを報告する非同期メトリクス TotalUncompressedBytesOfMergeTreeTables および TotalUncompressedBytesOfMergeTreeTablesSystem を追加しました。#106364 (alexey-milovidov).
  • サーバー全体のメモリ制限に達したタイミングを運用担当者が監視できるよう、GlobalMemoryLimitExceeded プロファイルイベントを追加しました。#106466 (sacheendra).
  • 子孫プロセスおよびアイドル状態のプールワーカーを含む、executable および executable_pool ユーザー定義関数の常駐メモリ (VmRSS) と実行中のプロセス数を報告する非同期メトリクス ExecutableUserDefinedFunctionMemoryResidentBytes および ExecutableUserDefinedFunctionProcesses を追加しました。#107300 (HanziJiang).
  • デフォルトで有効なshow_remote_databases_in_system_tablesを追加しました。これにより、ユーザーはsystem.tables、system.columns、system.completionsでMySQLおよびPostgreSQLデータベースを非表示にできます。show_data_lake_catalogs_in_system_tablesは引き続きDataLakeCatalogの表示のみを制御します。#104416 (pamarcos). #109082 (pamarcos).

ClickHouse Keeper

  • Keeper を全体として約2倍高速化する各種変更 (バッチ処理の改善、リーダーへのメッセージ送信のパイプライン化、ログ追記のパイプライン化) 。#101757 (al13n321)。
  • ウォッチに関する Keeper プロファイルイベント (サーバー側およびクライアント側) を追加。#105336 (scanhex12)。
  • ローカルの ClickHouse Keeper スナップショットに関する情報を提供する、Keeper 専用の新しい system.keeper_snapshots テーブルを追加。#105571 (mstetsyuk)。
  • ローカルの ClickHouse Keeper changelog (Raft ログ) ファイルに関する情報を提供する、Keeper 専用の新しい system.keeper_changelogs テーブルを追加。#105617 (mstetsyuk)。
  • Keeper 専用の system.keeper_cluster テーブルを追加。現在の Keeper から見た各 Raft クラスター メンバーにつき1行を含みます。#105646 (mstetsyuk)。
  • KeeperMemoryStorage を使用して ClickHouse Keeper で受信したスナップショットを適用する際のピークメモリ使用量を削減。#105851 (antonio2368)。
  • NuRaft の未コミットログエントリの admission 制限および append-entries の後方プローブのスロットリング用に、Keeper の coordination_settings を追加。#106108 (antonio2368)。

メモリ管理

  • パーサーがステートメントの末尾を越えてバックトラックした際に、隣接するメモリのバイトが含まれる可能性があった構文エラーメッセージを修正しました。#105086 (groeneai) 。
  • バックアップを開く際 (RESTORE 時、またはインクリメンタル BACKUP のベースとして) のメモリ使用量を削減しました。.backup メタデータは、インメモリの XML ドキュメントツリーに読み込むのではなく、ストリームとして解析されるようになりました。これにより、大規模なバックアップ、特にインクリメンタルバックアップで、数 GB に及ぶ DOM ツリーの割り当てを回避できます。#109107 (jkartseva) 。
  • BACKUP の完了時のピークメモリ使用量を削減しました。バックアップメタデータの書き込み時に、すべてのファイルの情報を一時ベクターにコピーしなくなりました。これにより、数百万ファイルのバックアップで一時的に数 GB を消費することがなくなります。情報はその場で反復処理されます。#109861 (jkartseva) 。

データフォーマット

  • 8 ビット/16 ビット/32 ビット/64 ビット整数のバリアントに対応する Avro Fixed フィールドを挿入できるようになりました。#98139 (patrickpichler) 。
  • AvroConfluent フォーマットでは、最初のネットワーク障害で INSERT を中止するのではなく、一時的な障害 (トランスポートタイムアウト、接続拒否、DNS エラー、HTTP 5xx/408/429) が発生した際に、Confluent スキーマレジストリ HTTP クライアントへのリクエストを指数バックオフで再試行するようになりました。新しい設定 format_avro_schema_registry_max_retries (デフォルトは 5) と format_avro_schema_registry_retry_initial_backoff_ms (デフォルトは 100) でこのポリシーを制御します。スキーマ検証エラー (HTTP 409、形式が不正な Avro JSON) は引き続き致命的です。#106661 (groeneai) 。
  • Apache Arrow を介して返されるエラーについて、元の ClickHouse エラーコードを保持しました。#107267 (azat) 。

名前付きコレクションと Dictionary

  • mysql テーブル関数、MySQL テーブルエンジン、MySQL データベースエンジン、Dictionary の SOURCE(MYSQL)、および名前付きコレクションに enable_compression 設定を追加しました。有効にすると、ClickHouse は接続を介して転送されるすべてのデータについて、MySQL プロトコルレベルの圧縮をネゴシエートします。#103229 (bernardlim).
  • 利用可能な Dictionary レイアウトと埋め込みドキュメント (description、syntax、examples、introduced_in、related) を一覧表示する system.dictionary_layouts テーブルを追加しました。#106182 (alexey-milovidov).
  • 利用可能な Dictionary ソースと埋め込みドキュメント (description、syntax、examples、introduced_in、related) を一覧表示する system.dictionary_sources テーブルを追加しました。#106184 (alexey-milovidov).
  • 実際に使用される名前付きコレクションのストレージタイプを、system.server_settings の named_collections_storage.type および getServerSetting('named_collections_storage_type') で確認できるようになりました。#111806 (pamarcos).

その他の改善

  • エラーメッセージ内のテーブル名候補を改善しました。同じ名前をそのまま提案しないようにし、候補にデータベース名を含めるようになりました (例: “Maybe you meant other_db.my_table?”) 。 #95116 (matt-metivier).
  • FROM 句のないクエリで解決できない識別子に対するエラーメッセージを改善し、FROM 句の追加を提案するようにしました。 #101769 (Onyx2406).
  • 主キーカラムで IN サブクエリを使用する PREWHERE において、Granule pruning に主キーインデックスが使用されず、関連する granule だけでなくテーブル全体をスキャンしていた問題を修正しました。 #102570 (nikitamikhaylov).
  • リフレッシャブルmaterialized view は、EXCHANGE TABLES でターゲットテーブルを置き換え、古いテーブルを削除した後もリフレッシュを継続するようになりました。以前は古いテーブルの UUID を保持していたため、UNKNOWN_TABLE 例外によりリフレッシュが失敗することがありました。 #102724 (seva-potapov).
  • enable_join_transitive_predicates をデフォルトで有効化しました。 #103724 (davenger).
  • リフレッシャブルmaterialized view で REFRESH DEPENDS ON をサポートし、時間ベースのスケジュールではなく、別の RMV のリフレッシュを契機にリフレッシュできるようになりました。 (REFRESH EVERY ... DEPENDS ON はすでに存在していましたが、このユースケースでは信頼性の高い利用ができませんでした。) CREATE MATERIALIZED VIEW のドキュメントを参照してください。 #104440 (al13n321).
  • 繰り返される processor チェーンを compact 化する EXPLAIN PIPELINE オプションを追加しました。 #104662 (niyue).
  • Oracle、MySQL、Snowflake との互換性のため、regexpExtract の大文字・小文字を区別しないエイリアスとして REGEXP_SUBSTR を追加しました。 #105122 (alexey-milovidov).
  • EXTRACT(unit FROM expr) の構文糖として date_part('unit', expr) を追加しました。標準の interval kind と PostgreSQL の拡張 (epoch、dow、doy、isodow、isoyear、century、decade、millennium) をすべてサポートしています。 #105127 (alexey-milovidov).
  • QueryConditionCache が、PREWHERE を部分的に通過する読み取りバッチ内でも、個別にフィルタリングされた granule を記録するようになりました。これにより、同じ condition を持つ後続のクエリで再読み取りされるマーク数を削減します。 #105335 (hanfei1991).
  • 数値 predicate 関数で BFloat16 をサポートしました。 #105391 (mohhddhassan).
  • 数値の最小値・最大値、平均文字列長、該当する場合は NULL の数を格納する、コンパクトなカラムごとの統計情報である basic 統計情報をサポートしました。 #106048 (hanfei1991).
  • CREATE TABLE と同様に、ALTER TABLE ... ADD/MODIFY COLUMN で末尾に指定する NULL / NOT NULL modifier をサポートしました。 #106150 (takumihara).
  • PREWHERE オプティマイザは、選択性を推定する前に同じカラムセットを参照する結合子をグループ化するようになりました。これにより、a > 2500 AND a < 2502 のような条件は、独立した 2 つの述語 (各約 50%) ではなく、結合された範囲 (選択性約 0.02%) としてまとめて評価されます。カラム STATISTICS が利用可能な場合、PREWHERE 条件をより正確な順序で評価できるようになります。 #106337 (hanfei1991).
  • スタックトレースが実際に空の場合、例外メッセージに “Stack trace (when copying this message, always include the lines below):” という前置きが出力されないようにしました。 #106524 (alexey-milovidov).
  • 暗号化ディスク上の CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM) で、データをハードリンクする代わりにコピーしていた問題を修正しました。 #106731 (nikitamikhaylov).
  • catalog_type = 'onelake' を使用する DataLakeCatalog データベースで、デフォルトで OneLake Blob エンドポイント (.blob.fabric.microsoft.com) を使用してテーブルデータを読み取るように修正しました。以前の DFS エンドポイント (.dfs.fabric.microsoft.com) の動作を維持するには、onelake_use_blob_endpoint = false を設定します。 #106843 (scanhex12).
  • 高いログレートでの非同期ロギングにおける CPU オーバーヘッドを削減しました。すべてのメッセージでログコンシューマーに通知するのではなく、キューが空から非空に遷移した場合にのみ通知します。 #107352 (nikitamikhaylov).
  • MySQL ハンドシェイクにおける auth_response の長さの読み取りを修正しました。長さバイトが符号付き char として読み取られていたため、>= 128 の場合に数 GB の値として解釈されていました。 #107384 (uwezkhan).
  • MaterializedPostgreSQL は、精度が 76 を超える PostgreSQL の numeric(p, 0) カラム (例: 256 ビット整数に使用される numeric(78, 0)) を、“Precision too big” エラーで失敗させる代わりに ClickHouse の Int256 にマッピングするようになりました。Int256 に収まらない値は、明確なエラーで拒否されます。 #107431 (alexey-milovidov).
  • Nullable(Tuple(...)) は Beta になりました。デフォルトでは無効で、使用するには enable_nullable_tuple_type = 1 を設定します。 #107754 (nihalzp).
  • 非同期 INSERT では、trace/debug レベルで query_id の完全なリストをログに記録しなくなりました。これは 26.2 以降、非同期 INSERT トラフィックが多いサービスで text_log を肥大化させる可能性がありました。詳細な行は現在 test レベルで出力されます。 #107852 (CheSema).
  • 無効化された優先度エントリを速やかに解放することで、ファイルシステムキャッシュのメタデータ使用量を削減しました。 #107903 (kssenii).
  • Array カラム上の bloom_filter スキップ索引は、すでに hasAny(column, set) および has(column, const) で使用されていたのと同様に、arrayJoin(column) IN (set)、arrayJoin(column) GLOBAL IN (set)、および arrayJoin(column) = const でも使用されるようになりました。以前は、これらの arrayJoin ... 形式ではフルスキャンにフォールバックしていました。 #109536 (groeneai).
  • IS NOT DISTINCT FROM と IS TRUE で、= と同様にプライマリキーおよびminmax索引を使用してgranuleをプルーニングするようになりました。以前は、k IS NOT DISTINCT FROM 42 と (k = 42) IS TRUE ではすべてのgranuleがスキャンされていました。 #110006 (groeneai).

バグ修正

JOIN の修正

  • ARRAY JOIN で内部的に使用される nested 関数がカラム型から LowCardinality を取り除き、出力時に Array(LowCardinality(String)) が Array(String) になる問題を修正しました。#98974 (Onyx2406).
  • 別のテーブルとカンマ結合 (クロス結合) した RIGHT/LEFT JOIN (例: t1 RIGHT JOIN t2 ON t1.c = t2.c, t3) で、結合順序の再配置により一致しない行が暗黙的に削除される問題を修正しました。以前は、クエリは外部結合の結果ではなく内部結合の結果を返していました。#101684 (groeneai).
  • JOIN 内で集約を含む VIEW を使用するクエリの実行時に発生する可能性があった LOGICAL_ERROR (“Port is not connected”、コード 49) を修正しました。#102574 (Ergus).
  • 新しいアナライザで GLOBAL IN および GLOBAL JOIN クエリに対する max_rows_to_transfer と max_bytes_to_transfer が暗黙的に無視される問題を修正しました。マテリアライズされた外部テーブルが設定された上限を超えると、旧アナライザと同様に、これらの設定により SET_SIZE_LIMIT_EXCEEDED が発生するか、transfer_overflow_mode に応じて処理が中断されるようになりました。#104119 (groeneai).
  • 最適化によってルックアップカラムの順序が変更された場合に、右側が MergeTree テーブルである join_algorithm = 'direct' を使用した JOIN クエリで、誤った結果が返される、またはクエリが失敗する問題を修正しました。#104174 (groeneai).
  • JOIN の後に arrayJoin と ORDER BY ... LIMIT を組み合わせたクエリが、暗黙的にゼロ行を返す可能性があるバグを修正しました。arrayJoin は行数を変更する可能性があるため、持ち上げる式に arrayJoin が含まれる場合、関数評価を SortingStep より上に持ち上げるクエリプラン最適化は適用されなくなりました。#104558 (groeneai).
  • ARRAY JOIN と併用した場合に、一部のケースで負の LIMIT BY により発生する論理エラーを修正しました。#105403 (nihalzp).
  • 新しい互換性設定 analyzer_compatibility_prefer_alias_over_subcolumn を追加しました (デフォルトでは無効) 。有効にすると、新しいアナライザは複数部分からなる識別子について、Tuple サブカラムまたはドット付きカラムとの一致よりもエイリアス接頭辞として解釈することを優先し、以前のインタープリタの動作を復元します。これにより、結合に対して SELECT * を使用する CTE/サブクエリ内の内部テーブルと同名のテーブルを結合するクエリで、アスタリスクによって名前変更されたカラム (例: b.id) が内部テーブルの識別子を外側のスコープに漏出させて発生する AMBIGUOUS_IDENTIFIER などのエラーを回避します。#105491 (vdimir).
  • 外部結合と、その外部結合で NULL を提供する側を参照する後続の内部結合を組み合わせるクエリで、誤った結果が返される可能性がある問題を修正しました。結合順序の再配置により、内部結合の条件を外部結合の ON 句に取り込むプランが選択される可能性がありました。#105992 (vdimir).
  • 旧アナライザとの互換性を向上しました。テーブルに x.a Array, x.b Array, x String のようなカラムがある場合、ARRAY JOIN x では配列を優先するようになりました。#106069 (KochetovNicolai).
  • enable_parallel_replicas、query_plan_use_new_logical_join_step、および query_plan_optimize_join_order_algorithm = 'greedy' が有効な場合に、左側の MergeTree テーブルが空の INNER JOIN クエリで例外が発生する問題を修正しました。#106338 (KochetovNicolai).
  • JOIN グラフ内の 2 つのリレーションでカラム名が重複している場合に、並列レプリカで実行される JOIN で発生する可能性があった JOIN 順序オプティマイザの論理エラー (Left and right columns have same names) を修正しました。#106418 (alexey-milovidov).
  • 一意の右側キー、混在する ON 条件、および小さい max_joined_block_size_rows を指定した LEFT JOIN における JoiningTransform の LOGICAL_ERROR (Invalid number of rows in Chunk) を修正しました。#106928 (groeneai).
  • JOIN キーに Tuple、Array、または Map 内にネストされた Variant または Dynamic 型が含まれ、JOIN の右側に異なる値が 1 つだけある場合に、JOIN ランタイムフィルタで発生する例外 (LOGICAL_ERROR) を修正しました。#106931 (groeneai).
  • Dynamic に対する JOIN によって構築された Dynamic カラムに対して関数を実行する際に発生する LOGICAL_ERROR (Expected the argument N to have X rows, but it has Y) を修正しました (例: RIGHT/FULL JOIN で JOIN されない行や、JOIN に非相関化された相関 EXISTS サブクエリ) 。#107095 (groeneai).
  • JOIN ... USING キーに対する修飾アスタリスク (t.*) が集約関数に渡され、外部 JOIN の反対側に Nullable キーがある場合に発生する Bad cast from type DB::IColumn const* to DB::ColumnNullable const* 論理エラー例外を修正しました (join_use_nulls = 0) 。#107129 (groeneai).
  • 選言 (部分 predicate) のプッシュダウン最適化が、JOIN によって型が拡張された USING キーに対する条件をプッシュダウンする際に発生する論理エラー (Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8) を修正しました。また、未知の識別子を参照する定数畳み込み可能な if/multiIf 分岐を含む JOIN ... USING クエリで識別子を解決する際に、アナライザで発生するサーバークラッシュ (セグメンテーションフォールト) も修正しました。#107407 (groeneai).
  • JSON カラムに対して誤った結果を生成する JOIN ランタイムフィルタを修正しました。#107663 (Avogar).
  • 修飾アスタリスク (t.*) が JOIN USING キーを選択し、その JOIN が PASTE/CROSS/カンマ JOIN または外部 ON JOIN の配下にネストされている場合に発生する Bad cast from type DB::ColumnNullable to DB::ColumnVector<...> 論理エラー例外を修正しました (join_use_nulls = 0) 。#108043 (groeneai).
  • 新しいアナライザで、JOIN 内の 1 つのテーブルに指定した FINAL (例: FROM t1 FINAL JOIN t2) が他の結合先テーブルにも誤って適用され、そのようなクエリが遅くなる可能性があったバグを修正しました。#108979 (vdimir).
  • analyzer_compatibility_join_using_top_level_identifier = 1 を指定すると、JOIN ... USING 内の識別子を、SELECT リスト内の部分式で定義されたエイリアスから解決できるようになりました (例: SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id)) 。これは旧アナライザの動作と一致します。以前は最上位のプロジェクションエイリアスのみが考慮され、この設定を有効にしていても、このようなクエリは UNKNOWN_IDENTIFIER 例外で失敗していました。一致するエイリアスがネストされている場合にも、この設定を提案するエラーヒントが表示されるようになりました。#110739 (novikd).
  • 右側のカラムに対する WHERE フィルターによってクエリプランナーが結合を SEMI または ANTI に書き換えられる場合に、Join engine テーブルの ANY 結合で発生する INCOMPATIBLE_TYPE_OF_JOIN エラーを修正しました。Join engine テーブルでは strictness が固定で宣言されており変更できないため、このようなテーブルでは変換を行わないようになりました。#111362 (groeneai).
  • Dictionary への JOIN で、Dictionary キーがラップされていないにもかかわらず、結合キーに Nullable、LowCardinality、または LowCardinality(Nullable) を使用した場合に発生する TYPE_MISMATCH (“Key type for complex key … does not match”) を修正しました。direct-join Dictionary ルックアップでは、キーを Dictionary で宣言されたキー型に正規化するようになりました (dictGet/dictHas はすでにこの処理を行っています) 。また、NULL キーは一致しません。#111857 (groeneai).
  • join_use_nulls = 1 を指定し、JOIN ON 条件を WHERE 内で繰り返すクエリで発生する AMBIGUOUS_COLUMN_NAME (Block structure mismatch in (columns with identical name must have identical structure)) を修正しました。このようなクエリは失敗するのではなく、結果を返すようになりました。#112007 (groeneai).
  • キーにスパースシリアライゼーションを使用する direct Dictionary JOIN で、不正な結果が返される、または server が終了する問題を修正しました。#112327 (groeneai).
  • ハッシュ結合の単一の LowCardinality キーが 8 バイトを超える型 (UInt128、Int128、UInt256、Int256、およびそれらの Nullable バリアント) である場合に、不正な結果が返される問題を修正しました。このような結合では、キー値が等しくない行が暗黙的に返されていました。#113230 (groeneai).
  • 反対側の定数カラムを含む JOIN ON 条件におけるパーツおよび granule pruning を修正しました。#113484 (vdimir).
  • DirectKeyValueJoin (EmbeddedRocksDB、KeeperMap、Redis、または Dictionary などのキー・バリュー storage) が処理する JOIN の右側から選択した _table や _database などの virtual column で、不正な値が返される問題を修正しました。クエリは代わりに data column の内容を返すか、LOGICAL_ERROR で失敗していました。#113698 (groeneai).

クエリとアナライザの修正

  • セミコロンの後がコメントで終わるクエリで、splitMultipartQuery が “Empty query” エラーをスローするバグを修正しました。 #85491 (yariks5s).
  • DESCRIBE TABLE 内のサブクエリの後にあるエイリアスがパーサーで受け入れられず、構文エラーとなる問題を修正しました。 #100205 (yariks5s).
  • EXPLAIN INSERT INTO ... SELECT ... FORMAT ... において、FORMAT 句が EXPLAIN の出力に適用されず、INSERT によって消費される問題を修正しました。 #101772 (Onyx2406).
  • 同時に INSERT が実行されている場合に SELECT クエリが大幅に遅くなる問題を修正しました。以前は、ほとんどのスロットが使用されない場合でも、INSERT パイプラインがクエリ開始時に max_threads までの CPU スロットを予約し、同時実行中の SELECT を圧迫していました。CPU スロットの割り当ては需要駆動型になり、パイプラインは並列化可能な処理を実際にプッシュする際にのみスロットをリクエストします。これは同時実行制御と、ワークロード用のプリエンプティブ CPU スケジューラの両方に適用されます。新しいサーバー設定 concurrent_threads_lazy_allocation (デフォルトは true) はロールバック手段として使用できます。 #102928 (seva-potapov).
  • EmbeddedRocksDB テーブルに対する ALTER TABLE ... MODIFY SETTING で、サーバーがクエリを拒否した場合でも無効な設定値がテーブルのメタデータファイルに永続化されるバグを修正しました。次回のサーバー再起動時には、テーブルのアタッチが CANNOT_PARSE_BOOL (または同様の構文解析エラー) で失敗し、ロードの失敗が致命的となるデータベースではサーバーが起動を拒否していました。無効な設定値は、メタデータが書き込まれる前に拒否されるようになりました。 #103417 (groeneai).
  • HTTP インターフェイスおよび INSERT SELECT FROM input における input_format_max_block_wait_ms を使用したストリーミング INSERT を修正し、リクエストの完了前に部分的な入力ブロックがフラッシュされるようにしました。 #104534 (alexey-milovidov).
  • 式と WHEN の値の両方が NULL の場合に、CASE 式が一致する THEN ではなく ELSE 分岐を返す問題を修正しました。 #105556 (Algunenano).
  • MATERIALIZED VIEW 定義で WASM SQL UDF を使用できない問題を修正しました。 #106161 (niyue).
  • 古いアナライザで、SELECT リスト内の ORDER BY カラムにエイリアスが付いている場合に INTERPOLATE () が INVALID_WITH_FILL_EXPRESSION をスローする問題を修正しました。 #106252 (yakov-olkhovskiy).
  • 関数 base58Encode、base58Decode、tryBase58Decode が、大きな入力に対して max_execution_time とクエリのキャンセルに従うようになり、非常に長時間実行される代わりに 10 KB を超える入力を拒否するようになりました。この上限は新しい設定 function_base58_max_input_size (0 で無効化) で設定できます。 #106428 (alexey-milovidov).
  • f(const) が NaN と評価される場合、たとえば負の定数を使用した ORDER BY sqrt(c0) で、ORDER BY f(c0) を持つテーブルに対する WHERE c0 = const が行を返さない問題を修正しました。主キー解析がすべてのグラニュールを誤ってプルーニングし、後続のクエリのクエリ条件キャッシュを汚染していました。 #106507 (groeneai).
  • 暗黙的な _minmax_count_projection、明示的な集約プロジェクション、または通常のプロジェクションを持つテーブルに対する SELECT c, count() FROM t WHERE c GROUP BY c で誤った結果が返される問題を修正しました。以前は、すべてのグループが定数キーと合計行数を持つ1行に集約されていました。#106590 (groeneai).
  • EXPLAIN ... INSERT ... SELECT ... FORMAT ... の EXPLAIN 出力に対して、SETTINGS が FORMAT に先行する場合や出力フォーマットが Values の場合にも、FORMAT が適用されるようにしました。#106686 (alexey-milovidov).
  • 再利用されたスレッドローカルのリクエストオブジェクトに以前のリクエストの失敗状態が残ることで、実際にはワークロードリソースへのアクセスが許可されているクエリで、まれに誤って RESOURCE_ACCESS_DENIED エラー (“Scheduler queue with resource request is about to be destructed”) が発生する問題を修正しました。#106690 (alexey-milovidov).
  • 16進または8進エスケープを含む正規表現で、match、extract、extractAll、countMatches が誤った結果を返す問題を修正しました。#106709 (ofeliacode).
  • PostgreSQL ワイヤプロトコルパーサーで、長さフィールドが4未満のメッセージにより size - 4 がラップアラウンドし、過大な resize/ignore が実行される整数アンダーフローを修正しました。#107485 (uwezkhan).
  • enable_analyzer = 1 (デフォルト) では、別のデータベースにのみ存在するテーブルを修飾なしの名前でクエリした場合に、適切なテーブルが提案されるようになりました。たとえば、SELECT * FROM functions は Maybe you meant system.functions? を報告します。以前は、新しいアナライザではヒントのない Unknown table expression identifier エラーが発生していましたが、古いアナライザではすでに有用な提案が表示されていました。#107550 (groeneai).
  • ワーカーのステータスチェックで次回のチェックを再スケジュールできなかった場合 (たとえば、シャットダウン時の CANNOT_SCHEDULE_TASK や MEMORY_LIMIT_EXCEEDED) 、分散プランクエリ (make_distributed_plan = 1) の終了処理中にサーバーが中止される (std::terminate、シグナル6) 問題を修正しました。クエリは正常に失敗し、サーバーは稼働を継続します。#107575 (groeneai).
  • 共通の部分式を共有する ALIAS カラムを選択する分散クエリで、誤った結果が返される問題を修正しました。カラムがずれ、値が誤ったカラムに返される可能性がありました。#107675 (vdimir).
  • CODEC またはエンジン宣言内の引数なしウィンドウ関数 (例: CODEC(cume_dist() OVER (...))) で発生する Inconsistent AST formatting 論理エラーを修正しました。このような関数では括弧が保持されるようになり、クエリがフォーマット/解析の往復変換を通過できるようになりました。#107806 (alexey-milovidov).
  • getClientHTTPHeader が非決定論的として正しく扱われるようになったため、その結果がクエリ結果 cache によって誤って再利用されなくなりました。#108029 (alexey-milovidov).
  • クエリ条件 cache (デフォルトでもある設定 use_query_condition_cache = 1) とともに SELECT [...] SAMPLE [...] を使用した際に、誤った結果が返される問題を修正しました。#108488 (groeneai).
  • enable_identifier_resolve_cache が有効 (デフォルト) の場合に、複合述語に GROUP BY で別名を付けて再度参照すると発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。optimize_and_compare_chain の最適化はべき等ではなく、共有された解決済みノードに重複する推移的連言句が蓄積されていました。 #108553 (groeneai).
  • Distributed テーブルに対するサブクエリが同じ式に展開される 2 つ以上の ALIAS カラム (例: a1 String ALIAS toString(x), a2 String ALIAS toString(x)) を読み取り、その結果を外側のクエリで使用する場合 (例: SELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2)) に発生する NUMBER_OF_COLUMNS_DOESNT_MATCH エラーを修正しました。 #108725 (groeneai).
  • 別のカラムにインライン別名を定義して参照する DEFAULT または MATERIALIZED 式がある場合に、ALTER TABLE ... DROP COLUMN で発生する UNKNOWN_IDENTIFIER エラーを修正しました。 #109374 (alexey-milovidov).
  • クエリが name/database カラムのみを読み取る場合に、データベース単位の権限を持つユーザーのデータベースを system.tables が暗黙的にスキップする問題を修正しました。導入バージョン: 26.2。 #109723 (samay-sharma).
  • アナライザが有効な場合に、ビューに保存されたクエリ内で CTE 名 (cte_name.column) で修飾されたカラムに対して発生する UNKNOWN_IDENTIFIER エラーを修正しました。 #111386 (novikd).
  • FINAL クエリが SELECT リストに含まれないソートキーのカラムでフィルタリングし、そのフィルターが PREWHERE に移動された場合 (例: optimize_move_to_prewhere_if_final = 1 を指定した SELECT s FROM t FINAL WHERE k GROUP BY s) に発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。 #111721 (groeneai).
  • enable_analyzer = 0 がサーバーのデフォルトである場合に、再帰 CTE を持つビューで WITH RECURSIVE is not supported with the old analyzer によりサーバーの起動および ATTACH が失敗する問題を修正しました。 #112784 (evillique).
  • accurateCastOrDefault におけるクエリ設定および NULL の処理の伝播を修正しました。 #114912 (alexey-milovidov).
  • system.query_thread_log の read_rows、read_bytes、written_rows、written_bytes が、記録されたクエリの値ではなくスレッドの存続期間中の累計値を報告する問題を修正しました。特に、クエリを開始した HTTPHandler スレッドを含む、長期間存続するプール済みスレッドの行が影響を受けていました。 #115596 (groeneai).

MergeTree およびストレージの修正

  • tryN 接尾辞が付いたデタッチされたパーツを削除できるようになりました。#58957 (antaljanosbenjamin).
  • 並列レプリカで実行する際、ネストされたサブクエリ内に重複するプロジェクション別名 (例: SELECT *, day + 365 AS day) があるクエリで発生する MULTIPLE_EXPRESSIONS_FOR_ALIAS 例外を修正しました。#80310 (alexey-milovidov).
  • テーブルレベルの default_compression_codec 設定が明示的に構成されている場合に、MergeTree パーツで誤った圧縮コーデックが選択される問題を修正しました。挿入時、マージ時、およびプロジェクション用に書き込まれるパーツで、テーブルレベルの設定ではなくサーバー全体のデフォルトコーデックが使用されていました (完全に削除する mutation により生成される空のパーツも対象です) 。#101784 (Onyx2406).
  • 並列レプリカと parallel_replicas_local_plan = 0 を使用して、PREWHERE / WHERE / HAVING / QUALIFY 内のプロジェクション別名を参照するクエリ (例: SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c) 、または重複するカラム名を持つ自己結合に対する SELECT * を実行した際に、リモートレプリカで発生する MULTIPLE_EXPRESSIONS_FOR_ALIAS エラーを修正しました。#103806 (groeneai).
  • ALTER TABLE ... DROP PARTITION ID 'patch-...' の後に DETACH/ATTACH TABLE を実行するとパッチパートが壊れる問題を修正しました。以前は、空のカバリングパートが partition.dat および source_parts.dat なしで書き込まれていたため、次回のアタッチまたはサーバー再起動後に system.detached_parts に broken-on-start_patch-... エントリが生成されていました。#104353 (groeneai).
  • ALTER TABLE ... RENAME COLUMN が OPTIMIZE TABLE ... FINAL または別のバックグラウンドマージと同時に実行された場合、データがデフォルト値で暗黙的に置き換えられる問題を修正しました。#104822 (groeneai).
  • enable_materialized_cte を使用するクエリで発生する LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materialized の2つのケースを修正しました。(1) 別のマテリアライズド CTE に対する IN (subquery) でフィルタリングされる再利用済みのマテリアライズド CTE、(2) ネストした IN サブクエリを介して MergeTree 主キーにアクセスする WHERE ... IN (...) フィルター内と直接の両方で参照されるマテリアライズド CTE です。バグはプラン最適化中に発生していたため、同じクエリに対する EXPLAIN も影響を受けていました。#105041 (novikd).
  • skip_cache_on_disk_failure = 1 の場合、FileCache がディスク上に cache ディレクトリを作成できなくても、クエリの実行が継続されるようになりました。クエリを失敗させる代わりに、エラーがログに記録されます。#105250 (Diskein).
  • ALTER TABLE <memory_table> APPLY PATCHES および ALTER TABLE <memory_table> APPLY DELETED MASK で発生する論理エラー例外 Mutation of Memory table produced incomplete output を修正しました。Memory テーブルはパッチパートも削除マスクも持たないため、両方のコマンドは正しく no-op として扱われるようになりました。#105286 (groeneai).
  • distributed_group_by_no_merge=1 を使用した Distributed 上の Merge 上の Merge で発生する CANNOT_CONVERT_TYPE を修正しました。#105330 (azat).
  • 複数の異なる値をすでに検出した状態をマージする際に、singleValueOrNullMerge が NULL ではなく具体的な値を返す問題を修正しました。#105734 (fallintoplace).
  • コレクション名が空、または NUL バイトを含む場合に、mongodb テーブル関数、MongoDB ストレージ、および MongoDB Dictionary ソースでクラッシュする問題を修正しました。#105776 (Algunenano).
  • 明示的に指定した SummingMergeTree および CoalescingMergeTree の columns_to_sum カラムに対して、ALTER TABLE ... CLEAR COLUMN が拒否される問題を修正しました。#105785 (antonio2368).
  • データベース名をクエリパラメータで指定したパラメーター化ビューの作成時に、UNKNOWN_DATABASE エラーが発生する問題を修正しました。#105799 (groeneai).
  • analyzer 使用時に Merge テーブルで順序どおりに読み取る最適化を復元しました。#105867 (KochetovNicolai).
  • カタログ経由でアクセスする Iceberg テーブルでの UPDATE および DELETE ミューテーションを修正しました。対象行がない場合に繰り返し実行した更新および削除も含まれます。#106111 (scanhex12).
  • 述語がその上位で適用された Merge テーブルまたは merge テーブル関数を介して Distributed テーブルをクエリした場合に、optimize_skip_unused_shards が適用されず (また、force&#95;optimize&#95;skip&#95;unused&#95;shards が誤って失敗する) 問題を修正しました。#106250 (KochetovNicolai).
  • ミューテーション (DELETE/UPDATE) の述語に、別のサブクエリ内にネストされたデフォルトテーブル式を読み取る IN/EXISTS サブクエリが含まれる場合に発生する論理エラー Column identifier ... is already registered を修正しました。#106414 (alexey-milovidov).
  • read_in_order_use_virtual_row_per_block = 1 と小さい max_block_size を使用してワイドパーツを逆順に読み取る際、ORDER BY ... DESC クエリで断続的に不正な結果が返される問題を修正しました。#106429 (vdimir).
  • cache/direct レイアウトと単一の文字列 (複合) キーで STORAGE_TYPE 'simple' を使用する Redis Dictionary で発生する Bad cast exception を修正しました。このような Dictionary は動作するようになり、simple ストレージ上の複合キーでは明確なエラーが報告されます。#106501 (vdimir).
  • APPLY PATCHES、APPLY DELETED MASK、MATERIALIZE STATISTICS、MATERIALIZE INDEX、MATERIALIZE PROJECTION、REWRITE PARTS を含む、Memory エンジン上の行データに影響しない ALTER TABLE <memory_table> コマンドによって発生する例外 Mutation of Memory table produced incomplete output を修正しました。Memory テーブルはこれらの構造を保持しないため、これらのコマンドは no-op として扱われるようになりました。#106621 (groeneai).
  • MergeTree テーブルに、粒度がゼロでディスク上の marks ファイルが空でないスキップ索引パーツがある場合に、Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0) によりサーバーが起動に失敗する問題を修正しました。#106675 (groeneai).
  • UNION 内のテーブルが空の場合に、UNION を含むビューへ並列レプリカが適用されない問題を修正しました。#106900 (devcrafter).
  • 挿入ブロックが完全に重複排除され、競合するパーツの重複排除ノードがすでに削除されていた場合 (たとえば、同時実行された DROP PARTITION による削除) 、ReplicatedMergeTree テーブルへの同期挿入中に発生する可能性があった論理エラー例外 conflicted_part_name.has_value() を修正しました。#107026 (groeneai).
  • enable_filesystem_query_cache_limit = 1 で作成されたファイルシステムキャッシュディスク経由で MergeTree テーブルを読み取る際に発生する、まれな LOGICAL_ERROR “Attempt to release query context that does not exist” と、それに伴うサーバークラッシュを修正しました。#107028 (groeneai).
  • 空のパーツを plain_rewritable ディスクへ移動する際に発生するサーバークラッシュを修正しました (たとえば、remove_empty_parts = 0 により保持されている空のパーツに対して ALTER TABLE ... MOVE PARTITION ... TO DISK を実行した場合) 。#107040 (groeneai).
  • adaptive_write_buffer_initial_size に極端に大きな値が設定されている場合に、MergeTree テーブルへの INSERT 時に発生する Logical error: Too large size passed to allocator 例外を修正しました。アダプティブ書き込みバッファの初期サイズは、バッファの最大サイズに制限されるようになりました。#107104 (groeneai).
  • コメント変更と MODIFY SETTING/RESET SETTING が混在する ALTER TABLE ... ON CLUSTER バッチ (たとえば、MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123) がリーダーレプリカにのみ適用され、他のレプリカとの不整合を引き起こす問題を修正しました。また、位置指定またはカラムごとの SETTINGS を伴う MODIFY COLUMN ... COMMENT がローカルのコメントのみのメタデータ変更として誤分類され、カラムの並べ替えがレプリケーションメタデータに反映されず、レプリカの再起動時に INCOMPATIBLE_COLUMNS を引き起こす可能性がある問題も修正しました。#107142 (groeneai).
  • group_by_use_nulls 設定を有効にして grouping 関数を使用するクエリで発生する Argument ... of GROUPING function is not a part of GROUP BY clause エラーを修正しました。#107206 (KochetovNicolai).
  • 非レプリケーションの MergeTree テーブルでレガシー並列レプリカが有効な場合の論理更新 UPDATE クエリを修正しました。#107246 (groeneai).
  • SYSTEM SYNC DATABASE REPLICA … STRICT で発生する可能性がある論理エラー例外を修正し、STRICT 修飾子がデータベースレプリカに実際に適用されるようにしました。#107344 (PedroTadim).
  • スカラーサブクエリに同じテーブルを読み取るネストされたサブクエリが含まれる場合に、並列レプリカで発生する可能性がある Logical error: 'Duplicate announcement received for replica number N' を修正しました。#107381 (groeneai).
  • 未適用の論理更新 UPDATE パッチが残っているパーティションに対して REPLACE PARTITION、MOVE PARTITION、DETACH PARTITION、または DETACH PART を実行した場合に、プレーン (非レプリケーション) の MergeTree で発生するサイレントなデータ損失を修正しました。これらの操作は、コミット済みの更新を黙って元に戻すのではなく、ReplicatedMergeTree と同様に ALTER TABLE ... APPLY PATCHES を案内してコマンドを拒否するようになりました。#107386 (groeneai).
  • PostgreSQL のデータベース名またはテーブル名に大文字が含まれる場合に、MaterializedPostgreSQL が変更のレプリケーションを停止する問題を修正しました (pgoutput コンシューマーが、大文字小文字を保持する publication と一致しない、引用符なしで小文字化された publication 名を要求していました) 。#107423 (alexey-milovidov).
  • optimize_if_transform_strings_to_enum = 1 の場合に、文字列リテラルに対する最適化済みの if/transform 式が Distributed テーブルまたは並列レプリカにおける GROUP BY あるいは ORDER BY のキーとなると発生する THERE_IS_NO_COLUMN エラーを修正しました。 #107455 (groeneai).
  • CREATE TABLE ... CLONE AS、ATTACH PARTITION ... FROM、または MOVE PARTITION ... TO TABLE により、プレーンな MergeTree から ReplacingMergeTree、SummingMergeTree、または AggregatingMergeTree へパーツを取り込んだ後に、SELECT ... FINAL および OPTIMIZE TABLE ... FINAL が重複行を返す問題を修正しました。ソースと宛先のエンジンが異なる場合、取り込んだパーツのマージレベルを 0 にリセットするようになり、次回のマージ時に宛先側で重複除去されます。 #107481 (groeneai).
  • ReplicatedMergeTree でクォーラムを待機中のクエリキャンセルをより適切に追跡するようになりました。 #107513 (nickitat).
  • rapidjson ライブラリ (prettyPrintJSON、JSONMergePatch、および rapidjson JSON パーサー) が使用するメモリをメモリトラッカーに計上するようにし、異常な入力を無制限にメモリ割り当てするのではなく MEMORY_LIMIT_EXCEEDED で拒否するようにしました。 #107555 (Algunenano).
  • Dynamic カラムを持つテーブルの mutation によって生成された MergeTree パーツをマージまたは読み取る際に発生する可能性があった Logical error: Stream ... variant_discr ... is not found を修正しました。 #107562 (alexey-milovidov).
  • optimize_prewhere_after_pushdown が有効な場合に、明示的な PREWHERE と WHERE の両方を指定して file()、url()、またはオブジェクトストレージのログソースをクエリすると発生する LOGICAL_ERROR (updateFormatPrewhereInfo called more than once) を修正しました。 #107568 (groeneai).
  • Replicated データベース内の TimeSeries テーブルに関わる RENAME TABLE、RENAME DATABASE、または CREATE OR REPLACE TABLE で発生する可能性があったサーバー例外 (Digest does not match 論理エラー) を修正しました。TimeSeries テーブルのリネームがサポートされるようになりました。 #107583 (groeneai).
  • Replicated データベース内の TimeSeries テーブルに対する DROP TABLE を修正しました。以前は内部テーブルが残り、バックグラウンドの削除タスクが永遠に再試行されていました (DROP TABLE ... SYNC はハングしていました) 。 #107604 (groeneai).
  • 複製パーツ取得プロトコルにおいて、悪意のあるレプリカがパーツディレクトリ外にファイルを書き込める可能性があった 2 件のパストラバーサル問題を修正しました。 #107606 (antonio2368).
  • プレーンな MergeTree テーブルでの ALTER TABLE ... REPLACE PARTITION により、サーバー再起動後に置換されたパーツが復活し、テーブルが置換後の行と古い行の両方を返していた問題を修正しました。 #107623 (groeneai).
  • TO ターゲットテーブルが view の SELECT で生成される Enum よりも広い Enum のカラムを宣言している materialized view への insert 時に発生する LOGICAL_ERROR (“Block structure mismatch … between ConvertingTransform and RemovingReplicatedColumnsTransform”) を修正しました。有効な Enum の拡張を、直接の INSERT ... SELECT と同様に materialized view の insert パスでも適用するようになりました。 #107648 (groeneai).
  • 同一の式に展開される複数の ALIAS カラムを持つ Distributed テーブル (または並列レプリカ使用時) へのクエリで、それらを ORDER BY/GROUP BY/HAVING とともに参照した際に発生する NUMBER_OF_COLUMNS_DOESNT_MATCH エラーを修正しました。 #107913 (yakov-olkhovskiy).
  • 読み取り専用テーブルのデータパーツの更新中に一時的なエラーが発生しても、バックグラウンド更新タスクが恒久的に停止しなくなりました。 #108034 (alexey-milovidov).
  • index_granularity_bytes が AggregateFunction の状態カラムでも考慮されるようになりました。以前は、この種のカラム (たとえば、AggregatingMergeTree テーブルや集約プロジェクションの uniqExact 状態) ではグラニュールのバイト上限が無視され、設定上限を大幅に超えるグラニュールが生成されることで、読み取り増幅とクエリ時のメモリ使用量が増加していました。 #108297 (groeneai).
  • 稼働中のレプリカ数が過半数未満の場合に、insert_quorum = 'auto' が挿入を事前に拒否しない問題を修正しました。このような挿入は、ローカルパーツへの書き込み後に UNKNOWN_STATUS_OF_INSERT でタイムアウトするのではなく、直ちに TOO_FEW_LIVE_REPLICAS で失敗するようになりました。 #108800 (gagandhakrey).
  • 重複排除を伴う非同期挿入で、optimize_on_insert により挿入ブロックが空になった場合 (たとえば、SummingMergeTree で行の合計がゼロになる場合) にサーバーがクラッシュする問題を修正しました。 #109229 (Diskein).
  • マージが ALTER TABLE ... RENAME COLUMN と同時に実行された場合、またはカラムの値が論理更新 UPDATE によるものだけである場合に、デフォルト式のないカラムのデータが失われる問題を修正しました。このカラムがマージ済みパーツから削除され、読み出したすべての値が NULL になる可能性がありました。 #109356 (groeneai).
  • GROUPING SETS、ROLLUP、または CUBE と並行して uniqExact の集約状態をマージする際に、まれにサーバーが終了する問題を修正しました。 #109389 (groeneai).
  • ロールアップマージが無期限に再スケジュールされる問題を修正しました。 #109410 (Michicosun).
  • マテリアライズド仮想カラムまたは永続仮想カラムを持つテーブルに対する GROUP BY ミューテーションの問題を修正しました。 #109532 (Michicosun).
  • 新たに挿入された (レベル 0 の) パーツを持つテーブルで、add_minmax_index_for_block_number_column/add_minmax_index_for_block_offset_column によって作成された暗黙の minmax 索引に対して ALTER TABLE ... MATERIALIZE INDEX を実行した際に発生する UNKNOWN_IDENTIFIER: Missing columns: '_block_offset' エラーを修正しました。失敗する代わりに、これらのパーツに対して索引が構築されるようになりました。 #110236 (groeneai).
  • 読み取り専用のオブジェクトストレージレプリカ (read_only = true が設定されたディスク) が refresh_parts_interval を通じて新しいパーツを検出しない問題、およびそのようなディスクで table_disk = true が “table_disk is not supported for non-ObjectStorage disks” として拒否される問題を修正しました。 #110460 (jkartseva).
  • 式で IN 演算子を使用する (別の ALIAS カラムを介する場合を含む) ALIAS カラムを持つテーブルで、ALTER TABLE … DROP COLUMN、ALTER TABLE … DELETE/UPDATE ミューテーション、および論理削除の際に発生する LOGICAL_ERROR (“No set is registered for key”) を修正しました。 #111039 (PedroTadim).
  • クエリ実行時に MergeTree プロジェクションで行ポリシーが適用されない問題を修正しました。 #112329 (yariks5s).
  • 直接 I/O を使用する encrypted ディスク上の Compact パーツの読み取り時に発生し、マージが system.replication_queue で停止する原因となっていた ReadBufferFromEncryptedFile: Wrong file position 論理エラーを修正しました。 #112943 (alexey-milovidov).
  • merge テーブル関数および Merge テーブルエンジンを介して内部データベース _temporary_and_external_tables を読み取れる問題を修正しました。この問題により、あるセッションが他のセッションや他のユーザーの一時テーブルを読み取ることができ、古いアナライザパスでは例外も発生していました。現在はデータベース正規表現でこのデータベースがスキップされ、直接アクセスと同様に明示的な指定も拒否されます。 #113224 (alexey-milovidov).
  • スカラーサブクエリを含む行ポリシーが、Merge テーブルを介してテーブルを読み取った後は一度しか評価されず、以降ずっと再利用される問題を修正しました。解析済みのポリシー条件はキャッシュされ、すべてのクエリで共有されますが、Merge 経由の読み取りによってキャッシュされた式がインプレースで書き換えられ、同じポリシーを使用する同時実行クエリ間でデータ競合も発生していました。 #113563 (alexey-milovidov).
  • カスタムキーの並列レプリカを持つ Distributed テーブルを含む Merge テーブルの読み取り時に発生する CANNOT_CONVERT_TYPE エラーを修正しました。 #113742 (alexey-milovidov).
  • 子テーブルが IN を含む ALIAS カラムを宣言し、そのカラムのデフォルト値が子テーブル間で異なる Merge テーブルを介した読み取り時に発生する Logical error: No set is registered for key ... を修正しました。 #113757 (groeneai).
  • mergeTreeIndex テーブル関数により、ソーステーブルの SELECT 行ポリシーで非表示となる行の主キーおよび minmax 索引値が公開される行ポリシーのバイパスを修正しました。現在、行ポリシーを持つテーブルに対する mergeTreeIndex の読み取りは拒否されます。 #115304 (yariks5s).

データ型およびシリアライゼーションの修正

  • LowCardinality 数値型を使用した際に ARRAY JOIN で発生する例外を修正しました。 #91784 (Ergus).
  • data_type_default_nullable = 1 の場合に、Replicated データベース内または ON CLUSTER 経由でテーブルを作成すると、NOT NULL カラムが暗黙的に Nullable として作成される問題を修正しました。 #97572 (xiaohuanlin).
  • ビューが integer カラムを Bool カラムにマッピングしている場合に、query_plan_enable_optimizations = 0 を指定した MaterializedView クエリが誤った行数を返す問題を修正しました。 #100692 (Maximus5).
  • デフォルト以外のシリアライゼーションを持つカラムの mutation 後に、part メタデータに不整合が生じる問題を修正しました。 #102817 (korowa).
  • Nullable(Tuple(...)) カラムから抽出されたサブカラムを読み取る際の NULL 伝播を修正しました。たとえば、tup Nullable(Tuple(s Nullable(String))) の場合、SELECT tup.s は外側のタプルが NULL の行で、不要な値ではなく正しく NULL を返すようになりました。これは、NULL を表現できるすべての要素型、すなわち Nullable、Dynamic、Variant、LowCardinality(Nullable(...)) を対象としています。 #102942 (nihalzp).
  • recursiveRemoveLowCardinality がカスタムジオメトリ型名 (例: LineString と Ring、MultiLineString と Polygon) を消去し、ジオメトリ型を誤って解釈する問題を修正しました。 #103041 (jh0x).
  • Dictionary に値が存在しない Nullable キーカラムを使用して呼び出した場合に、dictGetOrNull が SELECT projection 内の他のカラムを暗黙的に NULL で上書きする問題を修正しました。この関数は入力とエイリアス化された null map をその場で変更していましたが、現在は変更前に結果カラムをディープクローンします。 #104327 (groeneai).
  • optimize_skip_unused_shards_rewrite_in が有効な場合に、分片キーに空の IN タプルを含む分散クエリで発生する例外を修正しました。 #104966 (alexey-milovidov).
  • Float64 リテラルとの比較を含む、Float32 カラムに対する count-min 統計の PREWHERE 選択性推定を修正しました。 #105047 (hanfei1991).
  • quantileExactWeightedInterpolated、quantileDD、または quantilePrometheusHistogram の aggregate state を、対応する複数形の quantilesXxxMerge とマージする際 (およびその逆) に発生する ILLEGAL_TYPE_OF_ARGUMENT を修正しました。これら 3 つの quantile ファミリーの単数形と複数形のバリアントは同じ内部 aggregate state を共有していますが、内部名マッピングテーブルに記載されていなかったため、関数間での state マージおよびこれらのファミリーに対する関数融合最適化が拒否されていました。 #105189 (groeneai).
  • 結果が Date の範囲外となる Date32 および DateTime64 引数に対する toStartOfWeek、toLastDayOfWeek、toMonday、toStartOfMonth、toLastDayOfMonth、toStartOfQuarter、toStartOfYear の誤った結果を修正しました。任意の日付にオーバーフローするのではなく、1970-01-01 より前の結果は 1970-01-01 に、2149-06-06 より後の結果は 2149-06-06 にクランプされるようになりました。また、範囲外の値を含む Date32 または DateTime64 キーに対する WHERE 句でこれらの関数を使用した際に、パーツおよびグラニュールが誤って除外されることで不正なクエリ結果が返される問題も修正しました。 #105244 (yariks5s).
  • 第1引数が、すべての選択肢が第2引数の型と互換性のない Variant の配列であり、variant_throw_on_type_mismatch が無効な場合に発生する arrayRemove の論理エラーを修正しました。比較を “決して等しくない” として扱い、サーバー側の assertTypeEquality エラーを発生させる代わりに、配列を変更せずに返すようになりました。 #105248 (groeneai).
  • Dynamic に対する toFloat64/toUInt32/toString などが cast_keep_nullable を無視する問題を修正しました。 #105467 (Avogar).
  • Nullable 引数とともに GROUP BY ... WITH ROLLUP、WITH CUBE、または WITH TOTALS を使用した場合に、uniqStateOrNull / uniqStateOrDefault / uniqOrNullState (および uniq に対する類似の combinator チェーン) で発生するサーバーの segfault を修正しました。 #105470 (groeneai).
  • 負の (エポック以前の) DateTime64 値に対して toStartOfMillisecond および toStartOfMicrosecond がほぼ1秒ずれた結果を返す問題を修正し、INT64_MIN 付近の DateTime64 入力に対する toStartOfSecond、toStartOfMillisecond、toStartOfMicrosecond の UndefinedBehaviorSanitizer による符号付き整数オーバーフローも修正しました。 #105482 (groeneai).
  • JSON の singleValueOrNull 状態をデシリアライズする際にサーバーが終了する問題を修正しました。 #105535 (Avogar).
  • JSON の共有データへの挿入時に input_format_try_infer_datetimes が無視される問題を修正しました。 #105544 (Avogar).
  • JSONExtract およびテキストのデシリアライゼーションで、範囲外の値に対して DateTime がラップアラウンドする問題を修正しました。 #105551 (Avogar).
  • 同じ VALUES 句内でサイズの異なるタプルを String カラムに挿入した際のクラッシュを修正しました。 #105582 (Avogar).
  • NULL 値を含むタイムゾーンを持つ DateTime から toString への変換で発生する NOT_IMPLEMENTED エラーを修正しました。 #105587 (yariks5s).
  • Native 入力で不正な flattened Dynamic カラムを検証する処理を追加しました。 #105666 (Avogar).
  • 結果型が Variant で、第2または第3ブランチが Int64 に収まる UInt64 リテラルに対する定数条件の if である if 式について、クエリプランニング中に発生する LOGICAL_ERROR (Unexpected return type from if) を修正しました。 #105680 (groeneai).
  • 集計状態のシリアル化時 (例: 並列レプリカ、バイナリ状態フォーマッタ経由の sumMapState、外部集計) に、Nested(... Nullable(Decimal(P, S))) カラムに対する sumMap および sumMapWithOverflow で発生する Bad get: has Decimal32, requested Decimal128 を修正しました。 #105816 (groeneai).
  • ALTER MODIFY COLUMN ... LowCardinality(...) ミューテーションより前にキューに登録されたオンザフライ UPDATE/DELETE ミューテーションが保留されているテーブルで apply_mutations_on_fly = 1 を使用した際に発生する、Expected ColumnLowCardinality, got String / Bad cast from type DB::ColumnString to DB::ColumnLowCardinality エラーを修正しました。 #105847 (Algunenano).
  • 新しいアナライザで、IN Array(...) フィルターを使用する分散クエリで発生する Cannot find column エラーを修正しました。 #105894 (KochetovNicolai).
  • ある ALTER によってカラムが同時に削除されている間に、STATISTICS を持つカラムを Nullable に変更するとサーバーが終了する問題を修正しました。 #105917 (groeneai).
  • RowBinaryWithNamesAndTypes の型デコード時 (input_format_binary_decode_types_in_binary_format = 1) に範囲外の IntervalKind バイトを拒否し、無効な kind を持つ DataTypeInterval の構築によって後続のハッシュパスで未定義動作が発生する可能性がある代わりに、明確な INCORRECT_DATA エラーを返すようにしました。 #106261 (groeneai).
  • Nullable(JSON) で、‘null’ サブカラムを null-map ではなく JSON path として読み取るようにしました。 #106295 (Avogar).
  • すべての配列が空で、キーが定数ではないカラムをハッシュ化する際に sipHash64Keyed、sipHash128Keyed、sipHash128ReferenceKeyed で発生する範囲外読み取りを修正しました。 #106355 (Algunenano).
  • 第 2 引数が非定数タプルである IN の第 1 引数で、スカラーサブクエリを使用できなかった問題を修正しました。 #106610 (yariks5s).
  • LowCardinality(DateTime) カラムをテキストフォーマット (CSV、TSV、JSONEachRow など) にシリアル化する際に session_timezone が無視される問題を修正しました。以前は、サーバー上で LowCardinality(DateTime) カラムが最初に書き込まれた後、このカラムを書き込む以降のすべてのクエリで、session_timezone に関係なく、最初に検出されたタイムゾーンの現地時刻文字列が表示されていました。 #106634 (groeneai).
  • 条件が定数の Nullable(Nothing) 値である場合に if および multiIf でサーバーが終了する問題を修正しました。 #106678 (groeneai).
  • sumMap / -Map コンビネータが、SimpleAggregateFunction(sum, T) や Bool などのカスタム名付き数値値型を ILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed で拒否し、以前は動作していた集計を壊すようにした変更を元に戻しました。 #106729 (fm4v).
  • キーカラムが LowCardinality で、述語定数が LowCardinality(Nullable(...)) の場合に、MinMax 統計によるパーツの枝刈り中に発生する Bad cast 例外を修正しました。 #106793 (groeneai).
  • 非 ASCII の入力バイトを含む場合に parseDateTime で発生する論理エラーを修正しました。 #106856 (Avogar).
  • 集約関数の引数を Nullable 型にキャストする必要がある場合に、optimize_rewrite_aggregate_function_with_if 最適化を伴う分散クエリで発生する THERE_IS_NO_COLUMN 例外を修正しました。 #106908 (yakov-olkhovskiy).
  • 重みの Array に大きな整数値が含まれる場合に arrayLevenshteinDistanceWeighted および arraySimilarity で発生する符号付き整数オーバーフロー (未定義動作) を修正しました。整数の重みに対する重み付き距離はより大きな整数型で累積されるようになったため、大きな整数の重みでもオーバーフローせず、正確さが維持されます。 #106934 (groeneai).
  • ローカルストレージの順序がグローバル順序と異なる Map バリアントを持つ Variant カラムを含むソート済みブロックのマージ時に発生するクラッシュ (Source column is not Map / SIGSEGV) を修正しました。 #107011 (groeneai).
  • 遅延マテリアライゼーションによってソートカラムより前に別のカラムが配置された場合に、ORDER BY <numeric column> ... LIMIT n クエリで発生する TYPE_MISMATCH エラー (“Cannot convert string … to type …”) を修正しました。上位 K のしきい値は正しいソートカラムから読み取られるようになりました。 #107060 (groeneai).
  • 異なる型のカラム間で解放済みのカラム名を再利用する複合 ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO a (「スワップ」) を修正しました。マテリアライズされた part に誤ったカラム型が記録されていたため、後続の SELECT が Conversion between numeric types and IPv6 is not supported で失敗するか、debug build では part の読み込み時に中断していました。 #107064 (groeneai).
  • 境界値の Array に NaN が含まれる場合の roundDown 関数の非決定論的な結果を修正しました。同じ入力値でも、バッチ内の周囲の行に応じて有限の境界値または NaN が返されることがありました。NaN の境界値は無視されるようになり、結果は有限の境界値のみに依存します。 #107065 (groeneai).
  • 補間された分位点が小数で範囲内にある場合に、Date および DateTime 引数に対して quantileTDigest と quantileTDigestWeighted が DECIMAL_OVERFLOW をスローする問題を修正しました (たとえば、すべての値が型に収まる場合の quantileTDigestWeighted(date, weight)) 。小数の結果は quantilesTDigestWeighted と一致するよう結果型に切り捨てられるようになり、実際に範囲外の値では引き続きエラーが発生します。 #107066 (groeneai).
  • Enum8/Enum16 型定義で範囲外の整数値が暗黙的に切り捨てられる問題を修正しました。Enum8('a' = 200) は、暗黙的に Enum8('a' = -56) を作成するのではなく、ARGUMENT_OUT_OF_BOUND をスローするようになりました。 #107081 (groeneai).
  • 複数の行が先頭カラムで同順位となる場合に、Nullable カラムでソートする複数カラムの ORDER BY ... LIMIT クエリで発生する誤った行順序 (および debug build での LOGICAL_ERROR “Rows are not sorted with permutation”) を修正しました。 #107094 (groeneai).
  • ALTER TABLE ... ADD COLUMN 後、または未完了の ALTER TABLE ... CLEAR COLUMN ミューテーションがオンザフライで適用された後など、デフォルト値で埋められた Array(Tuple(...)) カラムの読み取り時に発生する Logical error: 'Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple' を修正しました。#107232 (groeneai).
  • CREATE TABLE 時に、TTL 式での AggregateFunction カラムのサポートされていない使用 (例: TTL toDateTime(state)) を拒否するようにし、後の TTL 実行時に ILLEGAL_TYPE_OF_ARGUMENT で失敗する問題を修正しました。これには、Variant の代替型や Dynamic 値に含まれる状態も含まれます。finalizeAggregation など、状態を認識する有効なコンシューマーは引き続き許可されます。#107366 (Ria-K912).
  • Decimal のサイズ引数を指定した arrayResize を修正しました。サイズは未スケーリングの内部表現ではなく実際の値として解釈されるようになりました (例: arrayResize([1, 2, 3], 1.5::Decimal(2, 1)) は 1 要素を返します) 。#107389 (alexey-milovidov).
  • ALTER MODIFY COLUMN ... LowCardinality(...) ミューテーションの前に、対象カラムが先行するオンザフライ UPDATE の関数入力としても読み取られる、保留中のオンザフライ UPDATE があるテーブルで apply_mutations_on_fly = 1 を使用した場合に発生する LOGICAL_ERROR: Unexpected return type from materialize (および類似の型不一致エラー) を修正しました。#107475 (groeneai).
  • Arrow/ORC データを LowCardinality(Nullable(...)) カラムに挿入する際に、NULL 値が暗黙的に空文字列へ変換される問題を修正しました。これは 26.5 で導入されたリグレッションです。#107532 (Ergus).
  • make_distributed_plan = 1 を含むクエリが、両側に共通の型がない関数でラップされたキーで結合する場合に発生する LOGICAL_ERROR (“Input nodes size mismatch in dag”) を修正しました (例: 右側のキーが UInt64 である ON intDiv(-1, t1.key) = t2.key) 。#107701 (groeneai).
  • サーバー設定 insert_deduplication_version = new_unified_hash 使用時に、String および Array カラムに対する挿入の重複排除で誤ったハッシュが計算される問題を修正しました。重複排除ハッシュが挿入ブロック内の行’の位置に依存していたため、同一の挿入でも重複排除に失敗する可能性がありました。#107915 (CheSema).
  • LowCardinality 引数を使用して Dynamic キーを持つ Map を検索する際に、has でサーバーが終了する問題を修正しました。#107956 (groeneai).
  • PREWHERE とともに使用される Map サブカラムのパフォーマンスリグレッションを修正しました。#107988 (Avogar).
  • accurateCastOrNull または accurateCastOrDefault を使用して、Tuple 内にネストされた Dynamic または Variant カラムを非 Nullable 要素型にキャストする際の論理エラーを修正しました。#108061 (alexey-milovidov).
  • スパースに格納されたカラムに対し、LIKE クエリが直接読み取りのフォールバックパス経由で text インデックスを読み取る際に発生する Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t> 論理エラー例外を修正しました。#108068 (groeneai).
  • 非定数または false の条件を指定した ALTER UPDATE col = ... WHERE <cond> の後に ALTER MODIFY COLUMN col <new type> を実行した場合、apply_mutations_on_fly = 1 でカラムを読み取る際に発生する LOGICAL_ERROR (“Unexpected return type from if”) を修正しました。#108128 (groeneai).
  • Int64 の範囲の限界に近い極端な DateTime64 値に対して、hour および minute 単位で dateDiff を使用した際に発生する signed integer overflow (未定義動作) を修正しました。#108229 (groeneai).
  • Array(Dynamic) または Array(Variant) を accurateCastOrNull で QBit にキャストする際に発生するサーバー例外 (IColumn::insertFrom の Logical error) を修正しました。例: accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')。#108288 (groeneai).
  • タイムゾーンを指定した parseDateTimeBestEffort が、toString(Nullable(DateTime64)) の NULL 行で CANNOT_PARSE_DATETIME を送出する問題を修正しました。#108310 (yariks5s).
  • max_parser_depth を大きな値に設定した場合に、[[[ ... ]]] や array(array( ... )) などの深くネストした式によって発生するサーバークラッシュ (スタックオーバーフロー) を修正しました。#108493 (Algunenano).
  • プロジェクションの作成後に ALTER TABLE ... ADD COLUMN ... DEFAULT で追加されたカラムを読み取る際、SELECT * プロジェクションがその DEFAULT 値 (例: -1) ではなくカラム型のデフォルト値 (例: 0) を返す問題を修正しました。基となるテーブルからの読み取りはすでに正しく、プロジェクションの再構築前に影響を受けたのはプロジェクションが処理した読み取りだけでした。#108569 (tiandiwonder).
  • LowCardinality(FixedString) (または LowCardinality(Nullable(FixedString))) のキーカラムがキー内で関数によってラップされている場合、パーティションおよび主キーのプルーニングが暗黙的に無効になる問題を修正しました。たとえば、PARTITION BY sipHash64(k) % N と WHERE k = 'literal' の場合です。このようなクエリでは、パーティションをプルーニングせず、すべてのパーティションをスキャンしていました。#108777 (groeneai).
  • これに依存する比較操作を修正するため、バケット化された Map シリアライゼーションで元のキー順序を保持します。#109178 (Avogar).
  • Arrow、ArrowStream、Avro 形式、およびレガシーの ORC、Parquet リーダーにおいて、null 許容の struct カラムに対するスキーマ推論が、許可されていない Nullable(Tuple) 型 (allow_experimental_nullable_tuple_type が無効) を返す問題を修正しました。DESCRIBE は CREATE TABLE が拒否する型を返していたため、推定したスキーマを使用したテーブルの作成またはデータの挿入は、Nullable Tuple type is not allowed エラーで失敗していました。#109185 (nihalzp).
  • サーバーがインラインデータ自体を解析する場合 (send_table_structure_on_insert_with_inline_data = 0) 、インラインの VALUES データを含む INSERT INTO TABLE FUNCTION (例: remote(...) または file(...)) でカラムの DEFAULT 値が適用されないバグを修正しました。DEFAULT を持つ非 Nullable カラムに明示的に NULL を挿入すると、宣言されたデフォルト値ではなく 0 になっていました。現在は通常のテーブル INSERT および HTTP protocol と同様に動作します。#109258 (groeneai).
  • groupArrayLastMerge のセグメンテーション違反を修正しました。集計関数の状態のデシリアライゼーションが検証されるようになり、破損した状態による範囲外アクセスが発生しなくなりました。 #109485 (mstetsyuk).
  • デシリアライゼーション時に破損した集計関数の状態を拒否することで、largestTriangleThreeBuckets 集計関数のセグメンテーション違反を修正しました。 #109492 (mstetsyuk).
  • 要求された ClickHouse 型が Nullable でラップされている場合 (例: Nullable(Tuple(...))) に、null 非許容の Tuple を含む Parquet カラムを読み取れず、以前は TYPE_MISMATCH で失敗していた問題を修正しました。 #109615 (groeneai).
  • Parquet v3 ネイティブリーダーで、物理的に null 許容の struct カラム (Parquet の OPTIONAL group) を Nullable(Tuple(...)) として読み取れるようになりました。以前は TYPE_MISMATCH が発生していました。 #109898 (groeneai).
  • 深くネストした Array/Tuple/Map/Object リテラルのコピーまたは破棄時に発生するサーバークラッシュ (ネイティブスタックオーバーフロー) を修正しました。たとえば、max_parser_depth を引き上げた状態で、非常に深くネストしたリテラルを含むクエリを実行した場合に発生していました。 #110393 (Algunenano).
  • metadata-only の ALTER MODIFY COLUMN T により Nullable(T) に変更されたカラムで、optimize_functions_to_subcolumns 使用時に IS NULL / IS NOT NULL / count() の結果が誤る問題を修正しました。変換前に書き込まれたパートでは、.null サブカラムが物理的に存在する親カラムから導出されず、ストレージ型のデフォルト値 (NULL) で埋められていたため、既存の非 null 行が誤って NULL と報告されていました。 #110584 (groeneai).
  • LowCardinality のキーカラムが、LowCardinality を再導入するネストした CAST チェーンでラップされている場合 (例: WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5') に、主キーの索引解析中に発生する LOGICAL_ERROR (“Bad cast from ColumnString to ColumnLowCardinality”) を修正しました。debug および sanitizer ビルドではサーバーが中断され、リリースビルドではクエリが失敗していました。 #111050 (groeneai).
  • Apache Arrow Java 19.0.0 未満 (Apache Spark に同梱) で生成された、ネストした Array または Map カラムが空の Arrow および ArrowStream データの読み取りを修正しました。以前は、offsets バッファが小さすぎることに関する INCORRECT_DATA エラーで拒否されていました。 #111101 (Algunenano).
  • Tuple、Array、Map、Nullable、Variant などのコンテナカラム内にネストされた、互換性のある集計状態カラム (例: quantileState および quantilesState(0.9)) に対する集合演算で発生する、論理エラー Block structure mismatch (debug および sanitizer ビルド) および Illegal types of arguments エラーを修正しました。 #111191 (alexey-milovidov).
  • ネイティブプロトコル経由で受信した破損した replicated-index データの検証を追加しました。 #112331 (Avogar).
  • INSERT が、パーティション化されたターゲットテーブルへの書き込み前に行数を変更する materialized view を経由する場合に、挿入の重複排除中に発生する範囲外読み取りを修正しました。 #112649 (CheSema).
  • 物理型が宣言精度に対応する型よりも広い Parquet DECIMAL カラム (例: 物理 INT64 として保存された DECIMAL(9, 2)) を読み取る際の範囲外書き込みを修正しました。このようなファイルは有効な Parquet であり、他のライターでも生成されますが、リーダーは宣言精度に基づいて宛先カラムのサイズを決定する一方、デコーダーは物理幅で書き込んでいたため、メモリが破損していました。このようなファイルの読み取り時に値が宣言精度に収まらない場合は、破損したデータを返す代わりに DECIMAL_OVERFLOW が発生するようになりました。また、物理型と同等以上の幅を持つ型ヒントを指定すれば、損失なく読み取れるようになりました。 #113046 (groeneai).
  • PARTITION BY (a)、ORDER BY (b)、INDEX ix (b * c) TYPE minmax、PROJECTION p (SELECT (b) ...)、CONSTRAINT c CHECK (a > 0)、TTL (d + INTERVAL 10 YEAR)、DEFAULT (a + 1) など、冗長な括弧を含む定義で記述されたテーブルにおいて、ATTACH PARTITION FROM、REPLACE PARTITION、MOVE PARTITION TO TABLE、および ReplicatedMergeTree レプリカの追加が、Tables have different ...、METADATA_MISMATCH、または INCOMPATIBLE_COLUMNS により失敗する問題を修正しました。 #114188 (alexey-milovidov).
  • http_response_headers または additional_table_filters を含む設定プロファイルなど、Map 値を持つ設定を含むアクセスエンティティが、ClickHouse で再読み込みできない形式で保存され、再起動後に恒久的に読み込めなくなるバグを修正しました。 #114620 (groeneai).
  • 空の String や数値のゼロなど、要素型のデフォルト値と等しい定数 LowCardinality の検索値に対して、has、indexOf、countEqual、mapContainsKey、mapContainsValue、および Map の添字演算が “not found” を返す問題を修正しました。 #114624 (groeneai).
  • DISTINCT、QUALIFY、ウィンドウ関数、またはプロジェクション内の arrayJoin を含むクエリに対して、単純な GROUP BY ... LIMIT 最適化 (設定 optimize_trivial_group_by_limit_query) が誤った結果を返す問題を修正しました。これらは集約後にグループを消費またはフィルタリングするため、集約を LIMIT + OFFSET 個のキーに制限すると、行数が不足したり誤った値が返されたりする可能性がありました。この最適化は、このようなクエリには適用されなくなりました。 #114695 (alexey-milovidov).
  • デフォルトの optimize_trivial_count_query = 1 で、SELECT count(arrayJoin(arr)) が誤った結果を返す問題を修正しました。配列要素数ではなく保存されている行数が返され、file() および url() ではクエリが 0 を返していました。 #115227 (groeneai).
  • Nullable カラムに対する uniqExact(tuple(x)) など、NULL 許容性を隠す単射関数でラップされた引数に対して、uniq、uniqExact、uniqHLL12、uniqTheta が誤った結果を返す問題を修正しました。optimize_injective_functions_inside_uniq 最適化によりラップ関数が削除された結果、NULL 行がカウントされずにスキップされていました。 #115466 (vdimir).
  • 同等の主キーが冗長な外側の括弧の有無だけで異なる場合に、KeeperMap リーダーが共有メタデータを受け入れられるようにしました。 #115642 (skuznetsov-clickhouse).

テキスト索引とスキップ索引の修正

  • 複数の minmax スキップ索引と use_skip_indexes_for_disjunctions = 1 を持つ MergeTree テーブルで、ネストした coalesce/ifNull 比較 (例: WHERE coalesce(a, b, coalesce(c, d), e) = const) を含むクエリによってサーバーが異常終了する問題を修正しました。<op>(coalesce(...), const) のスキップ索引への書き換えが内部の coalesce 引数にも再帰的に適用されるようになり、インデックスごとの KeyCondition RPN が、選言追跡コードが想定するテンプレートの RPN と一致するようになりました。#103929 (groeneai).
  • 25.8 で作成され、別の ALTER TABLE ... ADD COLUMN で追加されたカラムに対するスキップ索引を含むパーツに対して ALTER TABLE ... MATERIALIZE INDEX を実行した際に発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。強制再計算時に、ミューテーションがパーツ上の既存のすべてのスキップ索引およびプロジェクションで必要なすべてのカラムを正しく読み取るようになりました。#105039 (groeneai).
  • use_query_condition_cache = 1 (デフォルト) の場合に SELECT クエリで発生する、サイレントな過少カウントを修正しました。ブルームフィルタースキップ索引を持つカラムに対する PREWHERE pk_prefix = X WHERE non_pk IN (...) 形式のクエリが、pk_prefix = X 述語の QueryConditionCache を不正な状態にしていたため、その後の通常の SELECT count() ... WHERE pk_prefix = X が誤って過少カウントされた結果を返していました。すべての 26.x リリースが影響を受けます。#105686 (groeneai).
  • ベクトル検索クエリでベクトル索引に加えて minmax などの別のスキップ索引を使用し、use_skip_indexes_on_data_read = 1 が設定されている場合に発生する例外を修正しました。#106473 (shankar-iyer).
  • 空のマージ済みパーツのテキスト索引で発生する “Too many marks” を修正しました。#106867 (azat).
  • query_plan_optimize_lazy_final が有効な状態で、ReplacingMergeTree テーブルに対して FINAL とテキスト索引のフィルターを使用してクエリを実行すると誤った結果になる問題を修正しました。遅延 FINAL 最適化で、テキスト索引からのダイレクトリードを再現しない読み取りステップが構築されていたため、フィルターによって一致するすべての行が除外されていました。#106894 (Ergus).
  • LowCardinality メンバーを含む Variant 定数を、キー式が非単調な決定論的関数であるキーカラム (たとえば sipHash64(col) 上の minmax スキップ索引) と比較した際に発生する LOGICAL ERROR (Bad cast from type DB::ColumnString to DB::ColumnLowCardinality) を修正しました。#107111 (groeneai).
  • use_skip_indexes_for_top_k 最適化が有効で、ソートカラムに minmax スキップ索引を持つパーツから論理削除によって行が削除されている場合に、ORDER BY <col> LIMIT n が誤った (多くの場合は空の) 結果を返す問題を修正しました。この最適化では、論理削除されたパーツの古い minmax を、実際の上位行を保持するパーツより上位にランク付けしなくなりました。#107320 (groeneai).
  • Set スキップ索引が LowCardinality カラム上のグラニュールを枝刈りできない問題を修正しました。#107868 (thevar1able).
  • use_skip_indexes_on_data_read 設定は、compatibility 設定により 26.1 より前のデフォルト値 (false) に戻せるようになりました。これにより、データ読み取りパスによって minmax/set/bloom_filter スキップ索引のマーク範囲の枝刈りが妨げられるパフォーマンスリグレッションを回避できます。#108330 (egor-click).
  • 部分的にマテリアライズされた複数のテキスト索引からの直接読み取りを修正しました。 #108607 (CurtizJ).
  • アナライザを使用して Distributed エンジンテーブル経由でテーブルをクエリした際、mapValues(map) または mapKeys(map) に定義されたテキスト索引が暗黙的に使用されない問題を修正しました。この索引はローカルテーブルおよび cluster()/remote() 経由では使用されていましたが、Distributed エンジンテーブル経由のクエリではスキップされていました (force_data_skipping_indices を使用すると INDEX_NOT_USED で失敗) 。 #109188 (groeneai).
  • 必須の索引引数を省略した場合に CREATE HYPOTHETICAL INDEX ... TYPE set (および ngrambf_v1/tokenbf_v1) でサーバーがクラッシュする問題を修正しました。このようなステートメントは明確なエラーで拒否されるようになりました。 #109294 (groeneai).
  • テキスト索引が存在する場合に、空の検索対象を指定した関数 has、mapContainsKey、mapContainsValue が誤った結果を返す問題を修正しました。 #110246 (rschu1ze).
  • マージ対象のパーツのいずれかが空の場合 (たとえば、パーツ内のすべての行を削除するmutationの後) 、テキスト索引を含むパーツのマージ時に発生する ATTEMPT_TO_READ_AFTER_EOF エラーを修正しました。 #112490 (CurtizJ).
  • WHERE 句に多数のドットを含む大きな文字列定数があり、テーブルに bloom_filter、tokenbf_v1、ngrambf_v1、または text スキップ索引がある場合に、クエリプラン最適化が停止する問題を修正しました。フィルターカラム名と JSONAllPaths(...) の索引カラムを照合する際に、名前をドットで分割するすべてのパターンが列挙されるため、スキップ索引条件の構築が定数の長さに対して二次時間になっていました。 #113289 (groeneai).
  • 行ポリシーがクエリの唯一のフィルターであり、ソートカラムに minmax スキップ索引がある場合に、ORDER BY ... LIMIT が要求された行数より少ない行、場合によっては0行を返す問題を修正しました。トップK最適化により、行ポリシーが適用される前に読み取り範囲が絞り込まれていました。 #114073 (alexey-milovidov).

データレイクに関する修正

  • 外部ツール (例: Spark) によってフォーマットバージョンがアップグレードされた Iceberg テーブルの読み取り時に発生する論理エラー例外を修正しました。 #100407 (alexey-milovidov).
  • PREWHERE 最適化を有効にした ORC データファイルを含む Iceberg テーブルの読み取り時に発生する例外 (LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it') を修正しました。 #101206 (groeneai).
  • 同時実行される Iceberg メタデータ更新や DeltaLake テーブルに対する merge 読み取りなど、固定された datalake_table_state がない状態で読み取りパイプラインに到達する可能性があるパスを介して Iceberg または DeltaLake データレイクテーブルを読み取る際に発生する LOGICAL_ERROR 例外を修正しました。 #102033 (groeneai).
  • 非同期メタデータ読み込み中に通常のデータベース内で Iceberg エンジンテーブルを読み込む際、DataLakeConfiguration::getCatalog から断続的に発生する Logical error: 'Database <name> not found' を修正しました。 #103775 (groeneai).
  • show_data_lake_catalogs_in_system_tables を有効にした DataLake カタログデータベースで、INSERT または DDL 文が存在しないテーブルを参照した際に発生する過剰なカタログ/S3 メタデータ読み取りを修正しました。スペルミスの候補を提示する処理でカタログ全体のテーブルごとの Iceberg メタデータが読み込まれていたため、大規模なカタログではメモリを使い果たす可能性がありました。 #104124 (il9ue).
  • Parquet ファイルの読み取り時に read_bytes (および system.query_log、進行状況バーなどに表示される派生バイト/秒) が過大になる問題を修正しました。以前の実装では、各チャンクで行グループの合計圧縮サイズを報告していたため、N 個のカラムのうち K 個を読み取ると N / K 倍に過大計上されていました。現在は、選択したカラムのみで合計されます。また、以前はデータファイルサイズを報告していなかった Iceberg テーブルのファイルレベルの進行状況追跡も修正しました。 #105413 (groeneai).
  • iceberg_use_version_hint = 1 を指定せずに別の書き込み元 (icebergLocal/icebergS3 テーブル関数など) がテーブルを更新した後、これを指定して Iceberg テーブルを読み取ると誤った結果が返る問題を修正しました。ファイルが存在する場合はすべての書き込み元で version-hint.text が同期されるようになったため、ヒントを使用する後続の読み取り元は最新のスナップショットを参照します。 #105682 (groeneai).
  • Iceberg への書き込みで、Nullable(T) パーティションカラム内の NULL 値が保持されるようになりました。以前は、ClickHouse が書き込んだ NULL は、Spark または他の Iceberg 読み取り元で読み戻すと内部型のデフォルト値 (int の場合は 0) として表示されていました。 #105862 (groeneai).
  • 1 つの削除ファイルが複数のデータファイルを参照し、複数の削除ファイルが同じデータファイルに適用される場合に、Iceberg v2 の merge-on-read 位置削除で誤った行が返される問題を修正しました。削除エントリは参照先のファイルパスでフィルタリングされるようになりました。 #105888 (groeneai).
  • DETACH + ATTACH サイクルまたはサーバー再起動後に IcebergLocal テーブルエンジンが読み取り専用となり、以降のすべての INSERT が Local object storage Local is readonly. (READONLY) で失敗する問題を修正しました。 #106016 (groeneai).
  • オブジェクトメタデータにブロブ ETag が含まれていないため、Azure Blob Storage (例: Azure 上の Delta Lake テーブル) でファイルシステムキャッシュが暗黙的に無効化される問題を修正しました。 #106091 (thewisenerd).
  • Delta Lake テーブルで、設定済みのストレージ場所の外部にあるオブジェクトにメタデータ経由でアクセスできないよう、パス検証を追加しました。#106115 (scanhex12).
  • Iceberg パーティションプルーニングで、アナライザーがスカラーサブクエリの結果をソース型と変換先の型が一致する内部的な _CAST(Const, 'TargetType') でラップする WHERE partition_col = (SELECT ... FROM ...) フィルターを正しく処理するようになりました。以前は、このようなフィルターによりパーティションプルーニングが無効化され、フルテーブルスキャンが実行されていました。#106204 (groeneai).
  • テーブルを含む Iceberg REST カタログが誤って空であると報告される問題を修正しました。#106301 (LefterisXefteris).
  • Parquet V3 ネイティブリーダー使用時に、SELECT リストに含まれないカラムに対する IS NOT NULL を含む複合 WHERE 句で Iceberg または S3 テーブルをクエリすると発生する NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#106443 (tiandiwonder).
  • _file または _path フィルターを使用して Iceberg テーブルから読み取る際に、進行状況が過大に報告される問題を修正しました。以前は、フィルタリングの有無にかかわらず、total_bytes_to_read の進行状況にマニフェスト内のすべてのファイルが含まれていました。#106491 (PedroTadim).
  • 書き込みブロックのカラム名が最新スキーマのフィールド ID と一致しない Iceberg テーブルへの挿入時に発生するサーバー例外 (std::out_of_range 論理エラー) を修正しました (例: 同時実行中のライターが iceberg_metadata_staleness_ms ウィンドウ内でカラム名を変更した場合) 。サーバーを停止させる代わりに、挿入は明確なクエリエラーで失敗するようになりました。#107279 (groeneai).
  • MsgPack、BSON、ORC、Parquet、JSON、DeltaLake、Iceberg、Paimon 形式で深くネストされたスキーマまたは値を読み取る際に発生する可能性があるサーバースタックオーバーフロー (クラッシュ) を修正しました。このように深くネストされた入力は、例外として拒否されるようになりました。#107341 (Algunenano).
  • メタデータバージョン間で既存の schema-id を異なるスキーマに再バインドするメタデータを持つ Iceberg テーブルの読み取り時に発生するクラッシュ (デバッグビルドでの LOGICAL_ERROR) と、結果が誤っていても通知されないバグ (リリースビルド) を修正しました。このようなメタデータは ICEBERG_SPECIFICATION_VIOLATION で拒否されるようになりました。#107370 (groeneai).
  • Parquet データファイルに予約済みの行系統カラム (_row_id など) を含む Iceberg v3 テーブルの読み取りを修正しました。ネイティブ Parquet リーダーは、テーブルスキーマに含まれない予約済みフィールド ID に対して ICEBERG_SPECIFICATION_VIOLATION を発生させなくなりました。#107377 (gregakinman).
  • ファイルが同時に置き換えられている間にローカルディスクのオブジェクトストレージディレクトリ (例: local ディスク上の Iceberg テーブル) を一覧表示すると発生する、不必要な filesystem error: in last_write_time: No such file or directory 例外を修正しました。同時に削除されたエントリは、一覧表示を中断するのではなく、一覧から除外されるようになりました。#107432 (groeneai).
  • Azure 経由で Delta Lake テーブルを読み取る際に発生する ‘Account must be specified error’ を修正しました。#107620 (SmitaRKulkarni).
  • equality delete file を含む Iceberg テーブルの読み取り時にクラッシュする問題を修正しました。equality delete file 内のカラムが Nullable で、テーブルスキーマでは非 Nullable である場合 (またはその逆) 、delete file から読み取った値が未検証のキャスト (カラム型の混同) を介して異なる型のカラムに挿入され、カラムが破損して server がクラッシュしていました。 #109551 (mstetsyuk).
  • decimal (またはその他のパラメータ化された Primitive) 型がメタデータファイルごとに異なる空白でシリアル化されている Iceberg テーブルの読み取り時に、誤って ICEBERG_SPECIFICATION_VIOLATION error が発生する問題を修正しました。たとえば、テーブルメタデータでは decimal(20,0)、manifest では decimal(20, 0) となっている場合です。このような仕様上同等の型文字列は、現在は空白を無視して比較されます。 #109676 (groeneai).
  • default sort order が引用符で囲む必要があるカラム (例: @timestamp) を参照する Iceberg テーブルの読み取りを修正しました。このようなテーブルは、生成される Storage ORDER BY がエスケープされていないカラム名から構築され、SYNTAX_ERROR でパースに失敗するため読み取れませんでした。 #110233 (groeneai).
  • Nullable の ARRAY または MAP カラムを含む Paimon テーブルの読み取りを修正しました。このようなテーブルは、schema mapper が複合型を Nullable でラップしていましたが、ClickHouse ではこれが禁止されているため、まったく読み取れませんでした。その結果、DESC と SELECT の両方が Nested type Array(Nullable(Int32)) cannot be inside Nullable type で失敗していました。Nullable の複合カラムは、現在では非 Nullable の複合型にマッピングされ、NULL 値は空の値として読み取られます。 #113450 (groeneai).
  • テーブルファイルの書き込み前に Iceberg ネームスペースをカタログに登録するようにしました (SeaweedFS で必要) 。 #114285 (azat).

S3/Azure/オブジェクトストレージの修正

  • 並列レプリカを有効にしたクエリで url、s3 などのテーブル関数を使用した際に発生する「Distributed task iterator is not initialized」例外を修正しました。 #100146 (alexey-milovidov).
  • プランナーが recursive_with フラグを設定したものの WITH 式を含まない SELECT を生成した場合に、クラスターテーブル関数 (s3Cluster、urlCluster、fileCluster、…) で発生する可能性があるサーバーのセグメンテーションフォールトを修正しました。 #105433 (groeneai).
  • IN (subquery) 述語に対する Parquet および ORC のフィルタープッシュダウンを修正し、file、url、s3、およびオブジェクトストレージからの読み取りで、行グループ、ページ、ブルームフィルターのプルーニングが機能するようにしました。 #105863 (arsenmuk).
  • リスト取得から読み取りまでの間にリモート S3 オブジェクトがより短い内容で上書きされた場合に、キャッシュの事前ダウンロード中に発生する LOGICAL_ERROR 例外を修正しました。 #106375 (fm4v).
  • s3 テーブル関数が小文字の位置依存 partition_strategy (例: hive) を暗黙的に無視する問題を修正しました。 #107297 (jkartseva).
  • compatibility = '26.6' を設定した場合 (これにより hive パーティション方式が暗黙的に有効化されます) に、BAD_ARGUMENTS を発生させるべきところで S3 およびオブジェクトストレージのテーブルパス内の {_partition_id} を暗黙的に受け入れてしまうリグレッションを修正しました。 #107437 (LefterisXefteris).
  • キー・バリュー引数が重複している場合 (例: s3('http://...', format = 'CSV', format = 'TSV')) に、s3 およびその他のオブジェクトストレージテーブル関数が BAD_ARGUMENTS ではなく LOGICAL_ERROR をスローする問題を修正しました。 #107670 (groeneai).
  • s3/gcs テーブル関数の位置依存形式と名前付きシークレット引数形式を混在させた不正なクエリ (例: s3('url', 'a', 'b', secret_access_key = 'c')) をフォーマットする際に発生するサーバー例外 (Logical error: 'index >= result.start') を修正しました。 #107818 (groeneai).
  • URL スコープの <s3> エンドポイントブロックが最上位の <s3> のデフォルト設定より優先されるよう、S3 設定の優先順位を修正しました。 #109251 (bharatnc).
  • Azure サービスから返される 411 Length Required エラーを修正しました。Poco ベースの Azure HTTP トランスポートでは、ヘッダーを自ら設定しない SDK クライアント (例: Azure Key Vault) に対し、リクエストボディから Content-Length を設定するようになりました。 #110299 (thevar1able).

S3Queue の修正

  • バッチに処理不能なファイルが含まれ、かつバッチを処理中として設定する Keeper リクエストが同時に失敗した場合に、enable_hash_ring_filtering = 1 を有効にした S3Queue/AzureQueue で発生するサーバークラッシュ (範囲外アクセス) を修正しました。#108977 (groeneai)。
  • SHOW CREATE、system.query_log、サーバーログ、EXPLAIN の出力における認証情報の漏洩を修正しました。すべての S3 ロケーター形式で、任意の引数位置にある session_token および Google ADC シークレット、extra_credentials/headers の値、重複したシークレットキーや式で構築されたシークレットキー、無効な位置依存形式 (フェイルクローズ) 、S3 URL に埋め込まれた認証情報がマスクされるようになりました。これには、明示的 URL および名前付きコレクションの s3/s3Cluster テーブル関数、S3 をバックエンドとするテーブルエンジン (S3、GCS、データレイクエンジン、S3Queue) 、S3 データベースエンジン、BACKUP ... TO S3、Backup データベースエンジンが含まれます。さらに、式で構築された (SQL UDF からインライン化されたものを含む) encrypt/decrypt/HMAC のシークレット引数は、プロジェクション名、EXPLAIN QUERY TREE、EXPLAIN actions で非表示になるようになりました。#109768 (Algunenano)。
  • 永続的な処理ノードを使用する S3Queue/AzureQueue の順序付きモードを修正しました。ストリーミング中にバケットロックが更新されるようになったため、有効期限 (TTL) のクリーンアップ (persistent_processing_node_ttl_seconds) によって稼働中のプロセッサのロックが削除されなくなりました。それでもロックの所有権が失われた場合は検出・報告され (論理エラーおよび ObjectStorageQueueBucketLockLostOwnership プロファイルイベント) 、ストリーミングは新しいファイルイテレータで復旧します。#110292 (kssenii)。

セキュリティとアクセス制御に関する修正

  • HTTP またはネイティブプロトコル経由で ENGINE 句を指定せずに CREATE TABLE ... TO INNER UUID '...' を送信した場合に、CREATE TABLE 権限を持つ任意のユーザーが引き起こせるサーバークラッシュ (SIGSEGV) を修正しました。同じバグによりクライアントもクラッシュしていました。パーサーは null ポインタを参照解除する代わりに、適切な BAD_ARGUMENTS エラーを報告するようになりました。#105579 (groeneai).
  • allow_experimental_delta_kernel_rs を有効にして DeltaLake テーブルをクエリする際、無効なバイトを含む認証情報またはオプションが指定されている場合に発生するサーバークラッシュを修正しました (Rust FFI が extern "C" 境界をまたいでパニックしていました) 。#106109 (Algunenano).
  • Arrow IPC フォーマットリーダー (ArrowColumnToCHColumn) における複数のヒープ領域外読み取りを修正しました。不正な Arrow ファイルでは、バッファに含まれる行数より多い行数を宣言したり、list/struct/map の子要素の長さを親要素と不整合にしたり、単調増加でないリストオフセットを指定したり、子要素の有効性ビットマップを切り詰めたりすることで、ヒープ割り当ての末尾を越えた読み取りが発生する可能性がありました。これは file()、format()、テーブル関数、または ArrowFlight 入力を介して、SELECT 権限を持つ任意のユーザーが引き起こせます。現在は、生ポインタへのアクセス前にすべてのデータ、オフセット、view-struct、有効性ビットマップのバッファを検証し、list/struct/map の形状とオフセットの整合性を確認します。#106395 (Algunenano).
  • system.query_log の used_privileges および missing_privileges カラムに、別のユーザー、データベース、またはセッションによる無関係な先行クエリから漏洩した権限文字列が含まれる可能性があったバグを修正しました。#106425 (alexey-milovidov).
  • 展開される HTML エンティティ &nGt; または &nLt; を含む文字列をデコードする際の decodeHTMLComponent におけるヒープバッファオーバーフロー (サーバークラッシュ) を修正しました。これは単一の SELECT を実行できる任意のユーザーが引き起こせます。#106741 (Algunenano).
  • オンザフライ mutation (apply_mutations_on_fly) または patch parts によって PREWHERE より前に行がフィルタリングされた場合に、query condition cache が原因で誤ったクエリ結果が返される問題を修正しました。apply_mutations_on_fly = 1 で読み取るクエリが cache を汚染し、後続の apply_mutations_on_fly = 0 で同じ predicate を使用するクエリが、本来読み取るべきマークをスキップして少なすぎる行を返す可能性がありました。同じ修正は、PREWHERE より前のフィルターとして追加される行レベルのセキュリティポリシーにも対応しています。制限的な行ポリシーの下で実行されたクエリが、そのポリシーなしで同じ predicate を使用する後続のクエリに対して cache を汚染する可能性がありました。#107145 (groeneai).
  • 範囲外のイベント型を持つ細工された集約関数の状態を終了処理する際に発生する、windowFunnel のヒープバッファオーバーフロー (サーバークラッシュ) を修正しました。これは単一の SELECT を実行できる任意のユーザーが引き起こせます。#107412 (uwezkhan).
  • 非同期挿入のフラッシュパス (async_insert = 1) で、currentUser()、user()、SESSION_USER、および authenticatedUser() が空文字列と評価される問題を修正しました。これにより、これらの関数を参照する DEFAULT/MATERIALIZED カラム式および materialized view が影響を受け、挿入ユーザー名ではなく空文字列が暗黙的に保存されていました。#107541 (groeneai).
  • 同じユーザーまたはロールに複数の quota が割り当てられている場合、非決定論的に選ばれた 1 つの quota だけが適用されるのではなく、すべての quota がまとめて適用されるようになりました (いずれかを超過するとクエリは拒否されます) 。SHOW QUOTA および system.quota_usage には、現在のユーザーに適用されているすべての quota が表示されるようになりました。#107664 (alexey-milovidov).
  • SYSTEM RESET DDL WORKER の実行に、新しい SYSTEM RESET DDL WORKER 権限が必要になりました。以前は、認証済みのすべてのユーザー (readonly ユーザーを含む) がこれを実行でき、DDL worker の状態を繰り返しリセットして ON CLUSTER DDL をブロックできました。#108460 (groeneai).
  • ssl_certificate によるユーザー識別を修正し、単一の * ワイルドカードが名前のコンポーネント1つだけに厳密に一致するようにしました (RFC 6125 6.4.3) 。以前は、CN または DNS: SAN サブジェクト内のワイルドカード (例: *.corp.example.com) が evil.deep.corp.example.com のような複数ラベルの名前にも一致していたため、より深いサブドメイン用の証明書の所有者がワイルドカードユーザーとして認証できました。URI: SAN の照合は変更されていません。 #108472 (groeneai).
  • MySQL wire protocol コマンド COM_FIELD_LIST (mysql_list_fields) および COM_INIT_DB (USE database) に、それぞれの SQL 相当機能 (SHOW COLUMNS/DESCRIBE および USE) と同じアクセス制御が適用されるようになりました。以前は、ユーザーが一部のカラムにしか権限を持たないテーブルのカラム名を取得でき、SHOW DATABASES 権限なしで現在のデータベースを切り替えることができました。 #108508 (groeneai).
  • http_forbid_headers を大文字と小文字を区別せずに照合するようにしました。HTTP header 名は大文字と小文字を区別しないため、Authorization を禁止すると、authorization、AUTHORIZATION、その他の大文字・小文字の違いもブロックされるようになりました。設定済みの header_regexp パターンも、明示的な (?i) フラグを指定しなくても大文字と小文字を区別せずに照合されるようになりました。 #108509 (groeneai).
  • DESCRIBE loop('db', 'table') および DESCRIBE loop(<inner table function>) が SHOW COLUMNS / ソースへのアクセスチェックをバイパスし、権限のないユーザーがテーブルのカラムスキーマを読み取れるメタデータ漏えいを修正しました。 #108624 (groeneai).
  • 旧バージョン (25.12以前) で不正な auth_header を指定して作成された DataLakeCatalog データベースが、26.2以降へのアップグレード後にアタッチできず、server が起動できなくなる問題を修正しました。auth_header は CREATE 時にのみ検証されるようになり、ATTACH 時には起動中ではなく初回使用時にカタログが遅延構築されるため、設定不備または到達不能なカタログデータベースが1つあっても server の起動をブロックしなくなりました。 #108674 (groeneai).
  • RabbitMQ 接続を悪意のある過大な AMQP フレームに対して強化し、remote_url_allow_hosts チェックを rabbitmq_address に一貫して適用するようにしました。 #112479 (kssenii).
  • カラムリストなしの CREATE TABLE ... ENGINE = Distributed(...) により、作成ユーザーに閲覧が許可されていないローカルテーブルの構造が公開されるケースを修正しました。CREATE ではローカルserver 自身が実行するため、構造はユーザー自身のコンテキストで推論されるようになり、Remote engine と同様にターゲットテーブルに対する SHOW COLUMNS が必要になります。DDL queue (ON CLUSTER、または Replicated データベース内) から再実行される CREATE は対象外です。 #113220 (groeneai).
  • カラムリストを指定しない CREATE TABLE ... ENGINE = Buffer(...) により、作成ユーザーに閲覧権限のない宛先テーブルの構造が明らかになる可能性があった問題を修正しました。ローカルサーバーが自身で実行する CREATE では、構造がユーザー自身のコンテキストで推論されるようになったため、宛先に対する SHOW COLUMNS 権限が必要になりました。これはすでに Merge および Remote でも必要です。DDL キューから再実行される CREATE (ON CLUSTER または Replicated データベース内) は対象外です。 #113372 (groeneai).
  • authentication 前に読み取られる PostgreSQL ワイヤプロトコルの起動メッセージのサイズに上限を設定しました。 #115708 (alexey-milovidov).

バックアップと復元に関する修正

  • 循環依存関係のあるテーブルを含むバックアップの RESTORE 中にサーバーが異常終了する問題を修正しました。#103824 (thevar1able).
  • S3 ディスクおよびオブジェクトストレージで、マルチパートアップロードにより書き込まれたオブジェクトの S3 ストレージクラス (s3_storage_class / s3_storage_class_name) が無視され、大きなオブジェクトがデフォルトの STANDARD クラスで作成される問題を修正しました。ディスク、オブジェクトストレージ、バックアップでは、オプション名として s3_storage_class と s3_storage_class_name のどちらも使用できるようになりました。#106214 (alexey-milovidov).
  • SYSTEM RELOAD CONFIG によってエンドポイントごとの Azure Blob Storage 設定 (use_native_copy など) が破棄され、サーバーを再起動するまでディスクの設定が BACKUP/RESTORE で無視される問題を修正しました。#106357 (jkartseva).
  • バックアップを開始したレプリカ上で materialized view がまだ実体化されていない Replicated または Shared データベースで、リフレッシャブルmaterialized view の REPLACE ターゲットを収集すると、バックアップが FILE_DOESNT_EXIST で失敗する問題を修正しました。#106411 (jkartseva).
  • 従来形式の azure_blob_storage ディスクで、Azure BACKUP/RESTORE がエンドポイント設定を無視する問題を修正しました。#106784 (jkartseva).
  • AzureBlobStorage への BACKUP を修正しました。バックアップ内のデータファイルをコピーすると、宛先オブジェクトがバックアップディレクトリ外に書き込まれていました。S3 宛先でのバックアップオブジェクトの存在確認では、プレフィックスの一覧取得ではなく完全一致の HeadObject リクエストを使用するようになり、類似したプレフィックスを持つキーの誤一致を防ぎます。#107153 (pamarcos).
  • インクリメンタルバックアップでは、.backup メタデータファイルの <base_backup> ロケーターに S3 認証情報を保存しなくなりました。use_same_s3_credentials_for_base_backup = 1 を指定して作成されたバックアップ、またはこのバックアップロケーターと一致する明示的なベースバックアップ認証情報を使用して作成されたバックアップには、シークレットを含まないマーカーが保存され、復元時に追加設定なしで復元できます。異なる明示的なベースバックアップ認証情報または追加のベース認証引数を使用して作成されたバックアップでは、それらを base_backup 設定として RESTORE に渡してください。埋め込み認証情報を含む古いバージョンで作成されたバックアップも引き続き復元できます。#107357 (pamarcos).
  • ReplicatedMergeTree テーブルの RESTORE を修正し、バックアップ内の内容が重複したパーツが暗黙的に重複排除されず保持されるようにしました。#107652 (pamarcos).
  • 明示的な partition_strategy が指定されていないファイル系エンジン (S3、AzureBlobStorage、URL など) のパスに {_partition_id} プレースホルダーが含まれる場合は、file_like_engine_default_partition_strategy に関係なく、再び wildcard 戦略が適用されるようになりました。これにより、BAD_ARGUMENTS (“Partition strategy hive can not be used with a ‘_partition_id’ wildcard in the path”) で失敗するようになっていた 26.6 より前の DDL との後方互換性が回復します。#111279 (fm4v).

ClickHouse Keeper の修正

  • 書き込み失敗後の Keeper スナップショットのクリーンアップを修正しました。部分スナップショットが安全に削除され、latest_snapshot_meta を進めることなく失敗した書き込みを再試行できるようになりました。 #105779 (antonio2368).
  • 新しいリクエストディスパッチャの応答キューが応答スレッドの起動前に満杯になることで発生していた、フォロワーのキャッチアップ中の Keeper 障害を修正しました。 #106049 (antonio2368).
  • nuraft_max_log_gap_in_stream 設定が非デフォルト値に設定されている場合に、Keeper が起動時に停止することがある問題を修正しました (デフォルトは 0、つまり append_entries リクエストのパイプライン化は無効です) 。 #106220 (al13n321).
  • Keeper の内部 Raft TLS が openSSL.client.verificationMode 設定に従うようになりました。以前は、この設定にかかわらず Keeper 間の Raft 通信ではピア証明書の検証が常に有効だったため、none は暗黙的に無視されていました。現在は、none を指定すると Raft ピア証明書の検証が明示的に無効になり、設定がない場合は従来どおり安全なデフォルト動作が維持されます。none を明示的に設定している構成では、アップグレード後、設定どおり Raft ピア証明書の検証が行われなくなります。 #106726 (antonio2368).
  • 設定の再読み込み時に ZooKeeper セッションが不要に再作成される問題を修正しました。 #107096 (azat).
  • last_snapshot (および mntr の zk_latest_snapshot_size) で報告されるスナップショットメタデータが、古いスナップショットや重複したスナップショットのインストール後に後退することがあった ClickHouse Keeper のバグを修正しました。この問題により、同じインデックスのローカルスナップショットが、ピアへのストリーミング中または S3 へのアップロード中の登録済みスナップショットファイルをその場で上書きする可能性もありました。 #107321 (antonio2368).
  • ZooKeeper 接続が不適切なタイミングで失われた場合に、リフレッシャブルmaterialized view が停止する問題を修正しました。 #108234 (al13n321).
  • パーティションとしてクエリパラメータを使用する mutation を修正しました (ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}) 。置換後のパーティション値が、再度パースできない形式で mutation エントリにシリアライズされていたため、テーブルの読み込みに失敗していました (レプリケートテーブルではすべてのレプリカで発生) 。現在は、mutation command を ZooKeeper またはディスクに書き込む前に、再度パース可能かどうかも検証されます。これにより、同様の不一致が発生した場合はテーブルを壊すのではなく ALTER クエリが失敗します。 #111518 (al13n321).
  • system.zookeeper_info のデータのパース中に発生する数値オーバーフローを修正しました。 #111629 (kssenii).

クラッシュおよび安定性の修正

  • 新しいアナライザで、定数カラムとともに DISTINCT および ORDER BY を使用して LIMIT BY を使用した際に発生する NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#93195 (ashrithb).
  • Hive Metastore との通信時に発生する TTransportException エラーを処理するため、自動再試行機構と再接続ロジックを追加し、HiveCatalog 接続の安定性を改善しました。#98471 (otselnik).
  • short-circuit 関数 (if、multiIf、and、or など) のアナライザ時の定数畳み込みを修正し、静的に到達不能な分岐で分析時に例外が発生しないようにしました。たとえば、WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n)) は、ゼロ除算エラーで失敗する代わりに、正しく 0 を返すようになりました。#103157 (fastio).
  • 自身の状態を返す集約関数に対して runningAccumulate を呼び出した際に発生するサーバーの異常終了を修正しました。#105085 (antaljanosbenjamin).
  • getServerSetting を修正し、system.server_settings の報告内容と一致するように、実行時に変更可能なサーバー設定 (max_server_memory_usage、mark_cache_size、max_concurrent_queries、スレッドプールサイズなど) の現在有効な値を返すようにしました。#105172 (alexey-milovidov).
  • アナライザを有効にして ORDER BY ... WITH FILL INTERPOLATE と LIMIT N BY を組み合わせた際に発生する NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#105481 (yakov-olkhovskiy).
  • 本体が相関サブクエリである MATERIALIZED CTE を IN の右辺として使用した際に発生するサーバー例外 (Trying to execute PLACEHOLDER action 論理エラー) を修正しました。このような CTE は分析時に拒否されるようになり、CTE を FROM で直接参照した場合に同じパターンがすでに拒否される動作との一貫性を確保しました。#105518 (groeneai).
  • variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=false が関数実行中の例外を捕捉しない問題を修正しました。#105543 (Avogar).
  • TTL 式がサブカラムを参照する際に発生する NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#105578 (Avogar).
  • PostgreSQL テーブル関数、PostgreSQL table engine、または PostgreSQL ソースを持つ Dictionary を介して PostgreSQL から読み取るクエリがキャンセルされ (たとえば KILL QUERY により) 、リモート PostgreSQL クエリのキャンセルに失敗した場合に発生する可能性があったサーバークラッシュを修正しました。#105949 (rorylshanks).
  • クエリ内で送信される文字列リテラルが大きすぎることによって発生する可能性があったクラッシュを修正しました。#105996 (nickitat).
  • ORDER BY でソートプレフィックスを使用し、use_with_fill_by_sorting_prefix を有効にしている場合に、空の INTERPOLATE () を使用すると発生する INVALID_WITH_FILL_EXPRESSION 例外を修正しました。ソートプレフィックスのカラムは、明示的に名前を指定した INTERPOLATE (col) の動作と一致するよう、暗黙的な補間対象から正しく除外されるようになりました。#106001 (yakov-olkhovskiy).
  • RowBinary 入力またはクエリパラメータからの不正な AggregateFunction(uniqTheta, ...) 状態が、サーバーを終了させる代わりに CORRUPTED_DATA として拒否されるようになりました。#106260 (groeneai).
  • 制約に基づく最適化 (optimize_using_constraints) を相関サブクエリとともに使用した場合に発生するクラッシュと、NOT_FOUND_COLUMN_IN_BLOCK エラーが発生する可能性を修正しました。#106349 (Algunenano).
  • 同じ式に展開される 2 つ以上の ALIAS カラム (例: いずれも toString(x) として定義) を持つ Distributed テーブルを ORDER BY 句付きでクエリする場合、または同じ式を ALIAS カラム参照と SELECT リスト内で直接指定する場合に発生する NUMBER_OF_COLUMNS_DOESNT_MATCH 例外を修正しました。#106404 (yakov-olkhovskiy).
  • テーブル関数の引数内で multiIf にアスタリスクを渡すクエリ (例: numbers(multiIf(*, ...), 2)) で発生する LOGICAL_ERROR “カラムではない要素の名前を取得しようとしました: ExpressionList” を修正しました。解決できないマッチャーを含むクエリは、UNSUPPORTED_METHOD で拒否されるようになりました。#106647 (groeneai).
  • ディレクトリ一覧で無制限の再帰を引き起こす不適切な file glob パターンを拒否するようになりました。最大再帰深度 1000 が適用され、これを超えるクエリはスタックオーバーフローでサーバーを停止させる代わりに TOO_DEEP_RECURSION を返します。#106676 (groeneai).
  • テーブル関数 input がクエリ内の複数箇所から参照される非 MATERIALIZED CTE でラップされている場合に発生する 'Trying to read from input() twice.' 例外を修正しました。クエリはプランニング時に明確な INVALID_USAGE_OF_INPUT エラーで拒否されるようになりました。input は一度しか読み取れないクライアントストリームであり、クエリプラン内の単一のソースからのみ使用できます。#106682 (groeneai).
  • パース中に例外 (例: MEMORY_LIMIT_EXCEEDED) が発生した際のカラム不整合 (後に LOGICAL_ERROR につながる問題) を修正しました。#106802 (azat).
  • input_format_allow_errors_num > 0 を指定して切り詰められた Protobuf データを読み取る際のサーバークラッシュ (SIGSEGV) を修正しました。#106905 (atsarevskiy).
  • RocksDB ハンドルが解放された EmbeddedRocksDB テーブルに対して TRUNCATE または DROP を実行した際のサーバークラッシュ (null ポインターの逆参照) を修正しました。たとえば、以前の TRUNCATE によってデータディレクトリが空になった read_only テーブルが該当します。#106940 (groeneai).
  • 非常に大きな max_streams_for_files_processing_in_cluster_functions 設定で urlCluster などの *Cluster テーブル関数から読み取る際に発生する例外 (LOGICAL_ERROR として報告される std::length_error) を修正しました。ストリーム数は妥当な値に制限されるようになりました。#106946 (groeneai).
  • 分散クエリがシャードに送信される直前にキャンセルされた場合にサーバーが終了する問題を修正しました。#106950 (groeneai).
  • 同一のソーステーブルに対する 2 つの materialized view が同じターゲットテーブルに書き込み、そのターゲットを依存ビューが読み取る場合に、materialized_views_squash_parallel_inserts を有効にして INSERT を実行すると発生するサーバー例外 (論理エラー this->visited_views == right->visited_views) を修正しました。 #107027 (groeneai).
  • 書き込みスキーマに一致しないカラム (たとえば、サブカラムにフラット化される Nested カラムや、明示的なカラムサブセットを指定したテーブル関数) を含む Delta Lake テーブルへの挿入時に発生する LOGICAL_ERROR 例外を修正しました。このような挿入は、代わりにユーザー向けの INCOMPATIBLE_COLUMNS エラーで失敗するようになりました。 #107058 (groeneai).
  • 修飾付きアスタリスクマッチャー (たとえば x.*) が再帰項内で名前によって再帰 CTE を参照した場合に発生する LOGICAL_ERROR (“Table expression … data must be initialized”) を修正しました。このようなマッチャーは、その位置での修飾付きカラム (x.a) や修飾なしマッチャー (*) と同様に、再帰テーブルのカラムを展開するようになりました。 #107144 (groeneai).
  • リフレッシャブルmaterialized view に、修飾なしの名前が一時テーブルまたは CTE 名と一致する REFRESH ... DEPENDS ON <name> 依存関係がある場合、再起動時にサーバーがクラッシュループに陥る可能性がある LOGICAL_ERROR (“Unexpected exception in refresh scheduling”) を修正しました。 #107156 (groeneai).
  • toString や concat などの関数を、単一の非 NULL バリアントと NULL を含む Variant または Dynamic カラムに適用し、関数が入力カラムをそのまま返す場合に発生する LOGICAL_ERROR (Variant N (T) has size X, but expected Y) を修正しました。 #107374 (groeneai).
  • use_strict_insert_block_limits が有効な場合に、Alias テーブルへの非同期 INSERT で発生する LOGICAL_ERROR (block.rows() == getRows()) を修正しました。 #107400 (groeneai).
  • キー式 (ORDER BY、PRIMARY KEY、PARTITION BY、またはスキップ INDEX) に、右辺がテーブルである IN 演算子 (例: ORDER BY (x IN some_table)) が含まれる場合に発生するサーバー例外 (Logical error: Not-ready Set is passed as the second argument for function 'in') を修正しました。このようなキー式は、テーブル作成時に拒否されるようになりました。 #107424 (groeneai).
  • DISTINCT キーのセットの初期化中に割り当てに失敗した場合 (たとえば、メモリ制限に達した場合) に発生する可能性があった、DISTINCT 処理中のまれなサーバークラッシュを修正しました。 #107467 (groeneai).
  • 次の操作の前にキャッシュされた認証情報を更新することで、一時的な S3 認証情報の期限切れ後に DeltaLake 操作が失敗する問題を修正しました。STS の assume-role 認証情報も、認証失敗後に更新されます。 #107480 (ahmadov).
  • PARTITION BY キーを持つテーブルのクエリ時に、より大きな式に含まれる IN/NOT IN サブクエリ (たとえば WHERE (c0 IN (SELECT ...)) != 0) がある場合に発生する Not-ready Set is passed as the second argument for function 'in' (LOGICAL_ERROR) を修正しました。 #107515 (groeneai).
  • log_formatted_queries = 1 で分散クエリプランをローカル実行した場合 (make_distributed_plan + distributed_plan_execute_locally) に発生する可能性があったクラッシュ (null ポインタのデリファレンス) を修正しました。 #107570 (groeneai).
  • enable_analyzer = 0 でクエリを実行中に、ターゲットが Distributed テーブルである materialized view を読み取るとサーバーがクラッシュする問題を修正しました。 #107653 (groeneai).
  • input_format_allow_errors_num > 0 を指定して Protobuf データを読み取る際、同じブロック内で有効なメッセージの後に不正な (スキップ可能な) メッセージがある場合に発生するサーバークラッシュ (SIGSEGV) を修正しました。 #107739 (atsarevskiy).
  • リモートテーブル構造の推論中にブリッジが応答しなくなった場合に、odbc および jdbc table function が数分間ハングし、クエリのキャンセル (KILL QUERY、max_execution_time) を無視する問題を修正しました。 #107809 (alexey-milovidov).
  • remote()/remoteSecure() に渡される named collection の database/db オーバーライドが定数のデータベース名でない場合 (例: remote(nc, database = (SELECT 1))) に発生する可能性があったクラッシュ (null ポインタのデリファレンス) を修正しました。クラッシュする代わりに、クエリは明確なエラーで失敗するようになりました。 #108271 (groeneai).
  • _distance カラムを SELECT する vector search クエリで、LOGICAL_ERROR で失敗する代わりに適切なエラーが返されるようになりました。 #108423 (rschu1ze).
  • quantileTDigest 系の集約関数の状態カラムを GROUP BY キーとして使用し、複数のスレッドで同時にシリアライズした場合に発生する可能性があったクラッシュ (heap-buffer-overflow) を修正しました。 #110263 (groeneai).
  • 逆順 (降順) のソートキー (ORDER BY (g, r DESC)) を持つテーブルでの主キー索引解析における誤ったプルーニングを修正しました。先行キーのカラムの変化と、その後に続く降順キーのカラムにまたがる粒度が誤ってプルーニングされ、一致する行が除外される可能性がありました。 #111059 (nihalzp).
  • INSERT が、ターゲットが Alias で内部クエリが行数を変更する依存 materialized view を通過し、エイリアス経由で到達可能な重複排除テーブルが存在する場合に発生する論理エラー block.rows() == getRows() (リリースビルドにおける範囲外読み取りおよび挿入の重複排除の不具合) を修正しました。 #111103 (alexey-milovidov).
  • String 値を含む不正な集約関数の状態をデシリアライズする際に、範囲外メモリアクセスによって発生するセグメンテーションフォールトを修正しました。このような状態は検証のうえ拒否され、セグメンテーションフォールトが発生しないようになりました。 #111606 (mstetsyuk).
  • bloom filter メタデータに不整合がある Parquet file を読み取る際のクラッシュを修正しました。このようなファイルでは、本来より少ない行が警告なく返される可能性もありました。 #112498 (tiandiwonder).
  • File engine または file table function への INSERT で、Avro など追記をサポートしないフォーマットを使用して空でないファイルに追記した際に発生するsegfaultおよびサイレントなデータ破損を修正しました。ファイルディスクリプタまたはパーティション化されたパス経由の書き込みでは既存のチェックが回避されていたため、フォーマットプレフィックスが抑制され、既存のバイト列の後に2つ目のヘッダーが書き込まれ、ファイルが読み取れなくなっていました。このようなINSERTは、通常のパスの場合と同様に、CANNOT_APPEND_TO_FILEで拒否されるようになりました。#112839 (groeneai).
  • リフレッシャブルmaterialized viewがリフレッシュクエリの計画中にブロックされた場合に、DROP TABLEおよびSYSTEM STOP VIEWがハングする問題を修正しました。#113188 (evillique).
  • 非同期挿入キューのエントリのデッドラインが同一の場合に、まれにserverが終了する問題を修正しました。#113363 (mstetsyuk).
  • 読み取りバッファを所有するinput formatを介してParquetを読み取る際に発生するヒープメモリ破損を修正しました。たとえば、SOURCE(FILE(... format 'Parquet'))を使用するDictionaryです。バックグラウンドのprefetchおよびデコードタスクが、パイプラインによるバッファ解放後もそのバッファを介して読み書きする可能性があり、serverが異常終了するおそれがありました。#114668 (groeneai).
  • 名前が内部tableの名前より辞書式順序で前に来るTimeSeries table (たとえば-tsという名前のtable) をdropする場合や、ENGINE = TimeSeriesで宣言されたmaterialized viewをdropする場合にハングする問題を修正しました。drop処理がDDLガードで自己デッドロックし、KILL QUERYでキャンセルできませんでした。#114953 (groeneai).

その他のバグ修正

  • 関数 like、ilike、notLike、notILike、match が、非定数の needle を指定した定数の haystack (例: 'foo' LIKE pattern_column) をサポートするようになりました。従来は ILLEGAL_COLUMN がスローされていました。 #100479 (Onyx2406).
  • 通常のプロジェクションを持つテーブルに対する VIEW から選択する際に発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。 #101218 (amosbird).
  • max_bytes_per_second、max_cpus などのワークロード設定で、負の Float64 値 (例: -100.5) を拒否するようになりました。従来は負の整数値のみが検証されていたため、負の浮動小数点値により壊れた scheduler ノードが暗黙的に作成されていました。 #101842 (groeneai).
  • オブジェクトストレージからの読み取りが、クエリのキャンセルに速やかに応答するようになりました。 #103016 (SmitaRKulkarni).
  • max_insert_block_size_bytes が 0 (デフォルト) の場合に、INSERT の解析時に input_format_max_block_size_bytes が暗黙的に無視される問題を修正しました。この設定により、行入力フォーマットで生成されるブロックのサイズが正しく制限されるようになりました。 #103068 (Fgrtue).
  • 末尾のヌルバイトを誤って除去していたため、ClickHouse が無効な GSSAPI トークンを生成することがある問題を修正しました。 #103114 (EmeraldShift).
  • EXPLAIN SYNTAX がパラメーター化ビューを展開するようになりました。 #103263 (jrdi).
  • INSERT INTO FUNCTION hdfs(...) を介して HDFS に Parquet (および ORC、Arrow などのトレーラーを持つフォーマット) を書き込む際に発生するデータ破損を修正しました。26.1 以降、WriteBufferFromHDFS は finalize() 時に作業用バッファをフラッシュしていなかったため、Parquet の PAR1 フッターを含め、すべてのファイルの末尾最大 DBMS_DEFAULT_BUFFER_SIZE バイトが暗黙的に失われていました。このようなファイルを読み取ると、Not a Parquet file (wrong magic bytes at the end of file) が返されていました。 #103268 (groeneai).
  • 結合サイズ制限 (max_rows_in_join / max_bytes_in_join) を join_overflow_mode = 'break' とともに設定した場合に、相関サブクエリで誤った結果や論理エラーが発生する可能性がある問題を修正しました。相関サブクエリの評価用に内部で作成される結合は、これらのユーザー設定の制限を無視するようになったため、早期に停止して行を破棄することがなくなりました。 #103322 (groeneai).
  • 集約プロジェクションに異なる IN (...) 条件を持つ複数の sumIf 集約が含まれる場合に、誤った結果が返されたりプロジェクションが使用されなかったりする問題を修正しました。 #104765 (Ergus).
  • deltaSumTimestamp が、ゼロをまたぐ符号付き整数型に対して誤った結果を返す問題を修正しました。 #104830 (thevar1able).
  • メタデータファイルが破損しているか読み込めない、アタッチ直後の Iceberg、DeltaLake、または Hudi テーブルに対する DELETE FROM で発生する Logical error: 'Metadata is not initialized' を修正しました。代わりに通常のユーザー向け例外が報告され、サーバーは稼働を継続します。 #104917 (groeneai).
  • ストレージ句 (ORDER BY、PARTITION BY、PRIMARY KEY、SAMPLE BY、TTL、UNIQUE KEY、またはエンジンのSETTINGS) をENGINEなしで指定するATTACH TABLE name <clauses>;クエリでは、保存済みの定義を使用してテーブルを再アタッチし、ユーザー指定の句を破棄する代わりに、BAD_ARGUMENTSがスローされるようになりました。クエリレベルのセッションSETTINGS (log_commentなど) は引き続き適用されます。保存済みのメタデータで再アタッチするにはATTACH TABLE t;を使用し、設定を変更するにはATTACH後にALTER TABLE t MODIFY SETTING ...を使用してください。 #105068 (groeneai).
  • バイナリまたは文字列カラムに破損した中間オフセットを含むArrowまたはArrowStreamファイルの読み取り時に発生するヒープバッファオーバーフロー、および地理タグ付きArrowカラムの読み取り時に発生するヌルポインタ逆参照を修正しました。 #105449 (Algunenano).
  • ALTER後に圧縮されたMemoryテーブルからDynamicサブカラムを読み取る際にサーバーが終了する問題を修正しました。 #105464 (Avogar).
  • WithNamesフォーマットのスキーマキャッシュキーにskip_first_linesを含めるようにしました。 #105469 (Avogar).
  • 小規模でソートされていない入力に対してhistogramが誤った結果を生成する問題を修正しました。 #105548 (Avogar).
  • optimize_trivial_insert_selectが有効な場合に、テーブル関数で挿入先テーブルを使用する際の問題を修正しました。 #105555 (Avogar).
  • estimateCompressionRatioウィンドウ関数で、行間で蓄積データが失われる問題を修正しました。 #105581 (Avogar).
  • Hiveパーティション値の抽出でcast_string_to_date_time_mode設定が考慮されるようになり、デフォルトでパーティションキー内のタイムゾーン接尾辞 (例:+0000、+00:00、Z) を含むISO 8601タイムスタンプを受け入れるようになりました。 #105584 (alexey-milovidov).
  • 不正な形式の行の後におけるTemplate入力フォーマットのエラー復旧を修正しました。 #105735 (niyue).
  • ハンドラー引数が単一のスペースで区切られるようSYSTEM INSTRUMENT ADDのフォーマットを修正し、値が3つ以上ある、または最小値が最大値を超える範囲を指定する無効なSLEEPインストルメンテーション引数リストを拒否するようにしました。 #105984 (pamarcos).
  • Boolパーティションキーに対するALTER TABLEパーティション操作が暗黙的に失敗する問題を修正しました。 #106004 (Avogar).
  • デフォルト値を持つ型付きJSONパスに対するJSONExtractRawおよびJSONHasの問題を修正しました。 #106005 (Avogar).
  • データレイク構成において、空のベースパスに誤った/プレフィックスが付く問題を修正しました。 #106013 (thewisenerd).
  • 部分的なSHOW DICTIONARIESの権限取り消し時にsystem.dictionariesが0行を返す問題を修正しました。 #106105 (Avogar).
  • (c0 / -42) や intDiv(c0, -42) などの単調減少関数を含む ORDER BY を持つテーブルに対するクエリで、誤った結果が返される問題を修正しました。基になる列に対する述語 (例: c0 < 0) によって一致する行を含む granule が誤ってプルーニングされ、結果が欠落することがありました。 #106136 (nihalzp).
  • 挿入時に不正な形式の DDSketch 集約状態を検証するようにしました。 #106236 (yariks5s).
  • 失敗した SLRU のダウングレード後に発生する filesystem-cache の整合性の問題を修正し、エントリがエビクション状態のまま残ることを防止しました。また、System/Data 分割 cache のリサイズと空き領域のクリーンアップも修正し、制限値をアトミックに更新して両方の cache セグメントから領域を回収できるようにしました。 #106286 (kssenii).
  • 仮数のシフトが 1 ビットずれていたことに起因する、非正規 Float16 値から Float32 値への誤った変換を修正しました (例: Numpy の .npy ファイルから読み取る場合) 。 #106343 (jh0x).
  • regexpExtract(haystack, pattern) を修正し、capturing group のない pattern では INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE をスローするのではなく、マッチ全体を返すようにしました。 #106374 (groeneai).
  • NaN または無限大の点座標を含む source data から Polygon 辞書を構築する際に発生する論理エラーを修正しました。このような座標は、明確なエラーとともに拒否されるようになりました。 #106423 (alexey-milovidov).
  • HTTP Dictionary で、named collections を通じて request headers を指定できるようになりました。 #106459 (ZelvaMan).
  • 不正な形式の Avro enum 値を検証し、範囲外のメモリアクセスや server の終了を引き起こす代わりに、例外として拒否するようにしました。 #106476 (mstetsyuk).
  • 同順位の判定時に、LIMIT WITH TIES および小数指定の LIMIT WITH TIES が ORDER BY ... COLLATE の照合順序を考慮しない問題を修正しました。照合順序上は等しい行 (例: 数値照合順序における '1' と '01') がバイト単位で比較されていたため、一部の同順位行が結果から誤って除外されていました。 #106539 (nihalzp).
  • 入力が照合順序 (ORDER BY ... COLLATE) でソートされている場合に、順序付き DISTINCT および順序付き LIMIT BY の最適化 (負の LIMIT BY を含む) が誤った結果を返す問題を修正しました。照合順序上は等しい行 (例: 大文字・小文字を区別しない照合順序における 'a' と 'A') は照合キーで並べ替えられ、値としては隣接しないため、collator を使用する場合は順序付き最適化をスキップするようにしました。 #106564 (nihalzp).
  • NATS consumer のシャットダウン中に発生し、server が終了する可能性があった競合状態を修正しました。 #106692 (mstetsyuk).
  • 信頼できない入力から到達可能な format reader における、複数のメモリ安全性およびリソース枯渇の問題を修正しました。これには、native Parquet リーダーの DataPageV2 における definition/repetition level の長さ処理時のヒープ範囲外読み取り、深くネストされたスキーマを持つ Parquet files でのスタックオーバーフロー、GeoParquet WKB/WKT geometry および Avro の文字列/バイト列の解析時に max_memory_usage を無視する割り当てが含まれます。 #106739 (Algunenano).
  • HTTPS クライアントに対して keeper_server.http_control.secure_port が平文 HTTP レスポンスを返していた問題を修正しました。セキュアポートで HTTPS が正しく提供されるようになりました。#106822 (linjiayu1025-collab).
  • SHOW CREATE ROW POLICY が、他のキーワードと異なり restrictive/permissive を大文字ではなく小文字で出力していた問題を修正しました。#106865 (valerypetrov).
  • パーティションキーに LowCardinality(Nullable(...)) カラムを含むテーブルで、パーツを再読み込みするたびに (server の再起動、DETACH、または ATTACH) 、パーツが破損としてマークされデタッチされていた問題を修正しました。26.5 以降、このようなカラムの最小値と最大値が NULL の場合、パーツごとの minmax 索引ファイルが書き込まれなくなっていましたが、パーツ整合性チェックでは引き続きそのファイルが必要とされていました。影響を受けるバージョンで書き込まれたパーツには minmax 索引ファイルがないため、引き続き手動で再アタッチする必要があります。#106945 (PedroTadim).
  • 非同期挿入フラッシュ (AsyncInsertFlush) クエリにおいて、system.processors_profile_log および system.query_log の elapsed_us が常にゼロとなり、read_rows/read_bytes が過少計上されていた問題を修正しました。#106982 (cwurm).
  • UNION/INTERSECT/EXCEPT の一方のブランチが Sparse シリアル化されたカラムを読み取り、もう一方のブランチが同じカラムを完全なカラムとして読み取った場合 (たとえば materialized view へのプッシュ時) に発生していた、Block structure mismatch in UnionStep stream 論理エラー (debug/sanitizer ビルドでは server が異常終了し、release ビルドでは Code: 49) を修正しました。#107041 (groeneai).
  • optimize_read_in_order および read_in_order_use_virtual_row を有効にした UNION ALL に対する ORDER BY クエリで、行の順序が不正になる問題を修正しました。#107053 (vdimir).
  • SHOW ROW POLICIES または SHOW MASKING POLICIES の後に FORMAT、SETTINGS、または INTO OUTFILE 句が続く場合に構文エラーとなる問題を修正しました (例: SHOW ROW POLICIES FORMAT TabSeparated) 。#107061 (groeneai).
  • カスタムのトリム文字セットが 16 文字を超える場合に trimLeft、trimRight、trimBoth (およびエイリアスの ltrim、rtrim、trim) が TOO_LARGE_STRING_SIZE をスローしていた問題を修正しました。任意の長さのトリムセットが再びサポートされるようになりました。#107071 (fm4v).
  • quantileExactExclusive、quantilesExactExclusive、quantileExactInclusive、quantilesExactInclusive で、大きな範囲にまたがる Int64 入力に対して誤った結果を生成する可能性があった符号付き整数オーバーフローを修正しました。#107154 (groeneai).
  • 設定の再読み込み時に起動スクリプトが再実行されなくなり、一度限りの起動アクションが再度実行されることを防止します。#107187 (mstetsyuk).
  • max_streams_for_union_step 設定によりユニオンパイプラインが縮小された場合に、optimize_read_in_order を有効にした UNION ALL に対する ORDER BY の結果順序が不正になる問題を修正しました。プランがソート済みの UNION 出力ストリームに依存する場合は、縮小をスキップするようになりました。#107208 (vdimir).
  • server の終了処理の後半でプロキシ設定を解決する際に、null ポインタを逆参照する可能性があった問題を修正しました。#107231 (PedroTadim).
  • ORDER BY ... WITH FILLで、補完対象カラムより前の ORDER BY カラムにCOLLATE照合順序が指定されている場合に余分な行が生成される問題を修正しました。行はその照合順序を使用してソートプレフィックスごとにグループ化されるようになり、ソート順と一致します。#107365 (groeneai) 。
  • 非有限の浮動小数点値 (nanやinfなど) がprometheusQuery / prometheusQueryRangeテーブル関数のタイムスタンプ/期間引数として渡された場合の未定義動作を修正しました。このような引数では、不正なタイムスタンプが生成される代わりにBAD_ARGUMENTSが発生するようになりました。#107417 (groeneai) 。
  • NULLペイロード値を保持する集約関数 (*_respect_nullsファミリー: anyRespectNulls、first_value_respect_nulls、anyLast_respect_nulls、last_value_respect_nulls) に対するoptimize_rewrite_aggregate_function_with_if最適化で誤った結果が返される問題を修正しました。このような関数では、この最適化によってf(if(cond, x, NULL))が-If形式に書き換えられなくなりました。#107430 (groeneai) 。
  • ORC 入力内の不正な境界値に対する検証を追加しました。#107580 (al13n321) 。
  • MySQL プロトコルポートにおける、認証不要でメモリ枯渇を引き起こすサービス拒否攻撃を修正しました。#107599 (tiandiwonder) 。
  • MySQL Connector/J 8.2.0以降 (9.xを含む) で MySQL インターフェイスを使用できない問題を修正しました。OKパケットのinfoフィールドは MySQL サーバーと同様に長さエンコードされるようになり、JDBC driverが接続できるようになりました。#107693 (alexey-milovidov) 。
  • UNION/INTERSECT/EXCEPTの兄弟ブランチがWHERE述語のみ異なり、一方のブランチの述語が定数畳み込みによってConstカラムになった場合に発生していた、Block structure mismatch in UnionStep stream論理エラー (デバッグ/サニタイザービルドではサーバーが異常終了し、リリースビルドではCode: 49) を修正しました。#107719 (groeneai) 。
  • Apache Arrow Java 19.0.0より前 (Apache Sparkを含む) で生成された空のStringまたはBinaryカラムを持つArrowおよびArrowStreamデータの読み取り時に、INCORRECT_DATAが発生しなくなりました。#107764 (Algunenano) 。
  • Variant判別子が存在しないバリアントを参照する不正な Native ブロックは、安全に拒否されるようになりました。#107991 (uwezkhan) 。
  • 複数スレッドでDynamicカラムを読み取る際のパフォーマンスリグレッションを修正しました。#107997 (Avogar) 。
  • 非推奨のデータレイク設定storage_catalog_urlがカタログガードによって正しく拒否されるようになりました (以前はstorage_catalog_typeとstorage_aws_access_key_idのみがチェックされていました) 。また、エラーメッセージにはすべての非推奨設定が一覧表示されます。#108040 (alexey-milovidov) 。
  • ArrowFlightテーブル関数/エンジンが、オプションのdatasetキーを省略した名前付きコレクションをNo such key 'dataset'エラーで拒否する問題を修正しました。#108041 (alexey-milovidov) 。
  • シークレットと認証情報が、ログに記録されたビュー SQL に公開されるのではなく、system.query_views_log.view_query でマスクされるようになりました。#108214 (Fidelaggio)。
  • JSON の型付きパスで type_json_allow_duplicated_key_with_literal_and_nested_object が機能しない問題を修正しました。#108218 (Avogar)。
  • 入力文字列が 32768 バイトを超え、文字セットを検出できない場合に、detectCharset および detectLanguageUnknown 関数で未定義動作 (memcpy に null ポインターが渡される) が発生する問題を修正しました。#108250 (groeneai)。
  • 遅延マテリアライゼーションとともに WHERE 句で _part_starting_offset/_part_offset 仮想カラムを使用するクエリで発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#108287 (vdimir)。
  • format_display_secrets_in_show_and_select が無効 (デフォルト) の場合、EXPLAIN actions、EXPLAIN header、および EXPLAIN PIPELINE の出力で、encrypt、decrypt、HMAC などの関数のシークレット引数を非表示にしました。#108386 (Algunenano)。
  • CREATE OR REPLACE は、その TO ターゲットが同じリフレッシャブルmaterialized view にすでに所有されている場合でも成功するようになりました。別のビューに所有されているターゲットは引き続き拒否されます。#108392 (evillique)。
  • file() および Dictionary ソースと同様に、catboostEvaluate のモデルパスを user_files ディレクトリに制限しました。以前は、この関数は制約チェックなしで任意のファイルシステムパスを受け入れていたため、user_files 外のファイルの存在確認や読み取りをトリガーできました。モデルは現在、user_files 内に配置する必要があります。#108463 (groeneai)。
  • CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE により、新しいビューがソーステーブルをサブスクライブしないままとなり、置換後に insert されたすべての行が暗黙的に失われる問題を修正しました。#108728 (alexey-milovidov)。
  • GROUPING SETS、ROLLUP、または CUBE と max_threads > 1 を使用して uniqExact 集約状態をマージする際に発生するセグメンテーションフォールトを修正しました。#108928 (Algunenano)。
  • 互換性設定の引き上げ時に発生する可能性がある論理エラー “Unexpected substream … for column …” を修正しました。#109496 (Avogar)。
  • getClientHTTPHeader 関数は、RFC 9110 に従い、ヘッダー名を大文字小文字を区別せずに扱うようになりました。特に、authorization ヘッダーは大文字小文字にかかわらずフィルタリングされるようになりました。#109791 (Felixoid)。
  • 非同期 INSERT と重複排除 (async_insert=1、async_insert_deduplicate=1) で発生するサイレントデータ損失を修正しました。異なる insert_deduplication_token 値を持つ複数の async-insert エントリが、互いに異なるパーティションに書き込む 1 回の flush に統合された場合、各トークンは、自身の行が書き込まれたパーティションだけでなく、flush が処理したすべてのパーティションの重複排除ログに登録されていました。その後、書き込み先ではなかったパーティションでこれらのトークンのいずれかを再利用して insert を行うと、サイレントに重複排除されていました。トークンは現在、実際にその行が書き込まれたパーティションに対してのみ登録されます。#111049 (groeneai)。
  • 非同期 Native フォーマットの INSERT を修正し、ALTER ... MODIFY COLUMN 後に非互換となったバッファ済みエントリが 1 件あっても、バッチ全体が失敗しないようにしました。 #111108 (Felixoid).
  • 別種のオブジェクトで Dictionary を CREATE OR REPLACE する際の問題を修正しました。置換がすでにコミットされた後に CANNOT_DETACH_DICTIONARY_AS_TABLE で失敗し、孤立した _tmp_replace_* テーブルが残ることがありました。 #111142 (evillique).
  • 証明書検証を有効にした TLS ハンドシェイク中に発生するピア証明書のメモリリークを修正しました。 #111425 (thevar1able).
  • フィルター分割最適化 (query_plan_split_filter) が、フィルター対象のカラム名が入力カラム名と同じ WHERE で実行された場合に発生する可能性があった論理エラー Block structure mismatch in IntersectOrExceptStep stream: different number of columns を修正しました。この最適化により内部カラム __split_filter がブランチ出力ヘッダーに残り、INTERSECT や UNION などの集合演算における兄弟ブランチとの不一致が生じていました。 #111930 (groeneai).
  • 夏時間を採用するタイムゾーンで、Time、Time64、または DateTime 値に対して toString を使用するフィルターや ORDER BY 式で不正な結果が返る問題を修正しました。また、テーブルのソートキーのプレフィックスに対する ORDER BY と、String から Nullable(String) への変換における順序読み取り最適化を復元しました。 #113291 (vdimir).
  • kafka_num_consumers が CPU コア数に基づく上限を超えている場合の Kafka テーブルの ATTACH を修正しました。 #113390 (evillique).
  • 不正なクエリ結果を防ぐため、projection 使用時は分散索引解析を無効化しました。 #115132 (azat).
  • 行を空の結果に整形する際に、不正な結果または論理エラーを引き起こす可能性があった関数 formatRowNoNewline のバグを修正しました。 #115669 (alexey-milovidov).
  • 長さが 8 の倍数ではないバイナリ文字列リテラルの結果や、圧縮ブロックに本体がない場合の LZ4 展開処理で、初期化されていないメモリを返さないようにしました。 #115704 (alexey-milovidov).
  • 異なるオブジェクト値が誤って重複排除されるのを防ぐため、重複排除ハッシュにオブジェクトパスを含めました。 #115866 (Felixoid).
最終更新日 2026年9月26日