後方互換性を持たない変更
- ユーザー SQL に起因する S3 アクセスでは、デフォルトでサーバー自身のクラウド認証情報 (environment、IMDS/IRSA、instance profile、AWS config files、
role_arnベースの STS、GCP OAuth metadata) は解決されなくなりました。このようなリクエストでは、明示的な認証情報またはNOSIGNを使用する必要があります。named collections では、use_environment_credentialsのデフォルトが0になりました。以前の動作に戻すには、新しい設定s3_allow_server_credentials_in_user_queries(デフォルトでは無効) とあわせて、リクエストごとにuse_environment_credentials = 1を指定するか、または<s3>config でグローバルに設定します。明示的に指定した認証情報と、オペレーターによってプロビジョニングされた config 認証情報は影響を受けません。サーバー起動時またはRESTORE時には、その定義でこの種の認証情報を解決する永続的なS3/S3Queueテーブル、動的 S3 ディスク、またはDataLakeCatalogは、起動を中止する代わりに匿名で読み込まれます (認証情報を再設定するまでアクセス不可) 。この動作は、新しいサーバー設定s3_load_table_anonymously_if_credentials_restricted(デフォルトで有効) で制御されます。 #106855 (Raúl Marín). **/glob は、同じディレクトリ (任意の数のディレクトリ) にも一致するようになりました。以前は、glob パターン内の**/は特別扱いされていなかったため、data/**/file.txtはdata/file.txt(ディレクトリ階層 0) に一致しませんでした。 #97676 (Alexey Milovidov).- オブジェクトストレージに保存されるバックアップでは、
BACKUPとRESTOREの両方についてzip/zipxバックアップアーカイブフォーマットを拒否するようになりました。対象は、直接のS3(...)/AzureBlobStorage(...)宛先と、S3 または Azure をバックエンドとするDisk(...)宛先です。Zip は中央ディレクトリの読み取りにシークを必要としますが、オブジェクトストレージ越しでは非常に低速です。代わりにtar.gzなどの tar ベースのフォーマットを使用してください。 #101770 (Yash ). DateTime64のサポート範囲を[1900-01-01, 2299-12-31]から[0000-01-01, 9999-12-31]に拡張しました。従来の範囲外の値も、境界値にクランプされるのではなく、正しく計算されるようになりました (cctz 経由) 。精度 8 または 9 では、tick がInt64として保存されるため、範囲は引き続き狭いままです (ナノ秒精度での最大値は引き続き2262-04-11です) 。後方互換性については、以前に範囲外の date-time を使用していて、旧範囲内での非常に特殊な飽和ルールに依存していた場合、結果がより正確なものに変わる点に注意してください。 #107907 (Alexey Milovidov).AggregatingMergeTreeは、カラムが sorting key の一部でも aggregate-state measure (AggregateFunction/SimpleAggregateFunction) でもないスキーマを、テーブル作成時に拒否するようになりました。このようなカラムは background merges の際に暗黙的に任意の値へまとめられるため、それらに対してGROUP BYやフィルタを行うクエリで誤った結果を招きます。以前の動作に戻すには、allow_dimensions_outside_sorting_key = 1を設定してください。 Closes #751. #108087 (Alexey Milovidov).- config ベースの Workload scheduling 設定 (server config の
resourcesおよびworkload_classifiersセクション) を削除しました。代わりにCREATE RESOURCEおよびCREATE WORKLOADクエリを使用してください。廃止された config セクションは、警告を出したうえで無視されます。 #108286 (Sergei Trifonov). - ClickHouse は、同期挿入と非同期挿入の両方で、今後は常に統一された挿入の重複排除ハッシュを使用します。挿入ごとの従来の重複排除動作は削除されました。サーバー設定
insert_deduplication_versionは移行ガードとして残されています。この設定が従来の値 (old_separate_hashesまたはcompatible_double_hashes) になっている場合、サーバーは起動を拒否します。従来の値を使っていたバージョンからアップグレードする場合は、まずcompatible_double_hashesをサポートするリリースを実行してください (このリリースでは従来のハッシュと統一ハッシュの両方が書き込まれます) 。レプリケートテーブルでは、少なくともreplicated_deduplication_window_secondsの間実行してください (デフォルトでは 1 時間です。デフォルトのウィンドウでは、その期間内のすべての挿入について統一ハッシュが保持されるため、挿入の再試行ループには十分とみなされます) 。non_replicated_deduplication_window> 0 の非レプリケートテーブルでは、このウィンドウは時間ベースではなく件数ベースなので、少なくともその件数分の挿入についてcompatible_double_hashesを実行してください。その後、このバージョンへアップグレードする前に、この設定を削除するか、new_unified_hashに設定してください。#108361 (Sema Checherinda)。insert_deduplication_versionを一度も設定したことがない場合は、この項目は無視してかまいません。 - 長らく非推奨だった関数
snowflakeToDateTime、snowflakeToDateTime64、dateTimeToSnowflake、dateTime64ToSnowflakeを削除しました。これらは v24.6 の時点で非推奨となっており、代わりにsnowflakeIDToDateTime、snowflakeIDToDateTime64、dateTimeToSnowflakeID、dateTime64ToSnowflakeIDを使用する必要があります。設定allow_deprecated_snowflake_conversion_functions(以前はこれらの関数を再度有効にしていました) は、現在では廃止されており、効果はありません。#108711 (Alexey Milovidov)。 - 設定
use_legacy_to_timeのデフォルト値は0になりました。そのため、toTimeは日時を固定日付に変換するのではなく、値をTimeデータ型に変換します。従来の動作は、toTimeWithFixedDate関数を使うか、use_legacy_to_time = 1を設定することで引き続き利用できます。#108729 (Alexey Milovidov)。 - Naive Bayes モデル (
naiveBayesClassifierで使用) は、従来のサーバー側設定 (シリアライズ済み.binモデルファイルを参照する XML 設定ファイル) ではなく、クラスごとに事前集計された n-gram 出現回数のテーブルから読み込み時に構築されるNAIVE_BAYESレイアウトの Dictionary として設定する方式になりました。従来方式はサポートされなくなったため、既存のモデルは Dictionary として作り直す必要があります。naiveBayesClassifierとあわせて 3 つの新しい関数も追加されました。naiveBayesClassifierWithProbは予測クラスとその確率を返し、naiveBayesClassifierWithAllProbsはすべてのクラスとそれぞれの確率を返します。naiveBayesNgramsは Dictionary と同じ方法でテキストを n-gram にトークン化し、生のラベル付きテキストから学習データを構築できるようにします。さらに、いくつかの性能最適化も適用されています。9.7 MiB のコードポイント三連字言語モデルでは、使用メモリ量は約 49 分の 1 になり (1.84 GiB から 38 MiB) 、読み込みは約 11 倍高速化し、分類も約 11 倍高速化しています。#108773 (Nihal Z. Miaji)。 hasColumnInTable関数は、任意のリモートサーバー上のカラムを確認するためのオプション引数hostname、username、passwordを受け付けなくなりました。現在はhasColumnInTable(database, table, column)形式だけが残っています。削除されたリモートモードにはセキュリティ上の懸念がありました。任意のユーザーが任意のホストへの外向き接続を発生させることができ、認証情報がクエリログに漏えいするうえ、これを制限する privilege もありませんでした。#110881 (Alexey Milovidov)。
新機能
- クエリパフォーマンスを調査するための
EXPLAIN ANALYZEを追加しました。クエリを実行し、実際の実行メトリクスを使い慣れたクエリプラン形式で表示します。#106586 (Kirill Kopnev). #110668 (Kirill Kopnev). - projection 定義での
WHERE句のサポートを追加しました。WHEREを持つ projection は、predicate に一致する行だけをマテリアライズします。また、クエリのWHEREが projection のWHEREを含意する場合、オプティマイザはそれらを (コストベースで) 利用できます。#102347 (S Bala Vignesh). skip_unavailable_shardsが有効な場合に、リモート分片からのどの例外を黙って無視するかを制御するskip_unavailable_shards_mode設定 (Distributedエンジン設定としても利用可能) を追加しました。#79091 (cjw).- 指定した出力フォーマットを使って各グループ内の行を整形し、その結果を文字列として返す集約関数
groupFormatを追加しました。#93201 (Yang Hu). kafka_sasl_mechanismのサポート対象の値としてAWS_MSK_IAMを追加し、ClickHouse が SASL/SCRAM 認証情報を管理することなく、IAM ロールを使用して Amazon MSK に認証できるようになりました。#96100 (kalavt).- aggregate function combinator
-Tupleを追加しました。これは基になる集約関数をTupleカラムの各要素に独立して適用し、要素名を保持したまま結果のTupleを返します。t = (a, b)に対するsumTuple(t)は(sum(a), sum(b))を返します。複数の引数を取る集約関数では、引数ごとに 1 つの tuple を受け取り、位置ごとに対応付けます。corrTuple((a1, a2), (b1, b2))は(corr(a1, b1), corr(a2, b2))を返します。配列に対する-ForEachとは異なり、要素ごとに異なる型を持つことができ、各要素の結果の型と名前も保持されます。#98190 (RinChanNOW). - テキスト索引が
postprocessor引数をサポートするようになりました。これは、トークン化後に各トークンを変換する任意の式です (たとえばlower) 。#98939 (Jimmy Aguilar Mena). #108606 (Jimmy Aguilar Mena). stem関数に指定できるすべての言語を一覧表示するsystem.stemmersシステムテーブルを追加しました。#100611 (Jimmy Aguilar Mena).- 負の
LIMITに対するWITH TIESのサポートを追加しました。#100930 (Nihal Z. Miaji). toTimeZoneの糖衣構文として、Standard SQL の後置演算子AT TIME ZONEおよびAT LOCALのサポートを追加しました。式expr AT TIME ZONE zoneはtoTimeZone(expr, zone)と等価になり、expr AT LOCALはtoTimeZone(expr, timeZone())と等価です。#106092 (lizepeng).URLテーブルエンジンとurlテーブル関数は、URL スキームに応じて適切なバックエンドへ振り分けられるようになりました。file://はFileエンジン、s3:///gs:///gcs:///oss://はS3、az:///azure:///abfss:///abfs://はAzureBlobStorage、hdfs://はHDFS、http(s)://は従来どおりURLエンジンが処理します。url_base設定は、スキームの振り分け前に適用されます。振り分け対象となるのは、デフォルトのurl_scheme_mappersで解決される S3 スキームのみです。その他の S3-compatible ベンダースキーム (cos、obs、…) は対象外のため、s3エンジン/関数を直接使用する必要があります。#106093 (Alexey Milovidov).RemoteおよびRemoteSecureテーブルエンジンを追加しました。これらはremoteおよびremoteSecureテーブル関数の永続的な対応物です。CREATE TABLE ... ENGINE = Remote('addresses', db, table, ...)が、CREATE TABLE ... AS remote(...)に加えて使えるようになりました。#106189 (Alexey Milovidov).Kafka、RabbitMQ、NATS、S3Queue/AzureQueueテーブル、およびリフレッシュ可能なマテリアライズドビューのバックグラウンド処理を、単一の統一インターフェイスで制御するため、エンジン非依存のSYSTEM STOP、SYSTEM START、SYSTEM PAUSE、SYSTEM CANCEL、SYSTEM REFRESHコマンドと、そのサーバー全体版である... ALL BACKGROUND形式を追加しました。リフレッシュ可能なマテリアライズドビューでは、これらは既存のSYSTEM ... VIEWコマンドのエイリアスになります。NATS でこれらの制御をサポートする一環として、JetStream テーブルは insert の成功後にのみメッセージを確認応答するようになりました (at-least-once。従来は配信時に自動で確認応答されていたため、insert が失敗するとメッセージが失われる可能性がありました) 。新しいnats_wait_for_flush_interval設定 (デフォルトはfalseで、従来の低レイテンシ動作を維持) では、キューが空になり次第すぐに flush するのではなく、消費サイクルを flush interval 全体にわたって開いたままにできます。新しいnats_commit_on_select設定により、JetStream テーブルに対する直接のSELECTで、読み取ったメッセージを消費 (確認応答) するようになります。#107476 (Samuel Krempaský).mysql、postgresql、sqliteのテーブル関数およびテーブルエンジンが、テーブル名の代わりにユーザーのクエリを受け取り、それを external database にそのまま渡せるようになりました。クエリは、サブクエリ(SELECT ...)またはquery('SELECT ...')として記述できます。生成されるテーブルの構造は query result から推論され、このようなテーブルは read-only です。#46758 をクローズしました。初期実装は Denis Vidiaev に基づいています (#79652) 。#107740 (Alexey Milovidov).- ClickHouse Web UI (Play) に、複数のクエリを同時に扱うためのタブを追加しました。タブ、そのタイトル、パラメータ、アクティブ状態、小さな結果スナップショットはリロード後も保持されます (大きな結果や画像の結果は復元されません) 。また、ブラウザ履歴や
URLと連携し、マウスホイールで切り替えられます。#107826 (Alexey Milovidov). QueryRunnerテーブルエンジンを導入しました。QueryRunnerテーブルに挿入されたレコードは、そのエンジンが実行するクエリを表します。このエンジンは、非同期クエリ実行、生成されたクエリのバッチ実行、リモートクラスターへのクエリの振り分け、ベンチマーク、ファジング、シャドウトラフィックを使ったテストに利用できます。#107888 (Miсhael Stetsyuk).- GeoJSON の
FeatureCollectionドキュメントを書き込むためのGeoJSON出力フォーマットを追加し、1行につき1つの feature を生成できるようにしました。単一の Geo 型カラム (Point、LineString、MultiLineString、Polygon、MultiPolygon、Ring、またはGeometry) は各 feature のgeometryになり、idという名前のカラムは feature のidになり、残りのカラムは feature のpropertiesになります。このとき、propertiesという名前の単一の object 型カラム (JSON、Map、または名前付きTuple) がある場合は、そのままpropertiesobject として書き込まれます。Ringは単一リングのPolygonとして書き込まれます。新しいformat_geojson_validate_geometrysetting (デフォルトで有効) は、4点未満のPolygonや閉じていないPolygonring など、有効な GeoJSON shape ではない geometry を読み書き時に拒否するかどうかを制御します。さらに、GeoJSONinput format はidカラムをStringではなくNullable(String)として推論するようになったため、"id": nullメンバーが存在しない feature や明示的に指定された feature はNULLとして読み取られ、空文字列""と区別して保持されます。初期実装は Mark Needham によるものです (#98124) 。#108065 (Nihal Z. Miaji). QBitカラムと参照ベクトルの近似内積を計算するdotProductTransposed関数 (別名scalarProductTransposed) を追加しました。これは既存のL2DistanceTransposedおよびcosineDistanceTransposed関数を補完するものです。#108100 (Alexey Milovidov). また、quantizeBFloat16ToInt8の Lloyd-Max codes からなるQBit(Int8)`` に対して動作し、格納された codes を on the fly で逆量子化する量子化転置距離関数cosineDistanceTransposedQuantized、L2DistanceTransposedQuantized、dotProductTransposedQuantizedも追加しました。floating-point の参照ベクトルはフル精度のクエリとして扱われ、Float32精度で比較されます(Float64クエリはFloat32に縮小されます)。Array(Int8)` の参照はそれ自体が逆量子化され、対称的な quantized-vs-quantized distance になります。#109405 (Alexey Milovidov).QBitデータ型 (QBit(T, dimension, stride)) にオプションの stride parameter を追加しました。これにより、次元のグループを別々の stream に格納できるため、vector search で先頭の次元だけを効率的に読み取れます (たとえば Matryoshka embeddings) 。転置距離関数は、使用する次元数を減らして読み取るためのオプションの第4used_dimsargument を受け付けます。#108103 (Alexey Milovidov).QBitデータ型でInt8element type をサポートし、量子化された 8-bit integer vector に対する保存と転置距離 vector search (L2DistanceTransposed、cosineDistanceTransposed) を可能にしました。#108105 (Alexey Milovidov).- 新関数
randomHadamardTransform(vector[, seed[, output_dims]]):float vector に対する決定論的なランダム化 Hadamard transform。これは、量子化前の埋め込みの preprocessing に有用な、ノルムを保持する直交回転であり、 (truncated の場合は) Johnson–Lindenstrauss / subsampled-randomized-Hadamard ランダム射影としても利用できます。#108227 (Alexey Milovidov). - dictionary 定義内の
dictionary_lazy_loadsetting により、dictionary ごとに遅延読み込みを設定できるようにしました。これにより、グローバルなdictionaries_lazy_loadserver setting を上書きし、一部の dictionary は遅延読み込みにし、他の dictionary は即時読み込みにできます。#108314 (Miсhael Stetsyuk). - 組み込みのドキュメント検索ページを追加しました。HTTP interface の
/docsパスで利用でき、system.documentationテーブルに対するインスタント検索を提供し、リファレンスドキュメントをレンダリングします (syntax highlighting、数式、相互リンクに対応) 。 #108345 (Alexey Milovidov). - 関数
xxHash64Sparkを追加しました。これは seed42を使用してStringおよびNULL入力に対する Spark 互換のxxHash64値を計算し、Int64を返します。 #108436 (Lalit Yadav). ALTER USER、ALTER ROLE、ALTER SETTINGS PROFILEで、MODIFY SETTING name = valueの別名としてSET name = valueを受け付けるようになりました。これにより、設定リスト全体を置き換える bareSETTINGSclause とは異なり、他の設定を保持したまま個々の設定をその場で変更できます。これによって、ユーザーの他の設定を誤って消してしまう可能性が低くなります。 #108722 (Groene AI).- 既存の制約の expression をその場で変更する
ALTER TABLE ... MODIFY CONSTRAINT [IF EXISTS] name CHECK exprをサポートしました。 #108768 (Alexey Milovidov). - Web UI: カラムごとの color coding 切り替え (カラムヘッダー内の 🌈 アイコン) を追加し、bar、heatmap、categorical、なしを切り替えられるようにしました。選択した mode は URL とブラウザ履歴に保存されます。 #108873 (Alexey Milovidov).
KeeperがZooKeeperのCreateContaineropcode (19) を正しく処理するようになりました。これは新しいオプトインのcreate_containerfeature flag で制御されます (既定ではcreate_ttlと同様に無効) 。ensemble 全体の upgrade 後にこれを有効化すると、外部のZooKeeperclients (例: JavaZooKeeper3.9+) はConnectionLossを受け取る代わりにKeeperに対してコンテナー node を作成できるようになります。コンテナー node は期待どおりのephemeralOwnerセンチネル値を返し、leader 上の background GC thread が子を持たないコンテナーを自動削除します。opcode 19 を伴わずにCONTAINERcreate-mode flag を持つ通常のCreaterequest は、引き続き拒否されます (ZBADARGUMENTS) 。既知のZooKeeperclient でその組み合わせを送出するものはありません。これはサーバー側のプロトコル互換性のみです。ClickHouse 独自のZooKeeperclient (zkutil) には変更はなく、自身でコンテナー node を作成する API もありません。 #108908 (unintended).- WGS84 地理座標と UTM および MGRS 座標系の間で変換する関数
geoToUTM、UTMToGeo、geoToMGRS、MGRSToGeoを追加しました。 #108939 (Alexey Milovidov). digits(n, offset[, length])関数を追加しました。これは、1始まりのoffsetから始まるnの各桁をlength桁分返し、lengthを省略した場合は数値の末尾まで返します。 #109012 (Umang Agrawal).- 数値の二乗を計算する算術関数
sqrを追加しました。 #109061 (Lalit Yadav). - hierarchical dictionary 内のキーの最上位の祖先 (root) を返す新しい関数
dictGetRootを追加しました。これはdictGetHierarchy(dict_name, key)[-1]と等価な便利な関数です。 #109459 (Alexey Milovidov). - Dictionary の定義を削除せずに Dictionary が使用しているメモリを解放するための
SYSTEM UNLOAD DICTIONARYおよびSYSTEM UNLOAD DICTIONARIESコマンドを追加しました。Dictionary は次回アクセス時に遅延読み込みされます。#109639 (Matheus Nerone). - 2 つのジオメトリが交差しているかどうかを返す関数
geometryIntersectCartesianとgeometryIntersectSphericalを追加しました。polygonsIntersectCartesian/polygonsIntersectSphericalとは異なり、これらは共通のGeometry型を含む任意の geometry data type (Point、LineString、MultiLineString、Ring、Polygon、MultiPolygon) を受け付け、2 つの引数は異なる型でもかまいません。#110062 (Alexey Milovidov). - クエリパラメータ (
{name:Type}による substitution) を設定値として使用できるようになりました。これは、クエリのSETTINGSclause (SELECTやINSERTなど) 内と、standalone のSETクエリの両方で利用できます。たとえば、SELECT ... SETTINGS max_threads = {threads:UInt64}やSET max_threads = {threads:UInt64}のように指定できます。#108760 (Alexey Milovidov).
実験的機能
urltable function とURLtable engine のワイルドカード展開: URL パス内のワイルドカードを、HTTP の索引ページ (HTML または平文のディレクトリ一覧) を列挙して一致する URL を抽出することで展開できるようになりました。索引ページのサイズと読み取るディレクトリ数には制限があります。allow_experimental_url_wildcard_from_index_pages設定で有効になります。#95181 (Yue Ni).- テキスト索引でトークン位置 (
support_phrase_search索引引数) を保存できるようになり、hasPhrasefunction に対して direct read による完全なフレーズ一致が可能になりました。これを使用するには、MergeTree設定allow_experimental_text_index_phrase_searchを有効にする必要があります。#103172 (Elmi Ahmadov). この引数は当初、positionsという名前で導入されました。#109900 (Elmi Ahmadov). OPTIMIZE TABLE ... MANIFESTによりIcebergtable のマニフェストファイル compaction をサポートしました (allow_experimental_iceberg_compaction設定でガードされています) 。#95174 をクローズしました。#98178 (Smita Kulkarni). また、マニフェストのパーティションタプルが partition spec と一致しない場合のIcebergtable 向けOPTIMIZE TABLE ... MANIFESTを修正しました。#111368 (Smita Kulkarni).- 実験的な
ALPcodec に Real Doubles (RD) バリアントと、オプションのALP(AUTO|STD|RD)引数を追加しました。単独のALPは、常にSTDを使うのではなく、既存のSTD方式とRDの間で自動選択するようになりました。#99654 (Nazarii Piontko). - deserialized された
Paimonmetadata files (manifest lists と manifests) 向けのインメモリー SLRU cache を追加しました。use_paimon_metadata_files_cache設定で有効にすると、同じPaimontable に対する繰り返しクエリで、object storage からの metadata の再ダウンロードと再解析をスキップします。#104657 (XiaoBinMu). - 実行可能な user-defined functions 向けの “drivers” を追加しました。
<user_defined_executable_function_drivers_config>で宣言した driver は、CREATE FUNCTION name ARGUMENTS (...) RETURNS T ENGINE = DriverName(...) AS '...code...'で使用でき、function 作成時にユーザー code スニペットを compile するなどして処理し、実行可能 UDF を生成できます。生成された configuration は<dynamic_user_defined_executable_functions_path>に保存され、元の query はATTACH FUNCTIONとして永続化されるため、server の再起動後も function は保持されます。概念実証版のc_function_bodydriver は、executable_poolmode でサンドボックス化された Docker コンテナー内で C function body を compile して実行します。初期実装は Daniil Timižev に基づいています (#77128) 。#105131 (Alexey Milovidov). - predicate がカラムを default 値と非 default 値に正確に分割する場合、
SELECT count(*) FROM t WHERE col <op> default(col)を、データを一切スキャンせずにserialization.json内のカラムごとの疎性統計から処理できるようになりました (新しい experimental settingoptimize_trivial_count_with_sparsity_filterで有効化でき、既定では無効です) 。#105890 (Raúl Marín). /api/v1/queryおよび/api/v1/query_rangeへの Prometheus Query API request が、read_rowsとread_bytesmetrics とともにsystem.query_logに記録されるようになりました。#106611 (James Cunningham).- 実験的な
ReaderExecutorの読み取りパス (use_reader_executor、既定ではオフ) で、リモートのソース接続を開いたまま維持し、連続する読み取りで再利用できるようになりました。これにより、スキャン時のオブジェクトストレージへのリクエスト数を削減できます。#107735 (Sema Checherinda). また、暗号化ファイルの読み取りにも対応しました。グローバルな encryption header cache はencryption_header_cache_sizeserver setting で設定し、SYSTEM DROP ENCRYPTION HEADERS CACHEでクリアできます。#109702 (Sema Checherinda). make_distributed_planが有効な場合、MergeTreefamily のテーブルに対するSELECT ... FINALで、分散クエリプランによる読み取りをサポートしました。#108148 (Alexander Gololobov).MergeTreeクエリ向けに、実験的なプランベースの並列レプリカ実行を追加しました。#108504 (Igor Nikonov).- 実験的な
Quantizeベクトル codec ファミリーと、量子化された companion streams に対するオプトイン方式の 2 段階近似ベクトル検索 rewrite を追加しました。#108565 (Shankar Iyer). Float32/Float64(およびそれらの配列) カラム向けの、誤差境界付きの非可逆圧縮 codec である実験的なSZ3を復活させました。これはもともと Konstantin Vedernikov が実装したものです (#83088) 。これを使用するにはallow_experimental_codecsが必要です。#108788 (Alexey Milovidov). また、以前はCORRUPTED_DATAで失敗していたSZ3('ALGO_LORENZO_REG', ...)で圧縮されたデータの読み取りを修正し、有限でない浮動小数点値 (NaNおよび無限大) を圧縮する際の未定義動作も回避しました。#110762 (Alexey Milovidov).- 実験的な
ZXCcodec を追加しました。これは圧縮は低速ですが、展開は非常に高速な非対称 LZ codec で、圧縮率はLZ4とZSTDの中間です。これを使用するにはallow_experimental_codecs = 1が必要で、system.compression_codecsでは experimental として表示されます。#110620 (Alexey Milovidov). #111007 (Alexey Milovidov). onelake_client_idとonelake_client_secretの代わりに、onelake_bearer_tokensetting を通じて事前に取得した Bearer token を使用して OneLake に認証できるようになりました。これにより、長期間有効な client secret を共有せずに済みます。token は更新されないため、有効期限が切れたら database を再作成する必要があります。#109104 (Asya Shneerson).- AI functions は、named collection を最初の位置引数として受け取らなくなりました。credentials は
ai_function_text_default_credentials/ai_function_embedding_default_credentialssettings、または省略可能な末尾のMap(String, String)引数内のcredentialsキーから取得されます。この引数には、チューニング用パラメータ (model,max_tokens,temperature,system_prompt,instructions,dimensions) も含められます。#109232 (George Larionov). また、aiEmbed関数は named collection からmodelを読み取るのではなく、必須の位置引数としてmodelを受け取るようになりました (aiEmbed(text, model[, params])) 。これにより、埋め込みの再現性が確保されます。#110619 (George Larionov). skp_idx.packedに格納されたスキップ索引のdata_uncompressed_bytesを修正しました (packed_skip_index_max_bytes経由) 。報告される非圧縮サイズが実際には圧縮サイズになっており、その結果distributed_index_analysisが有効化されないことがありました。#109272 (Raúl Marín).MergeTreeテーブル向けに、実験的な packed data part ストレージを追加しました。これにより、part を構成するファイルの大半が、ストリームごとに個別のファイルとして保存される代わりに、単一のdata.packedアーカイブに格納されます (projections およびtxn_version.txtなどの一部の service file は引き続き別途書き込まれます) 。これはmin_bytes_for_full_part_storage、min_rows_for_full_part_storage、min_level_for_full_part_storageの各設定で制御され、既定では無効です。テーブルが packed part の書き込みを開始すると、古いサーバーバージョンではそれを読み取れなくなるため、このフォーマットを有効にするとサーバーをダウングレードできなくなります。#108118 (Raúl Marín).- 実験的な table function
evalを追加しました。これは定数 expression をクエリ文字列として評価し、結果として得られた単一のSELECTクエリを実行します。この機能は既定で無効になっており、allow_experimental_eval_table_function設定で有効にできます。作成者: Yue Ni。#110132 (Alexey Milovidov). - 実験的な Prometheus remote-write v1 HTTP ハンドラーに
zstd圧縮のサポートを追加しました。#110907 (James Cunningham). Delta Lakeテーブルへの書き込み (allow_experimental_delta_lake_writes設定) が Beta に昇格しました。#107034 (Kseniia Sumarokova).- 実験的な distributed query plan (
make_distributed_plan) の実行状況を観測するため、ProfileEventsDistributedPlanRemoteTasks、DistributedPlanLocalExecution、DistributedPlanHostsUsedを追加しました。#107985 (Shankar Iyer). - Keeper の実験的な RocksDB ベースのストレージ (
experimental_use_rocksdb) を削除しました。より優れた新しいオンディスクストレージをまもなく導入予定です。#108000 (Michael Kolupaev). - 分散索引解析 (
distributed_index_analysis設定で制御される実験的機能) では、大量の data part 名リストをクエリテキストに埋め込むのではなく、スカラーとしてリモートサーバーに送信するようになりました。これにより、max_ast_elements/max_query_size制限による障害の可能性を回避し、AST のパースに伴うオーバーヘッドを削減します。#110419 (Azat Khuzhin). - 実験的な
timeSeries*ToGridaggregation 関数を最適化しました。buckets は step と window の両方に揃えられるようになり、window が step より大幅に大きい場合の最終 aggregation が大幅に高速化されました。aggregation state のシリアライゼーションフォーマットは、互換性のない形で変更されています (これらの関数は実験的です) 。#106724 (Vitaly Baranov). TimeSeriesテーブルの external target table は、参照依存関係として登録されるようになりました。materialized view と同様に、これにより、それを参照するTimeSeriesテーブルを削除する前に external target table を削除できなくなります (check_referential_table_dependenciesが有効な場合) 。#108388 (Vitaly Baranov).- PromQL 関数
increaseを追加しました。#111023 (Vitaly Baranov).
パフォーマンス改善
JOINで、左側テーブルの主キー索引またはスキップ索引を使ってグラニュールをプルーニングできるようになりました。設定enable_join_runtime_filters_index_analysisで制御します。#109085 (Shankar Iyer).- 自明にシリアライズ可能な型のベクターのシリアライゼーションおよびデシリアライゼーションでは、個々の要素を処理する代わりに、単一のバッファ I/O 呼び出しを使用するようになりました。#89842 (Jimmy Aguilar Mena).
- 逆引き Dictionary ルックアップを最適化しました。
WHERE dictGet(dict, attr, key_expr) = valueのような定数等価述語は、IN (SELECT ... FROM dictionary(...))サブクエリに書き換えられる代わりに、キーのフィルター (key_expr = const、key_expr IN [...]、またはWHERE 0) へ直接定数畳み込みされるようになり、dictGetKeysの定数パスも並列に実行されるようになりました。#91164 (Nihal Z. Miaji). - 新しい設定
merge_tree_generic_exclusion_search_max_stepsを追加しました。これにより、汎用排除検索アルゴリズムが各データ part の主キー索引の解析に費やす step 数を制限できます。この予算は、残っている中で最も大きいキー範囲から優先的に消費されるため、小さな予算でもデータの大部分をプルーニングできます。完全に解析されなかった範囲は丸ごと読み込まれるため、クエリ結果の正確性は保たれますが、より多くのグラニュールが読み込まれる可能性があります。この制限は厳密には適用されず、最大でmerge_tree_coarse_index_granularitystep に加え、その part がすでに分割されている各範囲につき 1 step (たとえば query condition cache によるもの) だけ超過する場合があります。デフォルト値 0 は step 数が無制限であることを意味します。#92779 (Michael Jarrett). Distributedテーブル上の view に対するORDER BYとLIMITを含むクエリで、merge-sorted-streams 最適化を使うようになりました。外側のORDER BY/LIMITが単純な view の内側のクエリにプッシュダウンされるため、各 shard がローカルでデータをソートし、マージコーディネーターは完全なソートを行う代わりに、事前にソート済みの stream をマージします。#94102 (matanper).optimize_or_like_chainがデフォルトで有効になりました。#87779 をクローズしました。#94517 (Alexey Milovidov).- TTL のないローテーション済みの非 replicated
MergeTreeシステムログテーブルをtable_readonlyとしてマークし、不要なバックグラウンド処理を回避するようにしました。table_readonlyMergeTree設定は、通常のMergeTreeテーブルに対するすべてのバックグラウンド処理、すなわち通常の merge、TTL (DELETE/MOVE/再圧縮) および再圧縮 merge、バックグラウンド mutation、バックグラウンド part 移動も抑止し、さらに、これまで拒否していた insert、mutation、OPTIMIZEに加えて、変更系のパーティションコマンド (ATTACH/MOVE/DROP/DROP DETACHED/FETCH/REPLACE PARTITIONおよびテーブルへのMOVE PARTITION ... TO TABLE) も拒否するようになりました。その結果、TTL を持つtable_readonlyテーブルは、この設定が有効な間、有効期限切れデータを回収しなくなります。#95079 (Mathuranath Metivier). - サーバーに多数のユーザーが存在する場合の、
system.usersから単一のユーザーレコードを取得する処理の性能を改善しました。#96699 (Alistair Evans). - 並列レプリカによる順序付き読み取りでは、ローカル読み取りと同様にテーブルを
max_threads個の部分に分割するロジックを使うようになり、並列度が向上しました。#101434 (Nikita Taranov). MergeTreeテーブルで、主キーカラムがパーティションキーの入力カラムでもある場合、主キー索引解析時にパーティションの minmax 索引境界を使って、より多くの granule を刈り込めるようになりました。たとえば、ORDER BY (id, event_time)およびPARTITION BY toYYYYMM(event_time)を持つMergeTreeテーブルでは、ClickHouse は主キー索引解析時にevent_timeのパーティション minmax 索引を使用し、より適切な granule 刈り込み判断を行います。これは新しい設定use_partition_minmax_for_primary_key_pruningで制御されます (デフォルトで有効) 。 #103480 (UnamedRus).- Top-K dynamic filtering (
ORDER BY ... LIMIT n) を使用するクエリで、query condition cache を有効化しました。cache エントリは Top-K のプランパラメータごとに分割されるため、同じクエリではキャッシュ済みのWHEREフィルター結果が再利用され、LIMIT、ソート対象カラム、またはソート方向が異なる場合は新しいエントリが作成されます。 #104478 (Alexey Milovidov). use_constant_folding_in_index_analysis設定を追加しました (デフォルトでは無効) 。有効にすると、MergeTreeの主キー、MinMax、およびスキップ索引の解析で、パーティションレベルの定数を part ごとに個別にフィルター predicate に畳み込み、パーティション値に依存する分岐を含むフィルターの刈り込みを改善します。たとえば、PARTITION BY aで(a = 1 AND b >= 1) OR (a = 2 AND b > 10)のようなケースです。 #104582 (Mikhail Artemenko).GROUP BYキーがORDER BYキーおよびテーブルの sorting key と一致する場合に早期終了できるよう、aggregation-in-order にLIMITをプッシュダウンしました。これにより、読み取る行数を大幅に削減できます。 #104859 (Konstantin Bogdanov).- サーバー全体およびユーザーごとのカウンターに per-CPU atomics を使用することで、profile events の更新が最大 30 倍高速になりました。これは
user_profile_events_per_cpuserver setting で制御されます (64 コア環境ではユーザーあたり約 640 KiB を使用するため、ユーザー数が非常に多い場合は無効のままにしておくのが妥当なことがあります) 。 #105056 (Azat Khuzhin). allow_aggregate_partitions_independentlyをデフォルトで有効にしました。GROUP BYキーがパーティションキーに適している場合、ClickHouse は各パーティションを独立して集約し、グローバルなマージ処理を省略できます。実行時の heuristic により、パーティション構成が不利な場合 (パーティション数が少なすぎる、多すぎる、またはパーティションサイズの偏りが大きい) は、この optimization を自動的にスキップします。 #105128 (Alexey Milovidov).- rescoring を伴うベクトル検索クエリ (
vector_search_with_rescoring = 1) では、ベクトル索引が返した行に対してのみ正確な距離を計算するようになりました。同じMergeTreegranule 内の近傍行を brute-force で rescoring するのではなく、正確な行位置フィルターを適用します。 #105591 (Sergey Kuznetsov). #108846 (Sergey Kuznetsov). FixedStringキーに対するpartial_mergejoin algorithm の性能を改善しました。値ごとに 1 回ずつ比較を呼び出す代わりに、連続する値をまとめて比較します。 #105737 (Artem Zuikov).- データレイクのカタログ (Iceberg REST、Glue、Unity、Hive、Paimon) に対する
SHOW TABLESとsystem.tablesで、ネームスペースに関連する predicates をカタログにプッシュダウンするようになり、カタログ全体のスキャンを回避します。 #105022 をクローズしました。 #106029 (Smita Kulkarni). - overcommit やメモリ不足エラーを防ぐため、CPU ごとの未追跡メモリ量に上限を設けました (上限は server settings の
max_per_cpu_untracked_memoryとper_cpu_untracked_memory_thread_bufferで設定します) 。#106055 (Azat Khuzhin). - ソート済みの stream を走査して同じ key 値の連続区間を検出する演算子を高速化しました。対象は、順序付き
DISTINCT、順序付きLIMIT BY、順序付きの負のLIMIT BY、full_sorting_mergeおよびpartial_mergejoins です。#106502 (Nihal Z. Miaji). - Apache Arrow ライブラリを使わない、
ArrowおよびArrowStreamフォーマット用の native reader / writer を実装し、余分なデータコピーや変換を回避しました。これは現在デフォルトになっており (settingsinput_format_arrow_use_native_readerおよびoutput_format_arrow_use_native_writer) 、読み取り・書き込みの両方で高速です。#106522 (Alexey Milovidov). - LTO で発生していた thread-cache の破損を修正したうえで、jemalloc の LTO を再び有効にし、性能を向上させました。#106898 (Azat Khuzhin).
JOINの memory usage を削減し、性能を向上させました。ハッシュ結合の右辺では、すべての key 型でALLjoins のハッシュテーブルエントリがANYjoins と同じサイズになるよう、compact な 8 バイトのインデックスベースの行参照を使うようになりました。大規模なparallel_hashjoin クエリで benchmark を実施したところ、UInt64およびStringの結合キーを持つ 1 億~3 億行テーブルに対するINNERおよびANYjoins で、キーが一意の場合と重複する場合の両方において、クエリの中央値は約 12% 高速化し、Peak memory は約 15% 減少し、遅くなったクエリはありませんでした。特にUInt64結合キーのINNERjoins で改善が大きく、中央値で約 21% 高速化し、memory は 38% 削減されました。#107189 (Harikrishnan Prabakaran).- 単一カラムの非 Nullable
LowCardinality(String)結合キーが、ハッシュ結合でネイティブにサポートされるようになりました。#107264 (Nikita Taranov). dpsubjoin-order 列挙アルゴリズム (部分集合に対する動的計画法) を追加しました。これにより、dpsizeより低い optimization overhead で最適な join plan を提供でき、非 inner joins もサポートします。#107351 (Fisnik Kastrati).- 各 cache ファイルのサイズをファイル名 (
<offset>_<size>) にエンコードすることで、起動時の filesystem cache loading を高速化し、ファイルごとのstatを不要にしました。古いバージョンで書き込まれた cache ファイルの loading も引き続きサポートされます。#107415 (Alexey Milovidov). - 不要な文字列 materialization を回避することで、
Array(LowCardinality(String))に対するarrayElementと、key または values にLowCardinality(String)を持つMapに対する mapLIKE関数の性能を向上させました。#107450 (Michael Jarrett). - クエリ全体ではなく aggregation state 自体のメモリを追跡することで、memory usage が小さい場合に single-level aggregation を二段階集約へ変換しないようにしました。#107490 (Hechem Selmi).
- aggregating queries の解析を高速化しました。aggregation ハッシュテーブルサイズ統計の cache key は、完全な query AST を構築する代わりに、クエリプランから計算されるようになりました。#107643 (Dmitry Novik).
- 各行を SipHash でハッシュ化する代わりに、行の値をキーとして多重集合を扱うことで、
INTERSECT ALLとEXCEPT ALL(INTERSECTとEXCEPTのデフォルトモード) の性能を数倍向上しました。 #107649 (Raúl Marín). - cache ロックを保持せずに行ポリシーフィルタを再構築することで、
CREATE ROW POLICYとDROP ROW POLICYの同時実行時におけるクエリのスケーラビリティを向上しました。 #107917 (Azat Khuzhin). - 単純な正規表現に対する
match、extract、extractAll、replaceRegexpOne、replaceRegexpAll関数を、LLVM によって native code にコンパイルすることで高速化しました。これは新しい設定compile_regular_expressions(デフォルトで有効) で制御され、サポート対象外の subset の pattern は透過的に RE2 engine にフォールバックします。 #108004 (Alexey Milovidov). - 固定幅整数カラムのように match offsets が小さいカラムに対して、短い offset のオーバーラップコピーを NEON でベクトル化することで、AArch64 (ARM) での ZSTD 展開を高速化しました。たとえば、
UInt64カラムの展開は AWS Graviton 4 で最大約 2.3 倍高速になります。 #108049 (Alexey Milovidov). - gzip/zlib/deflate の圧縮および展開に
libdeflateライブラリを使用することで、.gz/HTTP/url/s3データおよび Parquet GZIP codec を高速化しました (圧縮は比率も改善しつつ約 1.15 倍、展開は約 1.4~1.5 倍) 。 #108074 (Alexey Milovidov). - 主キー filter と組み合わせたテキスト検索クエリの性能を向上しました。 #108114 (Anton Popov).
- クエリの初回実行時に収集した runtime statistics を使って後続の実行を最適化できるようになりました。
hashjoin algorithm は、収集した統計に基づいて自動的にparallel_hashに切り替わる場合があります。 #108125 (Hechem Selmi). JOINランタイムフィルタのサイズは、runtime join statistics の hash table サイズを使って最適化されます。これは新しい設定join_runtime_filter_size_from_hash_table_statsで制御されます。 #108313 (Hechem Selmi). - 固定サイズで低カーディナリティなカラムに対する LZ4 展開速度を改善しました。 #108175 (Nikita Taranov).
- デフォルトの空白文字を対象とする
trimLeft/trimRight/trimBoth関数 (およびその別名ltrim/rtrim/trim) を高速化しました。トリミングが不要な連続する行は 1 つの batch としてまとめてコピーされ、行ごとの空白走査は実際に先頭または末尾に空白がある行に対してのみ実行されます。 #108177 (Groene AI). - pattern が単一文字で、replacement も単一文字の場合の
replaceAllとreplaceRegexpAllの性能を向上しました (たとえばreplaceRegexpAll(s, ' ', '_')) 。この種の置換では文字列の layout が変わらないため、カラムは 1 回だけコピーされ、一致したバイトは一致ごとに検索ループを回す代わりにその場で書き換えられます。 #108178 (Groene AI). - 定数の
Polygonに対するpointInPolygon関数の性能を改善しました。前処理済みPolygonの cache は生の定数 argument をキーにするようになり、定数Polygonは入力ブロックごとに毎回再パースされるのではなく、1 度だけ (キャッシュミス時に) パースされるようになりました。#108184 (Groene AI). - デフォルトである best-effort モード (
date_time_input_format = 'best_effort',cast_string_to_date_time_mode = 'best_effort') で、標準的なYYYY-MM-DD hh:mm:ss形式の日時表現のパースを高速化しました。これにより、これらのデフォルト値をbasicからbest_effortに切り替えた際に生じたパース性能の低下を解消します。#108187 (Groene AI). - 機能が無効な場合 (
predicate_statistics_sample_rate = 0、デフォルト) 、MergeTreeの読み取りパスでsystem.predicate_statistics_logの selectivity counters を維持しないようにしました。これにより、すべての読み取りで granule ごとの atomic update とO(rows)の filter popcount が不要になり、特に AArch64 で顕著だった性能低下を解消します。#108190 (Groene AI). precise_float_parsing = 1でのテキストからの floating-point numbers のパースを高速化し、ほぼすべての入力でデフォルトパーサーと同等以上の速度を実現しました。あわせて、同梱のfast_floatライブラリを v8.2.10 に更新しました。#108205 (Raúl Marín).- base64 の encoding / decoding 関数で
simdutfライブラリを使用するようにし、性能を向上させました。#108333 (Konstantin Bogdanov). - 高コストな high-cardinality の key に対する
DISTINCTを最適化しました。#108366 (Nihal Z. Miaji). - Linux 以外の build (macOS および FreeBSD) では、jemalloc が dirty pages を積極的にパージしなくなりました (
freeごとにmadvisesyscall を実行しません) 。代わりに、Linux と同様に、有限のdirty_decay_msを持つバックグラウンドのパージスレッドを使用するようになりました。これにより、recursive CTE のように割り当てが頻繁に発生する workload が大幅に高速化されます (macOS の recursive CTE benchmark で約 2 倍) 。一方、RSS への影響はごくわずかです。#108430 (Alexey Milovidov). - 同じ
WITHエイリアスを参照する expression や、同じ subexpression を何度も繰り返す expression (たとえば深くネストしたif/multiIfの連鎖) について、actions DAG の構築時に共有 subexpression を再構築しないようにすることで、アナライザによるクエリプランニングを高速化しました。#108523 (Dmitry Novik). ONclause に非等価 predicate が含まれている場合でも、Runtime Filters が等価 key に対して構築されるようになりました。これにより、等価条件と非等価条件が混在する join で、ハッシュ結合 に入る行数を減らせます。LEFT ANTI JOINには影響ありません。#108579 (Antonio Álvarez Caballero).- codebase 全体で
-fno-math-errnoを有効化し、compiler が数学関数をより適切に最適化できるようにしました。#108628 (Nikita Taranov). - aggregation および join hash tables に対する software-prefetch の threshold を
4 * L2 cache sizeからL2 cache sizeに引き下げ、hash table が L2 に収まらなくなった時点で prefetch が有効になるようにしました。これにより、報告される L2 が大きいプラットフォーム (例: 2 MiB の L2 を持つ AArch64) で、中規模の hash tables (約 1~8 MiB) に対するGROUP BYおよびJOINで発生していた性能低下を解消します。#108655 (Groene AI). - window function のパフォーマンスを向上しました。
SELECT *を含む列数の多いテーブルに対するウィンドウクエリでは、メモリ使用量が大幅に減り、実行速度も向上しました。quantile*、uniq*、groupArrayを含むウィンドウ aggregate は、OVER ()およびOVER (ORDER BY ... RANGE ...)で高速化されています。cume_dist関数も高速化され、PARTITION BYまたはORDER BYを使用するウィンドウは、同じ値が多く含まれるカラムでもパフォーマンスが向上しました。#108688 (Nihal Z. Miaji). - 比較の
AND-chain が多数あるクエリや、非常に大きなAND-chain を含むクエリの query analysis を高速化しました。optimize_and_compare_chainoptimization は、クエリ tree の大部分を hash 化する代わりに、作業予算 (新しい設定optimize_and_compare_chain_max_hash_work) によって制限されるようになりました。また、lambda の解決では、再帰ガードのために lambda 本体の hash を再計算しなくなりました。#108757 (Alexey Milovidov). - 複数スレッドで
JSON/Dynamicカラムを読み取る際のパフォーマンス低下を修正しました。input_format_binary_max_type_complexity設定を値ごとに参照していたため、共有クエリコンテキストで参照カウントの contention が発生し、並列読み取りが直列化されていました。現在は設定値がスレッドごとに cache されます。#108797 (Seva Potapov). s3などの table function を介して object storage から多数の小さなファイルを読み取る際のパフォーマンス低下 (#71781 で導入) を修正しました。プリフェッチが停止して同期読み取りにフォールバックしていたため、大量の極小ファイルを単一スレッドまたは低い Concurrency で読み取る場合に大幅な速度低下が発生していました。#108872 (Nikita Fomichev). さらに、object storage の読み取りがファイルシステムキャッシュ (filesystem_cache_name) を経由する場合でも、最初の小さな object に対するプリフェッチが行われるようになりました。これにより、cache を有効にした状態で多数の小さなファイル (例:S3Queueインジェスト) を読み取る処理は、同期的なレイテンシ律速ではなくなりました。#109478 (Nikita Fomichev).- 深くネストした配列や tuple リテラルを、二次時間ではなく線形時間で parse するようにしました。#108892 (Alexey Milovidov).
parallel_hashjoin algorithm におけるロック contention に起因するオーバーヘッドを削減しました。#108938 (Hechem Selmi).- 圧縮する代わりに圧縮サイズを解析的に計算することで、
T64エンコードされたカラムに対するestimateCompressionRatioを高速化しました。#109054 (Raufs Dunamalijevs). - distributed query plan のシャッフル段階にあった single-threaded の bottleneck を解消しました。各上流 stream が、データ stream 全体を単一の transform に集約するのではなく、それぞれ独立して行を宛先 bucket に振り分けるようになりました。#109206 (Alexander Gololobov).
- Keeper サーバー のアイドル時の CPU usage を削減しました。#109255 (Michael Kolupaev).
- shared data に多数の疎な path を含む
JSONカラムのシリアライゼーションとマージを高速化しました。shared data を path ごとのカラムに flattening する際、蓄積されたすべての path カラムを各行ごとに走査する処理を除去し、欠損部分はセル単位でデフォルト値を挿入するのではなく、一括で backfilled するようになりました。#109341 (Groene AI). - 多数のカラムを含むクエリでの expression 評価に伴う CPU overhead を削減しました (例: stride が小さい
QBitカラムに対する vector search では、各ベクトルが数百個の bit-plane sub-columns に展開され、それらすべてが単一の*DistanceTransposed呼び出しに渡される場合) 。 #109380 (Alexey Milovidov). - H3 Geo 関数 (
h3ToGeoBoundary、h3ToGeo、h3CellAreaM2/h3CellAreaRads2、geoToH3) の性能を改善しました。正弦と余弦の組をまとめて計算し、座標変換での冗長な三角関数呼び出しを排除しています。結果は変わりません (bit-for-bit で同一です) 。 #109399 (Alexey Milovidov). - 比較処理と符号拡張コードを分岐なしにすることで、広い整数型 (
Int128、UInt128、Int256、UInt256およびDecimal128などの派生型) の比較 (<、>、<=、>=) を最大 7 倍高速化し、符号付き整数からInt256への変換も改善しました (符号が混在するデータで最大 7 倍) 。 #109474 (Manuel). uniqCombined(キーなし aggregation の場合を含む) およびuniqHLL12を最適化しました。 #109794 (Anton Popov). #109831 (Anton Popov).arraySortとarrayReverseSortは、lambda なしで呼び出した場合、数値 Array (DecimalおよびDateTime64を含む) に対して数倍高速になりました。 #109832 (Manuel).- 算術演算の高速パスを使うことで、固定オフセットの time zone (UTC など) における
DateTimeおよびDateTime64値に対するaddDays、addWeeks、subtractDays、subtractWeeksを高速化しました。 #109836 (Manuel). - テキスト索引の解析を最適化しました。 #109886 (Anton Popov).
parallel_hashjoin algorithm における非結合行の processing を、さらに 2 つのケースで並列化しました。残余 filter がある場合と、小さい 結合キー (単一レベルの hash map) の場合です。 #110008 (Hechem Selmi).- 組み込み web UI のレスポンス (Play UI、dashboards、静的ファイルハンドラー) は、client の
Accept-Encodingheader に応じて、zstd、gzip、deflate、brotli、lz4、xz、snappy、または bzip2 で圧縮されるようになりました。たとえば/playページは、非圧縮時の約 350 KB から、zstd では 120 KB 未満にまで縮小され、低速な connections での load time を短縮します。すでに圧縮済みのレスポンスはそのまま維持され、CDN と cache の適切な パーティション化 のためにVary: Accept-Encodingが出力されます。 #110108 (Sayantanu Dey). - 安全な場合には、フィルタをウィンドウ関数または
LIMIT BYの下まで押し下げられるようになりました。これにより、それらの外側に書かれた述語条件 (サブクエリを囲む外側のWHERE、またはQUALIFY内の AND 条件) のうち、ウィンドウのPARTITION BYカラムのみ、またはLIMIT BYのキーカラムのみを参照するもの (n >= 1かつOFFSETなしのLIMIT n BYの場合) がストレージ層まで到達し、主キーやパーティションの pruning、スキップ索引、プロジェクションを利用できるようになります。たとえば、SELECT ... row_number() OVER (PARTITION BY key ORDER BY ts) AS rn ... QUALIFY rn = 1 AND key = 'x'は、テーブル全体を読み込んでウィンドウ処理する必要がなくなりました。#110114 (Groene AI). #110116 (Groene AI). join_use_nulls = 1の場合、外部 join の両側のカラムを参照する null-rejecting なWHERE(例:WHERE l.k = 42 AND r.k = 42) は、join_use_nulls = 0の場合と同様に、join をINNER(またはLEFT/RIGHT) に変換し、主キーの pruning も行うようになりました。従来はこのケースでは変換がスキップされ、両方のテーブルが全件読み込まれていました。#110121 (Groene AI).- 非 const の
Nullable引数を 1 つだけ持つ関数は、新しい null map を割り当ててマージする代わりに、その引数の null map を結果と共有するようになりました。#110151 (Manuel). - 主キー索引解析で、hyperrectangle のチェックごとに発生していたヒープ割り当てを回避し、クエリの形状に応じて mark filtering を 5~26% 高速化しました。#110153 (Manuel).
- 要素ごとの比較ループの代わりにベクトル化された reduction を使うことで、数値配列に対する関数
arrayMinとarrayMaxの性能を約 1.3~1.5 倍向上させました。#110163 (Manuel). Deltacodec の展開をベクトル化しました。8/16/32-bit の data types ではデコードが 1.5~5 倍高速化され、Delta圧縮されたカラムのスキャンも最大 20% 高速になりました。#110189 (Manuel).- 定数 needle を使う
Enumカラム上の文字列検索関数 (like、position、match、countSubstrings、hasTokenなど) を高速化しました。各行を検索する代わりに、重複しない enum 名だけを検索し、その結果を各行に対応付けます。#110325 (Alexey Milovidov). - ベクトル化されたバッチ処理により、aggregate functions
groupBitOr/groupBitAnd/groupBitXorと variance family (varPop,varSamp,stddevPop,stddevSamp,skewPop,skewSamp,kurtPop,kurtSamp,covarPop,covarSamp,corr) を高速化しました。予測しにくい条件で-Ifcombinator を使う場合は最大 4 倍、これを使わない variance family でも最大 3 倍高速です。#110461 (Manuel). - テキスト索引の解析 (どのグラニュールを読むかを選ぶ段階) を高速化しました。すべてのグラニュールを順に調べる代わりに exclusion search を使用し、各 range check ごとの一時 bitmap 作成も回避します。#110530 (Anton Popov).
- 自動
PREWHERE最適化でMapサブカラムのオンディスクサイズも考慮するようにしました。これにより、#99200 で導入されたPREWHEREの性能回帰を修正しました。#110462 の一部です。#110623 (Pavel Kruglov). - テキストからの
UUID値のパースを高速化しました (例:JSONExtractからLowCardinality(UUID)、toUUID、CAST AS UUID) 。16 進数の検証と変換を 2 回ではなく 1 回の走査で行うようにしました。#110625 (Groene AI). - より高速なソートおよびハッシュテーブル実装を使用することで、
timeSeries*ToGrid集約関数の性能を大幅に向上させました。#110875 (Nikita Mikhaylov). SELECT * FROM t WHERE idのようなクエリで、idカラムに対する索引スキップが使われるようになりました。#89222 をクローズします。#89603 (Aditya Chopra).- JOIN 並べ替え最適化の際に、式ステップを
JOINステップにマージできるようにするquery_plan_merge_expression_into_join設定 (既定で有効) を追加しました。これにより、JOIN をラップするサブクエリ (たとえば、計算済みカラムを持つサブクエリ内にJOINがある場合) をまたいだ JOIN 並べ替えが可能になり、複雑な JOIN ツリーをより適切に最適化できます。#98533 (Vladimir Cherkasov). - 同じ式に対する複数の比較条件を含む
ANDチェーンを最適化しました。矛盾を検出し (例:a < 3 AND a > 5→false) 、冗長な条件を削除します (例:a = 3 AND a < 5→a = 3) 。#99736 (Xiaozhe Yu). UNIONクエリの複数の分岐から参照されるマテリアライズド CTE は、1 回だけマテリアライズされ、すべての分岐で共有されるようになりました。従来は各分岐ごとに CTE のコピーが作成され、それぞれがインライン展開されて個別に評価されていました。#102107 (Dmitry Novik).BackgroundSchedulePoolのスレッドは、サーバー起動時にまとめて作成されるのではなく、必要に応じて遅延作成されるようになりました。新しいサーバー設定background_schedule_pool_initial_size(既定値16) で事前生成するワーカー数を制御し、必要に応じてプールはbackground_schedule_pool_sizeまで拡張されます。これにより、低負荷のサーバーでアイドルスレッド数を削減できます。#85265 をクローズします。#105066 (Alexey Milovidov).JSON型の高度な共有データシリアライゼーションにおいて、不要なマークファイルの読み込みをスキップするようにしました。#107051 (Pavel Kruglov).- 関数
pointInPolygon用に前処理された定数 Polygon の cache は、クエリ間およびスレッド間で共有されるようになり、新しいサーバー設定point_in_polygon_cache_size(デフォルト 256 MiB、0で cache を無効化、実行時に変更可能) によって上限が設定されました。以前は、この cache は前処理済みの各 Polygon について最大max_threads個のコピーを保持し、異なる Polygon が増えるにつれて際限なく肥大化し、サーバーを再起動するまで解放されませんでした。この cache はSYSTEM DROP POINT IN POLYGON CACHEでクリアでき、現在の使用量はsystem.metricsにPointInPolygonCacheBytes、PointInPolygonCacheCells、PointInPolygonCacheSizeLimitとして報告されます。#106393 をクローズしました。#107247 (Nihal Z. Miaji). - Keeper は、スナップショットをディスクにシリアライズして書き込む間や、スナップショットをディスク間で移動する間、内部の snapshots lock を保持しなくなりました。これにより、他ノードへのスナップショット転送や Raft 処理が、ローカルでのスナップショット作成によって停止しなくなります。#107595 (Antonio Andelic).
- ファイルシステムキャッシュの background eviction (
keep_free_space_ratio設定で制御) を並列化しました。並列度を制御するための新しい設定keep_free_space_eviction_threadsを追加し、keep_free_space_remove_batchのデフォルト値を100から250に引き上げました。#108147 (Kseniia Sumarokova). - Azure Blob Storage の read-then-write copy (ネイティブ copy が利用できない場合にバックアップで使用) において、同時にステージングされるパーツ数を
max_inflight_parts_for_one_fileに制限し、多数の大きなファイルを並列にコピーする際の過剰なメモリ使用量を防止します。#108232 (Smita Kulkarni). - 3 種類すべてのテキスト索引 cache をグローバルに有効化しました。以前はクエリ内でのみ有効でした。また、posting lists cache size は現在ゼロになっており、実質的に再び無効化されています。これは、posting lists はサイズが大きく、cache するコストが高すぎるためです。#108274 (Robert Schulze).
- marks の loading 中に、ストリーミング方式の in-memory marks 圧縮を追加し、Peak memory usage を削減します。#108285 をクローズしました。#108325 (Pavel Kruglov).
- 新しいファイルシステムキャッシュ設定
reserve_granularity(デフォルト 4 MiB) は、より粗い granule 単位であらかじめ領域を予約することで、ファイルシステムキャッシュの領域予約ホットパスにおける lock contention を軽減します。#108369 (Kseniia Sumarokova). - ファイルシステムキャッシュのメタデータ (file segment ごとおよび key ごと) で使用するメモリ量を削減しました。#108477 (Kseniia Sumarokova).
databaseおよびtableカラムに対するWHEREfilters を含むsystem.iceberg_historyへのクエリは、一致する database のみを参照するようになりました。これにより、サーバー上に無関係なリモート database が多数ある場合に時間を節約できます。#108492 (Den Kalantaevskii).- ファイルシステムキャッシュ内の不要な locking を削除し、lock contention を軽減しました。#108932 (Kseniia Sumarokova).
BACKUPおよびRESTOREのメタデータ処理におけるメモリ使用量を削減しました。バックアップを開く際 (RESTORE用、またはインクリメンタルBACKUPのベースとして) 、.backupメタデータをメモリ上の XML ドキュメントツリー全体に読み込むのではなく、ストリームとして解析するようになりました。これにより、大規模なバックアップ (特にインクリメンタルバックアップ) で、複数 GB に及ぶ DOM ツリーの割り当てを回避できます。#109107 (Julia Kartseva)。また、BACKUPの完了処理では、すべてのファイルのファイル情報を一時ベクターにコピーしなくなったため、数百万ファイル規模のバックアップで一時的に数 GB を消費することがなくなりました。#109861 (Julia Kartseva)。さらに、バックアップエントリの書き込み時にも、現在のホストのファイル情報リストをコピーしなくなりました。#111162 (Julia Kartseva).- アグリゲーターのメモリ消費を削減しました。#109224 (Konstantin Vedernikov).
Fileテーブルエンジン経由で読み取るローカルParquetファイルで、クエリ条件キャッシュをサポートしました (従来は object storage とデータレイクのみ対応) 。#109247 (Alexey Milovidov).- テキスト索引ヘッダーキャッシュのメモリ使用量を 2~2.5 倍削減しました。より多くのデータパーツのヘッダーが cache (設定
text_index_header_cache_size) に収まるようになり、テキスト検索クエリでのディスク読み取りが減少します。#109332 (Anton Popov). - 転置ベクトル距離関数
L2DistanceTransposed、cosineDistanceTransposed、dotProductTransposedが、Nullable(QBit)カラムに対して部分的な bit plane 読み取り optimization を適用するようになり、カラム全体ではなく、必要な bit planes のみを読み取るようになりました。#109358 (Alexey Milovidov). IS NOT DISTINCT FROMおよびIS TRUEが、=と同様に primary-key と MinMax索引を使ってグラニュールを絞り込めるようになりました。従来はk IS NOT DISTINCT FROM 42と(k = 42) IS TRUEはすべてのグラニュールを scan していました。#110006 (Groene AI).- プールされた接続は、使用前に毎回 ping されなくなりました。これにより、再利用される接続ごとに追加されていた
Ping-Pongのラウンドトリップがなくなり、分散クエリおよびclickhouse-benchmarkのレイテンシーが低減します。古くなったプールされた接続は、タイムアウト 0 の poll (ラウンドトリップを追加しない non-blocking チェック) で検出し、再接続によって復旧します。#110068 (Alexey Milovidov). - TLS 上のプールされた HTTP keep-alive 接続 (HTTPS、S3) で発生していた不要な再接続を修正しました。古い接続のチェックではソケットに対して
pollを使用していましたが、未読の TLS post-handshake レコード (session ticket またはKeyUpdate) を保持している有効な TLS 接続を、誤って closed と判定していました。現在は、通常のソケットでは non-blocking のMSG_PEEK、TLS ソケットではSSL_peek/SSL_has_pendingを使用するようになり、正常な TLS shutdown と、一部しか到着していない TLS レコードも正しく検出できます。#110402 (Alexey Milovidov). - TopK dynamic filtering (
ORDER BY ... LIMIT k) で高速化されるクエリが、クエリ条件キャッシュをより有効に活用するようになりました。クエリに 遅延マテリアライゼーション が適用される場合でも cache が populate されるようになり、同じWHEREpredicate を持つ通常のクエリが以前に書き込んだ エントリ を再利用できるようになりました。#110507 (Shankar Iyer). - ワイルドカード (
%,_) を含まないLIKE/NOT LIKEパターンでは、より広い接頭辞範囲ではなく、正確な主キー範囲を使うようになりました。これにより、同等の=/!=述語と同じ数のグラニュールを読み取ります。 #107077 (Groene AI). - ファイルシステムキャッシュ経由でデータを読み取る際の、不要なファイルセグメントのロック競合 (26.1 で導入された性能低下) を修正しました。 #109577 (Kseniia Sumarokova).
Tupleサブカラムに定義されたスキップ索引が、tupleElement(t, 'name')、tupleElement(t, N)、またはt.Nでフィールドにアクセスし、同じクエリ内で完全な tuple も読み取る場合 (例:SELECT *) に使われない問題を修正しました。これらすべての形式で、名前付きサブカラムアクセスt.nameと同様にグラニュールを絞り込めるようになりました。 #110056 (Groene AI).prefer_localhost_replicaがローカルレプリカを選択した場合に、Distributedtables に対するORDER BY ... LIMITクエリが遅くなる問題を修正しました。ローカルシャードの実行プランから preliminary limit が削除され、これにより遅延マテリアライゼーションと動的 top-K フィルタリングが妨げられなくなりました。 #110136 (Michael Jarrett).- テキスト索引が、単なるカラムではなく式に対して定義されている場合に、
ILIKE演算子で使われない問題を修正しました (たとえばlower(...)プリプロセッサを伴うassumeNotNull(col)) 。このようなクエリは、索引を使わずにすべてのグラニュールを読み取っていました。これにより #110350 をクローズします。 #110595 (Elmi Ahmadov). - ファイルシステムキャッシュでのロック競合を低減しました。cache から読み取るクエリは、エントリの LRU priority を更新する際に、優先度キューのロックでブロックされなくなりました。 #109065 (Antonio Andelic).
- フィルタ専用の
postprocessor式 (たとえばif(..., '', token)) を使うテキスト索引クエリでは、空の token を行ごとにマテリアライズするのではなく、先に破棄するようになり、性能が向上しました。 #109049 (Elmi Ahmadov). - system log queue でのロック競合を低減し、高負荷なクラスターでのクエリの tail latency を改善しました。 #110539 (Sean Haynes).
- 非定数の needle を持つ substring search functions (
position,countSubstrings,multiSearch*,replaceAll,replaceOne、およびそれらの大文字小文字を区別しない版と UTF-8 版) について、単純な実装の代わりに行ごとのパスで SIMD 対応の string searcher を使うことで、最大 1.5 倍の性能向上を実現しました。 #110580 (Raúl Marín). - 遅延マテリアライゼーションが、
ORDER BYがなくても、FINAL、フィルタ、小さなLIMITを伴うReplacingMergeTreeクエリに適用されるようになりました。フィルタとFINALmerge に不要なカラムは、limit 適用後に残った行に対してのみ取得されるため、選択性の高いフィルタで wide カラムを選択するこの種のクエリが大幅に高速化されます。これはquery_plan_optimize_lazy_materializationとquery_plan_max_limit_for_lazy_materializationで制御されます。 #110722 (Nikolai Kochetov). - deduplication が有効で、1 回の flush が複数のパーティションに分割される場合の非同期 INSERT の性能を改善しました。ClickHouse は、各パーティションごとに deduplication hash を再計算するのではなく、一度計算したものをパーティション間で再利用するようになりました。 #111150 (Valery Petrov).
改善
- 設定
input_format_csv_missing_nullable_as_empty_stringを追加しました (デフォルトでは無効) 。有効にすると、CSV 入力のNullable(String)カラムで欠損値があった場合、input_format_csv_empty_as_defaultの設定にかかわらず、NULLではなく空のStringとして読み込まれます。#58225 (kevinyhzou). #107577 (Alexey Milovidov). - 関数
toDateOrNull、toDateTimeOrNull、toDateTime64OrNullが、すべてのネイティブ整数型の整数引数を受け付けるようになりました (toDate、toDateTime、toDateTime64と同様に解釈され、必要に応じてタイムゾーン引数も指定できます) 。結果型の範囲外の値に対してはNULLを返します。たとえば、toDateTimeOrNull(1583851242, 'Asia/Shanghai')は2020-03-10 22:40:42を返し、toDateTimeOrNull(4294967296)はNULLを返します。#79791 (Jitendra). system.grantsテーブルにis_wildcardカラムを追加しました。このカラムは、権限付与でワイルドカードのプレフィックス一致を使用しているかどうか (例:GRANT SELECT ON db*.*) を示します。これまでは、同じ名前に対するワイルドカード指定の権限付与と完全一致の権限付与をsystem.grants上で区別できませんでした。#92835 をクローズします。#98577 (DQ).- HTTP インターフェイスで Snappy 圧縮 (
Accept-Encoding: snappy) を利用できるようにし、汎用file/urlの snappy I/O で Hadoop Snappy ブロックフォーマットと Snappy framing フォーマットを選択するためのsnappy_mode設定を追加しました。#100752 (Alexey Milovidov). analyzer_compatibility_allow_non_aggregate_in_having設定のもとで、旧アナライザとの互換性をサポートしました。有効にすると、非集約の連言条件がHAVINGからWHEREに移されます。#104232 (Dmitry Novik).- 新しいサーバー設定
memory_worker_rss_speculative_reserve_ratio(デフォルト値は1.0) を追加しました。これにより、サンプル間で RSS の増加がトラッカーの記録を上回った場合、グローバル memory tracker は観測された RSS に加えて推測的にメモリを予約します。これにより、割り当てはより早い段階でMEMORY_LIMIT_EXCEEDEDとなり、kernel OOM-killer が先に発動する可能性を低くできます。推測を無効にするには、ratio を0に設定してください。#104976 (Alexey Milovidov). - ファイルシステムキャッシュのエビクション状況に関するオプトインの Prometheus メトリクス (
filesystem_cache_evictions_total、filesystem_cache_evicted_bytes_total、filesystem_cache_evicted_segment_hits、filesystem_cache_evicted_segment_size_bytes、およびuser_idラベル付きのユーザー単位バリアント) を追加しました。これらはsystem.dimensional_metrics、system.histogram_metrics、および Prometheus エンドポイントを通じて、各キャッシュごとに公開されます。制御にはキャッシュディスク設定expose_prometheus_eviction_metricsとexpose_prometheus_eviction_metrics_per_user(どちらもデフォルトではオフ) を使用し、SYSTEM RELOAD CONFIGによって実行時に切り替えられます。#105020 (Sacheendra Talluri). EXPLAIN [PLAN] actions=1, compact=1, pretty=1をデフォルトにしました。#105036 (Kirill Kopnev).delta-kernel-rs(DeltaLakeインテグレーションを支えるライブラリ) を v0.23.0 に更新しました。#105861 (Smita Kulkarni).clickhouse-disksにduおよびwcコマンドを追加しました。これらはそれぞれ、指定したファイルまたはディレクトリの合計サイズをバイト単位で表示し、ファイル内のバイト数、行数、単語数を表示します。#106268 (Asya Shneerson).- 新しい非同期メトリクス
UntrackedMemory(system.asynchronous_metricsで確認可能) を追加しました。これは、スレッドによってすでに割り当てられているものの、グローバルなメモリ追跡カウンターにはまだ計上されていないメモリ量を報告します。各スレッドは小さな割り当てをローカルに蓄積し、まとめて報告します。これにより、MemoryTrackingとプロセスの実際のメモリ使用量との食い違いを説明しやすくなります。MEMORY_LIMIT_EXCEEDEDエラーメッセージにも未追跡メモリ量が含まれるようになり、クエリまたはサーバーがメモリ制限に達した理由を把握しやすくなりました。#106386 (Miсhael Stetsyuk). - ClickStack (オブザーバビリティ UI) をバージョン 2.28.0 にアップグレードしました。#106406 (Aaron Knudtson).
dotProductでBFloat16をサポートし、SIMD パスをバッチ処理化することでパフォーマンスも改善しました。#106569 (Nikita Taranov).max_named_collection_num_to_throw、max_table_num_to_throw、max_replicated_table_num_to_throw、max_view_num_to_throw、max_dictionary_num_to_throw、max_database_num_to_throwの各設定を、サーバーの再起動なしで変更できるようにしました。#106821 (Maxim Orlovsky).s3_storage_class_name設定で、STANDARDおよびINTELLIGENT_TIERINGに加えて、REDUCED_REDUNDANCY、STANDARD_IA、ONEZONE_IA、GLACIER_IR、EXPRESS_ONEZONEもサポートしました。#107251 (Aditya Kumar).MaterializedPostgreSQLデータベースエンジンに、作成時設定materialized_postgresql_use_extended_date_and_time_typesを追加しました。デフォルトでは (有効時) 、PostgreSQL のdate/timestampカラムはDate32/DateTime64として推論されます。CREATE DATABASE時にこれを0に設定すると、より狭いDate/DateTime型として推論されます。この設定はMaterializedPostgreSQLテーブルエンジンには適用されません。#107428 (Alexey Milovidov).SOME/ALL配列数量子 (expr OP SOME(array)/expr OP ALL(array)) で、キーワード比較述語IS DISTINCT FROMおよびIS NOT DISTINCT FROM、さらに文字列検索述語LIKE、ILIKE、NOT LIKE、NOT ILIKE、REGEXPもサポートするようになりました。これらはarrayExists/arrayAllに書き換えられます。#107454 (Alexey Milovidov).- SQLite データベースを開くのに失敗した場合 (たとえば、
sqliteテーブル関数またはSQLiteデータベースエンジンに、開けないパスが指定された場合) に発生していたメモリリークを修正しました。#107807 (Alexey Milovidov). - Web UI (
play.html) で、実行ショートカットのヒントは常にCtrl/Cmd+Enterを表示するのではなく、Mac ではCmd+Enter、その他のプラットフォームではCtrl+Enterを表示するようになりました。また、ヒント内の, +Shift to run allは、複数のクエリがある場合にのみ表示されます。#107817 (Alexey Milovidov). #108957 (Alexey Milovidov). Aliastable engine で、ターゲットテーブルがMergeTreeファミリーの場合、並列レプリカでの読み取りがサポートされるようになりました。#107830 (Kai Zhu).uniqCombined64スケッチに基づく、uniq統計の軽量な代替であるuniq_v2カラム STATISTICS タイプを追加しました。#107863 (Han Fei). また、minmaxカラム STATISTICS タイプは非推奨となり、auto_statistics_typesのデフォルト値はbasic, uniq_v2に変更されました。#108680 (Han Fei).- AI 関数 (
aiGenerate,aiEmbed,aiClassify,aiExtract,aiTranslate) は、ai_function_max_retriesが設定されている場合、一時的なネットワーク障害 (接続リセット、TLS 接続失敗、タイムアウト、到達不能なアドレス) で再試行するようになり、urltable function の再試行動作と一致するようになりました。以前は、provider 側の HTTP エラーレスポンスのみが再試行対象でした。#107927 (Alexey Milovidov). MergeTreetable へのINSERTは、多数の part を書き込んでいる間も、強制終了後に長時間動作し続ける可能性があるのではなく、クエリのキャンセルとmax_execution_timeを反映するようになりました。#107929 (Michael Kolupaev).- Web UI (
play.html) で、ウェブターミナルのアイコンを中ボタンクリックまたは Ctrl/Cmd/Shift+クリックで新しいブラウザータブに開けるようになりました。#108006 (Alexey Milovidov). - クライアントの AI SQL generation では、configuration で
ai.temperatureによって明示的に設定されていない限り、temperatureparameter を送信しなくなりました。これにより、temperatureparameter を受け付けないモデルでも AI SQL generation が正しく動作するようになります。#108014 (Alexey Milovidov). - オープンソースビルドに
system.masking_policiestable とSHOW MASKING POLICIESによる introspection を追加しました。マスキングポリシー自体は引き続き ClickHouse Cloud の機能であるため、オープンソースビルドでは table は空のままですが、introspection クエリが error で失敗することはなくなりました。#108030 (Alexey Milovidov). - Keeper ベースの Kafka consumer は、replicas 間で一時的なパーティション lock を取得する順序をランダム化するようになり、パーティション分散の公平性が向上し、lock contention が軽減されます。以前は、意図したシャッフルが効果を発揮していませんでした。#108033 (Alexey Milovidov).
system.completionsと WASM ベースの SQL lexer に基づくオートコンプリートを Web UI (play.html) に追加しました。#108059 (Alexey Milovidov).clickhouse-clientとclickhouse-localで、カーソルが入力末尾にあるときに、最もよく一致する候補の入力中オートコンプリートヒント (インラインの “ghost” テキスト) が表示されるようになりました。関連性の高い候補 (最近使用したものや、クエリ内にすでに含まれている識別子) が優先的に上位表示されます。Up/Down (または Ctrl-Up/Ctrl-Down) で移動し、単一のヒントまたは選択中のヒントを Tab または Right で確定できます。選択中のヒントは Enter でも確定できます。Tab では従来の補完リストも開きます。新しい--hintsオプションで制御されます (デフォルトで有効、--highlightが必要です) 。#108070 (Alexey Milovidov).QBitデータ型でlength関数をサポートしました。ベクトルの次元を定数として返します。#108071 (Alexey Milovidov). また、QBitからArrayへのCASTもサポートし、元のベクトルを復元できるようになりました。これは既存のArrayからQBitへの変換の逆です。#108072 (Alexey Milovidov).- REST データレイクカタログ (OneLake など) へのリクエストに、ClickHouse の
User-Agentヘッダーが含まれるようになりました。#108117 (Konstantin Vedernikov). arrayFoldがクエリのキャンセルとmax_execution_timeを考慮するようになりました。従来は、非常に長い配列に対する fold は 1 回の関数呼び出し内で最後まで実行され、中断できなかったため、KILL QUERYや時間制限は fold の完了まで無視されていました。#108192 (Groene AI).MVTEncodeGeomは、clip の前に geometry を整数ピクセルグリッドにスナップし、wagyuライブラリで polygons を clip するようになりました。これにより、clip 後の出力は有効になり (自己交差する ring は修復されます) 、境界に揃えられ、PostGISST_AsMVTGeomと一致します。#108248 (Saarthak Gupta).- フェーズごとのクエリ実行前
ProfileEventsとして、QueryParseMicroseconds、QueryAnalysisMicroseconds、QueryPlanBuildMicroseconds、QueryPipelineBuildMicrosecondsを追加しました。これにより、クエリ実行前のどこで時間が使われているか (パース、解析、クエリプランの構築、パイプラインの構築) が分かるようになり、system.query_logとsystem.eventsで利用できます。#108282 (Jordi Villar). ALTER TABLEによりmax_query_sizeを超えるテーブルメタデータが生成される場合、その操作は事前に拒否されるようになりました。これにより、DDL distribution やレプリカ復旧などのコンポーネントによってテーブルが読み込めなくなる事態を防げます。#108283 (Andrew Kravchuk).system.backupsとsystem.backup_logにsettingsおよびengine_settingsカラムを追加しました。settingsには、その操作で要求されたバックアップ/restore 固有の設定 (例:allow_s3_native_copy、deduplicate_files、structure_only) が格納されます。engine_settingsには、バックアップ engine の reader と writer が実際に使用した設定 (例: エンドポイント設定のマージ後に要求内容と異なる可能性があるallow_native_copyなどの S3 リクエスト設定) が格納されます。これにより、BACKUP/RESTORE操作が実際にどの設定で実行されたかを確認できます。#108334 (Julia Kartseva).system.documentationにsourceカラムを追加し、各エンティティのドキュメントが定義されているソースファイルのパスを格納できるようになりました。このテーブルでは、圧縮 codec、profile events、current メトリクス、asynchronous メトリクス、さらにシステムテーブル自体 (そのカラムを含む) もドキュメント化されるようになり、settings のドキュメントには type とデフォルト値も含まれるようになりました。#108346 (Alexey Milovidov)。また、setting のデフォルト値が空の場合は、空のバッククォートではなく empty string として表示されるようになりました。#108708 (Alexey Milovidov)。kqueue上に epoll ベースの polling primitives を実装することで、macOS でリモートレプリカからの asynchronous な reads (async_socket_for_remote) をサポートしました。これにより macOS では、distributed queries が shard を直列ではなく並列に読み取れるようになります。#108403 (Raúl Marín)。- バイナリ math functions で
BFloat16をサポートしました。#108442 (Zhang Yifan)。 MergeTreeが、ブロックごとに異なる codec を使う compressed stream を読み取れるようになりました。これは adaptive codec selection のための read 側の prerequisite です (#105404) 。#108592 (Raufs Dunamalijevs)。max_threadsなどの settings の自動値は、system.settingsで'auto(8)'ではなくauto(8)と表示されるようになりました。これまで値を囲んでいたシングルクォートは、長年値の一部として組み込まれていた artifact でした。バージョン間の互換性は維持されており、古いサーバーから受信した settings の解析時には、従来のクォート付き形式も引き続き受け付けます。#108657 (Alexey Milovidov)。/schemaWeb UI の使い勝手を複数改善しました。Enter でのスキーマ読み込み、テーマ対応スクロールバー、読みやすい table 名、独立した table の database ごとの一貫したグループ化、ドラッグ中のテキスト選択の無効化、さらにplayスタイルの authentication form (Credential Management API、URL で渡された credentials からのパスワード除去、認証情報のライブ検証) を追加しています。#108724 (Alexey Milovidov)。- テキスト索引の lazy posting-list apply mode は experimental ではなくなり、
allow_experimental_text_index_lazy_applyなしでtext_index_posting_list_apply_mode = 'lazy'を指定して選択できるようになりました。また、density-threshold setting はtext_index_density_thresholdからtext_index_lazy_intersection_density_thresholdに名前変更されました。#108814 (Anton Popov)。 - Databricks Delta Sharing の Iceberg REST endpoint 向けに、
DataLakeCatalogに新しいdelta_sharingカタログ type を追加しました。この endpoint ではネームスペースがフラットで、parentlisting filter は無視されます。そのような endpoints ではcatalog_type = 'rest'の代わりにこれを使用してください。そうしないとSHOW TABLESがハングする可能性があります。#108865 (Seva Potapov)。 clickhouse-client/clickhouse-localに新しいオプション--echo-query-separatorを追加しました。これにより、整形して echo されたクエリの前にカスタム区切り文字を表示できるようになり、入力したクエリと再整形後の echo を見分けやすくなります。デフォルトでは無効です。#108888 (David Meng)。- Web UI のデータベースパネルを改善しました。データベース名を展開すると、その横にテーブル数が括弧付きで表示されます。#108891 (Alexey Milovidov)。展開したデータベースの横にある更新ボタンで、テーブル一覧を再読み込みできます。#108958 (Alexey Milovidov)。パネルを再度開くと、前回展開していたデータベースが復元されます。#108964 (Alexey Milovidov)。
EXPLAIN WHATIFで skip-index の複合的な効果を計算できるようにしました。既存の適切な仮想インデックスすべての積集合に対するデータ比率を表示します。#108934 (Yarik Briukhovetskyi)。- Web UI でセル内のリンクをクリックしてページに戻ると、結果テーブルの横スクロール位置がリセットされる問題を修正しました。#108941 (Alexey Milovidov)。
MySQLのデータベースエンジン、テーブルエンジン、テーブル関数で、MySQL の空間カラム型 (LINESTRING、POLYGON、MULTILINESTRING、MULTIPOLYGON、および汎用のGEOMETRY) を、Stringではなく対応する ClickHouse の幾何型にマッピングするようになりました。これはmysql_datatypes_support_level設定の新しいgeometryフラグで制御され、デフォルトで有効です。POINTは引き続き常にPointに変換されます。汎用のGEOMETRYカラムは包括的なGeometry型にマッピングされます。ClickHouse に対応する型がないサブタイプ (MULTIPOINT、GEOMETRYCOLLECTION) の値を読み取ると、読み取り時に例外が発生します。#108944 (Alexey Milovidov)。- Web UI (
play.html): キーボード操作に完全対応しました。データベースパネルと結果テーブルでの矢印キーによる移動、ツールバーボタン、テーマ切り替え、ダウンロードメニューへのキーボードアクセス、および視認可能なフォーカス枠線に対応しています。#108972 (Alexey Milovidov)。 - HTTP インターフェイス: URL パラメータ (
user/password) とAuthorizationヘッダーの両方で認証情報が指定された場合、リクエストを拒否するのではなく、URL パラメータが優先されるようになりました。これにより、ブラウザーが Basic 認証情報を記憶している場合に Web UI (play.html) から結果をダウンロードするとAUTHENTICATION_FAILED(エラー 516) で失敗する問題を修正しました。#108980 (Alexey Milovidov)。 show_data_lake_catalogs_in_system_tablesを、system.tables、system.columns、system.completionsにおけるDataLakeCatalogの表示のみを制御する設定として復元しました。さらに、デフォルトで有効なshow_remote_databases_in_system_tablesを追加し、これらのシステムテーブルでMySQLおよびPostgreSQLデータベースを個別に非表示にできるようにしました。#109082 (Pablo Marcos)。- 正確な (表現可能な値のうち最も近い) 浮動小数点パースアルゴリズムをデフォルトで使用し、
precise_float_parsing設定をtoFloat*/CASTだけでなく、入力フォーマット (CSV、TSV、JSON、VALUES、…) と数値リテラルにも適用するようにしました。以前の、場合によってはより高速だが精度の低い動作に戻すには、precise_float_parsing = 0を設定してください。Closes #60146。Closes #74647。Closes #68914。#109086 (Raúl Marín)。 - 単一の CTE を含むクエリも、複数の CTE を含むクエリと同じ改行・インデントで整形されるようになりました。従来は
WITH a AS (...)では CTE がWITHと同じ行に配置されていましたが、CTE が 2 つ以上ある場合はWITHが単独の行になり、各 CTE がインデントされていました。 #109092 (Groene AI). - Web UI: ハイライトされている補完候補が、すでに入力済みの単語と同じ場合、または大文字・小文字だけが異なる同じ単語である場合 (たとえば、入力済みの
hashに対してHASHが提示される場合) 、Right/Tab/Enter を押しても単語が書き換えられたり、自動補完に吸収されたりしなくなりました。キーは期待どおり、キャレットの移動または改行の挿入を行います。 #109106 (Alexey Milovidov). #109384 (Alexey Milovidov). - Web UI (
play.html) に、clickhouse-clientと同様のレインボー括弧、対応括弧、対応する Identifier、桁区切りのハイライトを追加しました。 #109108 (Alexey Milovidov). - Web UI で、
TabとShift+Tabにより、選択した行を 4 文字分インデント/逆インデントできるようになりました。 #109110 (Alexey Milovidov). - Web UI: クエリエディタで構文エラーの位置を赤い背景でハイライトするようにしました。ユーザーがエディタに再びフォーカスを戻すと、このハイライトはすぐにクリアされます。 #109112 (Alexey Milovidov).
clickhouse-compressor --statと古いパーツのデフォルト codec 検出で、破損した block ヘッダーが、誤解を招く EOF エラーではなく、破損として報告されるようになりました。 #109157 (Raufs Dunamalijevs).- ClickHouse Keeper が
os_collect_psi_metrics設定を尊重し、無効時には PSI メトリクスの収集をスキップするようになりました。 #109179 (Maxim Orlovsky). - Web UI でクエリ tabs が表示されている場合、接続 parameter (host、user、password) は右上の鍵ボタンの下に隠され、必要に応じてドロップダウンで表示されるようになりました。 #109243 (Alexey Milovidov).
- Web UI: 単一値の結果 (1 行 1 カラム。たとえば
SHOW CREATE TABLE) が 3 行に制限されず、全高で表示されるようになりました。 #109245 (Alexey Milovidov). - Web UI で、databases パネル内の table を中クリックする、Shift を押しながらクリックする、またはプラットフォームの新規 tab 修飾キー (macOS では Cmd、それ以外では Ctrl) を使ってクリックすると、そのクエリが新しい Web UI tab で開くようになりました。 #109246 (Alexey Milovidov).
- リモート (object storage) の
Parquetファイルに対する query condition cache のキーとして、path に加えて ETag も使うようにしました。これにより、その場でオブジェクトを上書きした場合でも、古い cache 済み結果が返されなくなります。 #109310 (Alexey Milovidov). - Web UI で、空文字列と NULL は categorical 色分けモードでは色付けされなくなりました。 #109342 (Alexey Milovidov).
- Web UI: データベースパネルでテーブルのアイコンをクリックすると、そのテーブルのカラム一覧が表示されるようになりました。型アイコン、圧縮サイズに比例したサイズバー、さらに圧縮サイズ/非圧縮サイズと圧縮率を表示するツールチップが含まれます。#109346 (Alexey Milovidov).
- Web UI: タブのタイトルが切り詰められている場合、ホバー時に完全なタイトルをツールチップで表示するようになりました。#109354 (Alexey Milovidov).
- Web UI で、タブのタイトルを中クリックするか (または Ctrl/Shift/Cmd+クリックするか) すると、そのタブを複製できるようになりました。#109357 (Alexey Milovidov).
- Web UI: ブラウザウィンドウが狭いときに不自然に折り返されないよう、最終的な Progress とクエリ統計の領域を均等にリサイズするようにしました。#109363 (Alexey Milovidov).
- Web UI: データベースパネルでデータベースを選択すると、エディタから実行するクエリのデフォルトデータベースとして使用されるようになりました。#109372 (Alexey Milovidov).
- 固定サイズ要素の
ArrayをStringとしてreinterpretできるようになりました。これは既存の、String/FixedStringをArrayとしてreinterpretする機能の逆方向です。#109383 (Alexey Milovidov). - Web UI で、結果が 1 行以下の場合は、カラムごとの色分けトグルを表示しないようにしました。#109385 (Alexey Milovidov).
- 次元が同じである限り、要素型および/または stride が異なる
QBit型の間でCASTを許可しました (たとえばQBit(Float32, N)からCAST(x AS QBit(Float64, N))) 。stride のみの変更は損失がなく、要素型の変更は対応するArrayの変換セマンティクスに従います (たとえばFloat32からBFloat16では精度が失われる可能性があり、accurateCast/accurateCastOrNullは正確に表現できない行を拒否します) 。#109387 (Alexey Milovidov). - 関数
quantizeBFloat16ToInt8とdequantizeInt8ToBFloat16が、既存の scalar オーバーロードに加えて、ArrayおよびQBitの argument も受け付けるようになりました。Lloyd-Max codec をベクトル全体に適用し、対応する要素型のArray/QBitを返します。#109398 (Alexey Milovidov). - Web UI: Documentation リンクの URL に current user 名を含めるようになりました。#109419 (Alexey Milovidov).
BFloat16の配列に対してarraySum、arrayAvg、arrayProductをサポートしました。#109420 (Alexey Milovidov).parseDateTime/parseDateTime64(およびそれらのOrZero/OrNullバリアント) における MySQL 形式のフォーマット指定子%fが、これまでのように厳密に 6 桁を要求するのではなく、MySQL のSTR_TO_DATEと同様に左寄せのマイクロ秒として解釈される 1〜6 桁の小数点以下の桁数を受け付けるようになりました。あわせて、組み込み関数ドキュメントの例におけるPrettyCompactテーブルの位置ずれも修正しました。#109421 (Alexey Milovidov).- Web UI: クエリタブが永続化されるようになりました — タブを切り替えて戻ってきても、各タブはレンダリング済みの結果 (画像やチャートを含む) と実行中のクエリを保持し、長時間かかるクエリもバックグラウンドで実行され続けます。タブタイトルには、そのクエリのスピナー、プログレスバー、完了チェックマークが表示されます。 #109425 (Alexey Milovidov).
- Web UI: クエリ結果の一部がすでにストリーミングされたあとでクエリが失敗した場合、クライアント側の
SyntaxError: Unexpected end of JSON inputを表示したり (またはhttp_write_exception_in_output_formatにより失敗したクエリを成功扱いしたり) するのではなく、正しくエラーを表示するようになりました。 #109430 (Alexey Milovidov). - Web UI にピン留めされたカラムを追加しました: カラムはヘッダーからピン留めでき、結果テーブルを横方向にスクロールしている間も表示されたまま (端に固定された状態) になります。 #109439 (Alexey Milovidov).
- 高度なダッシュボード (
/dashboard) では、特定のメトリクスのチャートを、ソースコードやドキュメントに記載されているメトリクス名を使って直接追加できるようになり、デバッグセッション中に複数のメトリクスを追加しやすくなりました。 #109449 (Mikhail Artemenko). - Web UI: 接続設定のドロップダウンで、マウスでテキストを選択して境界の外までドラッグすると閉じてしまう問題を修正しました。 #109451 (Alexey Milovidov).
- Web UI: 結果テーブルのカラムヘッダーにマウスオーバーすると、完全なカラム名と型がツールチップに表示されるようになり、省略されたヘッダーも全文を確認できるようになりました。 #109463 (Alexey Milovidov). また、カラムが完全なタイトルを表示するのに十分な幅がある場合でも、カラムヘッダーのタイトルが省略記号で切り詰められてしまう問題を修正しました。 #110397 (Alexey Milovidov).
- macOS ビルドで SSD cache 辞書 (
SSD_CACHEレイアウト) とFileLogテーブルエンジンをサポートしました。 #109493 (Raúl Marín). - Web UI: ページを開いたときに、空のクエリを含むタブを復元しないようにしました。 #109529 (Alexey Milovidov).
TERMに256が含まれていない端末 (例: Ghostty、kitty、Alacritty、foot) で、対話型クライアントの入力中オートコンプリートヒントが読みにくくなり、明るい色も見づらくなる問題を修正しました: 明るい色は、bold + 暗い色にフォールバックするのではなく、常に aixterm の明るい色コードとして出力されるようになりました。これは、モダンな端末では dark background 上で暗く読みにくい色としてレンダリングされるためです。 #109622 (Alasdair Brown).- macOS ビルドで jemalloc の per-CPU arenas と割り当てプロファイリングを有効にしました。 #109684 (Raúl Marín).
OneLakeデータレイクカタログデータベースの一部の認証設定を、ALTER DATABASE ... MODIFY SETTINGで変更できるようにしました。 #110019 (alesapin).Hiveengine は、Apache ArrowORCアダプターの代わりに、ClickHouse ネイティブのORCリーダーでORCファイルのメタデータ (min/max 索引、行数) を読み取るようになりました。 #110086 (Alexey Milovidov).- 比較演算および算術演算において、あまり使われない混在型の組み合わせ (
Decimalとビット幅の異なる整数の組み合わせ、およびInt128/UInt128/Int256/UInt256を含む組み合わせ) について、型の組み合わせごとに専用のコンパイル済みカーネルを用意する代わりに、共通型に変換して処理するようにし、バイナリサイズを約 10.5 MB 削減しました。同一型の組み合わせ、よく使われる組み合わせ、およびメモリ帯域律速のplus/minus/multiplyは、引き続き専用カーネルを使用します。結果、結果型、例外ケースに変更はありません。#110131 (Alexey Milovidov). INの右辺にあるサブクエリで、その単一カラムが左側の引数より 1 次元深い配列である場合、分かりにくい型不一致エラーで失敗するのではなく、その配列の要素の集合 (配列リテラルや配列を返す関数と同様) として解釈されるようになりました。たとえば、x IN (SELECT groupArray(x) FROM ...)が動作するようになりました。#110169 (Alexey Milovidov).SQLiteテーブルエンジンまたはsqliteテーブル関数からの読み取りで、別の接続によって SQLite データベースがロックされている場合に、CPU core を 1 つフルに消費してビジースピンすることがなくなりました。読み取りはロック待ちの間はアイドル状態となり、引き続きキャンセル可能です。#110248 (Groene AI).- ログおよび例外メッセージ内の経過時間、レート、比率の値を 3 桁に丸めるようにし、
1.345844286 sec.のような数値が完全な精度で出力されなくなりました。#110277 (Alexey Milovidov). - Web UI (Play) で、
BFloat16が浮動小数点数として認識されるようになり、そのカラムはそれに応じて右揃えで表示され、色分けされます。#110433 (Alexey Milovidov). PostgreSQLテーブルエンジンおよびpostgresqlテーブル関数でSETTINGSclause (たとえばSETTINGS postgresql_connection_pool_size = 50) をサポートし、MySQLengine と同等の機能を提供するようになりました。#110614 (Alexey Milovidov).SHOW CREATE TABLE(およびSHOW CREATE VIEW/SHOW CREATE DICTIONARY) で、要求されたテーブルが存在しない場合に、SELECTクエリと同様に、エラーメッセージ内で名前の似たテーブルを提案するようになりました。#110633 (Alexey Milovidov).merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_once設定をデフォルトで有効化しました。マージセレクタは、パーティションがどの程度埋まっているかに基づいて、一度にマージするパーツの最大数を自動的に引き下げるようになりました。#91163 を参照してください。#110726 (Mikhail Artemenko).- PostgreSQL ワイヤプロトコルで、PostgreSQL のクリーンアップコマンド
RESET、UNLISTEN、DISCARDを、構文エラーにする代わりに no-op として受け付けるようになりました。これにより、接続のセットアップおよびクリーンアップ時にRESET ALLやUNLISTEN *を送信する Skunk のようなドライバーとの互換性が向上します。#110780 (Alexey Milovidov). auto_statistics_types設定のデフォルト値をbasic, uniqからbasic, uniq_v2に変更しました。#110878 (Han Fei).randomHadamardTransformは、最大の奇数因子が 64 以下である任意のベクトル長に対して、長さを保った厳密な transform を計算できるようになりました (例:3584 = 512 * 7。埋め込みモデルで一般的です) 。これにより、従来の2^N、2^k * {12, 20}、2^k * 9の各ファミリーが拡張されます。厳密に表現できない長さに対する完全な transform は、より長いベクトルに暗黙的にゼロ埋めされるのではなく、例外を送出するようになりました。任意の長さの truncated projection を計算するには、output_dimsを指定してください。#111006 (Alexey Milovidov).- 同時に dropping と再作成が行われている
Replicateddatabase の backup 中に発生していたLOGICAL_ERROR例外を修正しました。こうした backups は、今後はCANNOT_GET_REPLICATED_DATABASE_SNAPSHOTを返して適切に失敗するようになります。#100651 (Alexey Milovidov). - zip アーカイブを展開できない場合に、実際の根本原因となる error が表示されるようになりました (たとえば、アーカイブを S3 から読み込んでいて、読み取りバッファが seek を拒否した場合) 。従来は、実際の error は汎用的な
Couldn't unpack zip archive: Code = -100/Couldn't open zip archiveというメッセージの背後に隠れていました。#105103 (Groene AI). - server の再起動後 (または
DETACH DATABASE/ATTACH DATABASEの後) に表示される紛らわしい “Maybe you meant X?” ヒントを修正しました。すでに drop 済みの table を dropping すると、代替候補として直前に drop された名前が提案されることがありました。#106238 (Groene AI). - バックグラウンドの table-drop queue で発生していた論理エラー (
Logical error: 'removed'。debug builds では server が abort していました) を修正しました。この問題は、同じ明示的な UUID を複数のCREATE OR REPLACE TABLEクエリで再利用し、その UUID を共有する drop 済み table が複数 queue に入れられたときに triggered されていました。#107031 (Groene AI). - エイリアス付きラムダがアクセス演算子 (タプル要素
.Nまたは配列要素[]) のオペランドとして式リストの先頭以外の位置で使われた場合に、debug builds および sanitizer builds で server を abort させることがあったInconsistent AST formatting論理エラーを修正しました。例:SELECT 1, ((p0, p1) -> p0 AS a7).4[3] FROM t。#107092 (Groene AI). - 別の distributed query の内側にネストされた cluster table function (
urlCluster、fileCluster、s3Clusterなど) (例:clusterAllReplicas(..., urlCluster(...))) は、論理エラー (Distributed task iterator is not initialized) で失敗するのではなく、BAD_ARGUMENTSerror として拒否されるようになりました。#107107 (Groene AI). - クエリ timeout (
timeout_overflow_mode = 'break'を伴うmax_execution_time) によって中断されたOPTIMIZE ... DRY RUNは、rows_sourcesに関する論理エラーではなく、TIMEOUT_EXCEEDEDを返すようになりました (従来は debug/sanitizer builds で server が abort していました) 。#107114 (Groene AI). - macOS で
ZooKeeperセッションの終了処理中に、無害なNet Exception: Socket is not connectederror をロギングしないようにしました。clickhouse keeper-clientも、終了時にこの不要な error を stderr に出力しなくなりました。#107438 (Groene AI). - リフレッシャブルmaterialized view が、
refresh_retriesに非常に大きな値 (Int64の最大値近く) が設定されている状態で失敗した refresh を再試行した際に発生していた、符号付き整数 overflow を修正しました。この overflow は、undefined behavior sanitizer を有効にした builds で server を abort させる可能性がありました。#108005 (Groene AI). JOINで null-safe 比較演算子 (<=>/IS NOT DISTINCT FROM) を使用し、キーの 1 つが scalar subquery (例:... JOIN t2 ON (SELECT x FROM t1) <=> t2.k) である場合に、古いアナライザ (enable_analyzer = 0) で発生していたLOGICAL_ERROR(debug/sanitizer build での server abort) を修正しました。このようなクエリは、論理エラーではなく通常のNOT_FOUND_COLUMN_IN_BLOCKエラーを返すようになりました。#108123 (Groene AI)._distanceカラムを選択する vector search クエリで、論理エラーで失敗するのではなく、適切なエラーが返されるようになりました。#108423 (Robert Schulze).- 最終的な非同期 S3/Azure マルチパートアップロード完了タスクのスケジューリングが失敗したとき (たとえばスレッドプール枯渇時) に発生し、debug および sanitizer build で server を abort させる可能性があった
std::future_error(The associated promise has been destructed prior to the associated state becoming ready) を修正しました。代わりに、実際の scheduling エラーが報告されるようになりました。#108730 (Groene AI). - 非常に大きな regular expression (たとえば数十万個の wildcards を含む
LIKEやmatchの pattern) を compile した際に、server log の出力やエラーメッセージが過大になる問題を回避するようにしました。このような pattern は、明確なCANNOT_COMPILE_REGEXPエラーで失敗するようになりました。#108821 (Raúl Marín). - 範囲外のプロトコル パケットタイプ を文字列化する際の未定義動作を修正しました (たとえば、desync または fuzz 済み connection での
Unexpected packet from server/Received ... packetエラーメッセージ内) 。#108885 (Groene AI). - table expression が
INoperator の左側の argument として使用されたときに発生していた、わかりにくい内部エラー (Method getResultType is not supported for TABLE query tree node) を修正しました。このようなクエリでは、明確なエラーメッセージが表示されるようになりました。#109412 (Alexey Milovidov). - version 番号が数字だけで構成されているものの、32-bit 整数の範囲を超える metadata file (たとえば
v99999999999999999999.metadata.json) を持つ Iceberg table の読み取りを修正しました。以前は、このような名前に対して、明確なBAD_ARGUMENTSエラーではなく、不明瞭なstd::out_of_range(STD_EXCEPTION) が発生していました。#109619 (Groene AI). - 行ベースの input format (たとえば
TSV/CSV) で入力の parse に失敗し、かつ基盤となる読み取りがすでにキャンセルされていた場合 (たとえば不正な HTTP chunk や切り詰められた body) に、Logical error: 'ReadBuffer is canceled. Can't read from it.'が発生する可能性があった問題を修正しました。verbose な parse 診断の構築時に、キャンセル済みの buffer から読み取らないようになりました。#109708 (Groene AI). arrayJoin(またはそのunnestalias) を使う ROW POLICY フィルタ式 は、明確なエラーで拒否されるようになりました。以前は、このような policies により query time にcolumn->size() == num_rowsの論理エラーが発生していました。#109753 (Raúl Marín). #109973 (Raúl Marín).- schema に unsupported な Nested 型 (たとえば
ROWfield) を含む Paimon table の読み取りで、メッセージなし・エラーコード 0 の素のDB::Exception. (OK)ではなく、unsupported な型名を示す明確なBAD_ARGUMENTSエラーが報告されるようになりました。#109762 (Groene AI). - 実験的設定
make_distributed_plan = 1を使用するクエリで、distributed_plan_default_reader_bucket_countまたはdistributed_plan_default_shuffle_join_bucket_countに非常に大きな値を指定した場合に発生していたLOGICAL_ERROR(std::length_error) を修正しました。現在、このような値はINVALID_SETTING_VALUEで拒否されます。#109770 (Groene AI). - 再帰 CTE が外側のスコープの識別子を相関カラムとして解決した場合 (
allow_experimental_correlated_subqueries = 1) に発生していたLOGICAL_ERROR(query tree node does not have valid source node) を修正しました。現在、このようなクエリは明確なUNSUPPORTED_METHODエラーを返します。#109863 (Groene AI). ORDER BY ... WITH FILLがInt64/UInt64カラムで非常に大きなギャップを飛ばす場合 (たとえば 2^63 近傍のギャップをステップ 2 でまたぐ場合) に発生していた符号付き整数オーバーフローを修正しました。このオーバーフローはサニタイザ環境では未定義動作となり、リリースビルドでは暗黙にラップアラウンドしていました。#109937 (Groene AI).Distributedテーブルに対して、低いoptimize_const_name_sizeでSELECT ... ORDER BY ... WITH FILLを実行した際に発生していたBad cast from type DB::FunctionNode to DB::ConstantNode論理エラー (debug/sanitizer ビルドでサーバーが異常終了) を修正しました。#109938 (Groene AI).- 古いアナライザ (
enable_analyzer = 0) で、INTERPOLATEの対象がWITH FILLカラムのエイリアスである場合に発生していたInvalid number of rows in Chunk論理エラーを修正しました。現在、このようなクエリは明確なINVALID_WITH_FILL_EXPRESSIONエラーで拒否されます。#110103 (Groene AI). indexHint/ignore/isZeroOrNull関数に、型がNothingに解決される引数を渡した場合 (たとえばindexHint(assumeNotNull(materialize(NULL)))のような式内) に発生していた論理エラー (debug/sanitizer ビルドでサーバーが異常終了) を修正しました。#110192 (Groene AI).max_read_buffer_sizeやmax_read_buffer_size_local_fsなどの読み取りバッファサイズ設定に範囲外の値を設定した際に発生しうるToo large size (...) passed to allocator論理エラーを修正しました。現在、このような値は設定の妥当性チェックによって 256 MiB に制限されます。さらに、妥当性チェックが適用されないclickhouse-client内でファイルを読むINSERT ... FROM INFILEについては、その使用箇所でも追加で制限されます。#110207 (Alexey Milovidov).CHECK TABLEは、メタデータの読み込みに失敗したプロジェクションパートに対して、誤解を招くColumns doesn't match ... Expected: 0 columnsエラーではなく、実際の破損内容を報告するようになりました。#110262 (Raúl Marín).- PostgreSQL ソース (たとえば
postgresqlテーブル関数やPostgreSQLテーブルエンジン) から読み取った値を宣言されたカラム型にパースできない場合の型不一致 (たとえばtextカラムをInt32として宣言した場合) が、現在は適切なクエリエラーとして報告されるようになりました。以前は debug ビルドおよび sanitizer ビルドでサーバーが異常終了していました。#110264 (Groene AI). - macOS でクエリプロファイラ、メモリプロファイラ、トレースプロファイラ、および
system.trace_logのシンボル化をサポートしました。#109825 (Raúl Marín). chdigを v26.7.1 に更新: 共有向けの圧縮スタックトレース、クエリパターン、個別アリーナメモリのサポート、Perfetto の改善、互換性修正。 #110938 (Azat Khuzhin).- 符号なしキーを符号付き定数で除算する場合の
intDivにおける単調性の推論誤りを修正しました。この不具合により、結果型の符号境界をまたぐIN/NOT IN述語で、プライマリキー索引のプルーニングが無効になる可能性がありました。また、デバッグビルドではLOGICAL_ERRORInvalid binary search result in MergeTreeSetIndexも発生していました。 #107586 (Groene AI). allow_lossy_numeric_supertype設定を追加しました (デフォルトでは無効) 。有効にすると、損失なく共有できる共通型を持たない数値 argument (たとえばDecimalとFloat64、またはInt64とFloat64) に対するif、multiIf、coalesce、ifNull、array、mapは、VariantではなくFloat64に解決されるようになります。これにより、その結果をsum、avg、min、maxなどの aggregate functions で使用できます。関連する aggregate-function の error メッセージには、この設定名が表示されるようになりました。 #106707 をクローズ。 #107236 (Groene AI).- Prometheus エンドポイント (メトリクス専用構成向け) と非同期メトリクス収集を、テーブルのロード前に開始するようにしました。これにより、長時間かかる可能性のあるメタデータのロード中でもメトリクスを確認できます。 #108402 (Christoph Wurm).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 多数の deduplication ブロックを持つテーブルで
TRUNCATE TABLEとDROP PARTITIONが失敗する問題を修正しました。これらを 1 回の ZooKeeper リクエストで削除すると、デフォルトの 1 MB のjute.maxbuffer制限を超える可能性がありました。#105991 (Clayton McClure)。この問題の影響を受けるのは、ClickHouse Keeper ではなく Apache ZooKeeper (非推奨) を使用している場合のみです。 MergeTreeファミリーのテーブルに対する mutation のWHERE句で、DELETE FROMやALTER TABLE ... UPDATE/DELETEなどにおいて修飾付きカラム名 (database.table.column) を使用した場合の問題を修正しました。従来は、このようなクエリは missing-columns エラーで失敗していました。#71760 を修正。#109491 (Mikhail Artemenko)。- PromQL クエリの query result cache を修正しました。
promqldialect は non-deterministic-function チェックをバイパスしており、now()を基準にした古い結果を返す可能性がありました。また、Prometheus HTTP API (/api/v1/query,/api/v1/query_range) では cache entries がまったく保存されていませんでした。#110887 (Nikita Mikhaylov)。 TZ環境変数が空の場合に server の起動に失敗する問題を修正しました。#68920 を修正。#68921 (Ardenwick)。Backupデータベースエンジンが使用不可になったバックアップ (たとえばファイルが削除された場合や、underlying storage にアクセスできない場合) を参照しているときに、server の起動に失敗する問題を修正しました。これにより、server 全体の起動を妨げるのではなく、database はテーブルなしで読み込まれるようになりました。#83188 (Vitaly Orlov)。Distributedengine のテーブルへのバックグラウンド inserts 使用時に、リモート shard へのデータ送信で繰り返し error が発生していた場合、その error の解消後は遅延が減少するようになりました。従来は、遅延は増える一方でリセットされませんでした。#87378 (Andrei Kochemirovskii)。- 起動時に
Distributedasync-insert queue をスキャンして見つかった破損ファイルについて、system.distribution_queueのbroken_data_filesとBrokenDistributedFilesToInsertmetric が常に0を報告していた問題を修正しました。#92124 (KG.Xu)。 - ディスクフル error 後のログ復旧を修正しました。従来は、log 用ディスクがいっぱいになると ClickHouse は failed 状態に入り、syslog に error メッセージを大量に出し続け (1 時間あたり 100 GB 超を書き込む可能性がありました) 、disk space が解放された後も復旧せず、server の再起動が必要でした。現在は、disk space が利用可能になると、server を再起動しなくても logging system が自動的に復旧します。#93127 (jaehanbyun)。
vended_credentialsが無効な場合、静的な S3 credentials を UnityDataLakeCatalogtable の読み取りに転送するようにし、匿名でのオブジェクトストレージアクセス失敗を防ぐようにしました。#96910 (kgeg401)。DeltaLaketable engine のスキーマ パース コードで発生するクラッシュを修正しました。#97112 (Kseniia Sumarokova)。- 認証されていない TCP client が interserver port 経由で table の存在やレプリケーション状態を調べられてしまう security issue を修正しました。#99854 (Shaohua Wang)。
DESCRIBE TABLEで、サブクエリの後にエイリアスが続く場合に発生する構文エラーを修正しました。#100031 を修正。#100205 (Yarik Briukhovetskyi).ROLLUP/CUBEとともにgroup_by_use_nullsを使用した際に、外部カラムがNullableになる場合の相関サブクエリで発生する例外を修正しました。#100365 (Alexey Milovidov).- ロールバックされたトランザクションの
MergeTreeパートがコミット済みのパートと交差した場合に、テーブル起動中に発生していたサーバーの異常終了 (sanitizer ビルド) およびサイレントなデータ消失を修正しました。#100992 (Tuan Pham Anh). MergeTreeテーブルのArray(LowCardinality(String))カラムに対してindexOfAssumeSortedが誤った結果を返す問題を修正しました。#101771 (Yash ).- テーブルのソートキーが
DateカラムをtoDateTimeでラップしている場合 (例:ORDER BY toDateTime(date_column)) に、クエリがWHERE date_column >= '...'のように元のカラムを比較でフィルタすると、主キーによる pruning が誤って行われる問題を修正しました。toDateTime(Date)はDateTimeの範囲を超えるDate値 (2106-02-07より後) で overflow するため、保存されるキーは単調ではありません。そのため ClickHouse は、このキーと述語の組み合わせに対して主キーによる pruning を行わないようになりました。これを行うと、一致する行を含む granules を落としてしまう可能性があるためです。#101744 をクローズ。#101814 (Nihal Z. Miaji). - 除算によって floating-point exception (ゼロ除算または
INT_MIN / -1) が発生した場合に、符号付き/符号なしの混在引数を含め、intDivOrNull、moduloOrNull、positiveModuloOrNullがNULLではなく0を返していた問題と、intDivOrNullおよびintDivOrZeroがNULL/0を返す代わりに例外を送出していた問題を修正しました。#101976 (Yarik Briukhovetskyi). Icebergのメタデータ更新の同時実行時や、DeltaLakeテーブルに対するmergetable function 経由の読み取りなどのコーナーケースで、IcebergまたはDeltaLakeテーブルの読み取り時にLOGICAL_ERROR例外が発生する問題を修正しました。#102033 (Groene AI).- 外向き HTTP リクエスト (例:
aiGeneratefunction、urltable function、S3) で、IPv4 と IPv6 address の両方を通知する host に対し、片方のアドレスファミリしか到達可能でない場合にNo route to hostで失敗する問題を修正しました。HTTP connection pool は、最初のアドレスがネットワークエラーで失敗した場合、最初のリクエストの時点でそのエラーをそのまま返すのではなく、次に名前解決されたアドレスへフォールバックするようになりました。#103786 (Alexey Milovidov). - 循環 dependencies を持つテーブルを含むバックアップの
RESTORE中に、サーバーが異常終了する問題を修正しました。#103824 (Konstantin Bogdanov). - Arrow の
time32/time64カラムに対する schema inference (例:SELECT * FROM file(..., 'Arrow')) で、DateTime64ではなくTime64を推論するようになりました。これまで推論されていた型に依存している下流処理では、アップグレード後に新しい型が使われるようになります。あわせて、Time/Time64の値を Arrow に export する際、精度に応じて適切な Apache Arrow の time 型が選択されるようになりました。#104038 を修正。#104316 (/bin/cat). MergeTreeで、ALTER TABLE ... RENAME COLUMNと同時実行されるOPTIMIZE TABLE ... FINAL(または任意のバックグラウンド merge) の競合を修正しました。この不具合により、リネーム後のカラムのデータが気付かないうちにデフォルト値へ置き換えられることがありました。 #104822 (Groene AI).DETACH DATABASE/ATTACH DATABASEの後、lazy_load_tables = 1のAtomicdatabase で、ALTER TABLE ... RENAME COLUMNの実行中に同時実行されたINSERTによって発生するBlock structure mismatch論理エラーを修正しました。 #104852 (Groene AI).- パラメトリック形式と 2 引数形式を混在させた場合の
groupConcatを修正しました。たとえばgroupConcat(',', 2)(x, '/')では、行数制限パラメータが気付かないうちに無視され、指定した件数ではなくすべての行が返されていました。現在は、2 番目の引数の区切り文字が正しくパラメータを上書きします。 #104882 (Yarik Briukhovetskyi). KILL QUERY/KILL MUTATION/KILL PART_MOVE_TO_SHARD/KILL TRANSACTIONのWHEREclause に行ごとのサブクエリが含まれている場合、または対象のsystem.*table に対する内部SELECTが複数の block を出力するほどmax_block_sizeが小さい場合に発生するLOGICAL_ERROR(Expected one block from input stream) を修正しました。 #104927 (Groene AI).- より小さい interval 単位からより大きい interval 単位への
CASTが誤った結果を返す不具合を修正しました (たとえば、CAST(toIntervalSecond(60) AS IntervalMinute)は1ではなく0を返していました) 。 Closes #104986. #105058 (Yarik Briukhovetskyi). - read-in-order pipeline (
optimize_read_in_order = 1およびread_in_order_use_virtual_row_per_block = 1) で実行されるLIMIT ... WITH TIESクエリで発生する論理エラー (Assertion 'row < chunk.getNumRows()' failed) を修正しました。 #105102 (Groene AI). - リフレッシャブルmaterialized view (
MATERIALIZED VIEW ... REFRESH ...) におけるリークを修正しました。refresh でEXCHANGE TABLESによって入れ替え対象から外される一時的な内部 table は、max_table_size_to_dropを超えていると drop できなかったため、その後の refresh のたびに新たな一時内部 table が作成され、最終的にはディスクを使い切るまで view の data directory が増え続けていました。現在は、refresh タスクの内部 drop ではmax_table_size_to_dropとmax_partition_size_to_dropをバイパスします。これらの安全機構は、view 自体に対してユーザーが発行するDROP TABLEには引き続き適用されます。 Closes #104900. #105106 (Groene AI). - sorting key を変更しない
ALTERクエリ (settings、comments、codecs の変更、key ではないカラムの追加など) で、sorting key にSimpleAggregateFunction(またはallow_suspicious_primary_key = 1の場合にのみ許可される別の型) を含むMergeTreetable に対して、予期しないDATA_TYPE_CANNOT_BE_USED_IN_KEYerror が発生する不具合を修正しました。 #105111 (Groene AI). Replicateddatabase の drop または detach 中にsystem.clustersのレプリカ状態カラム (is_active、unsynced_after_recovery、recovery_timeなど) をクエリすると発生していた use-after-free を修正しました。また、このコードパスで握りつぶされていた無害な Keeper 例外 (影響を受ける database は一時的に使用不可として扱われ、スキップされます) は、ErrorではなくInformationレベルでログに記録されるようになったため、デフォルトのsend_logs_level = 'warning'ではクライアントに届かなくなりました。#105149 (Groene AI).clickhouse-local --ignore-errorで複数のステートメントを実行した際、字句エラーや括弧の不一致エラーが発生するたびに、それ以降の各ステートメントがエラーメッセージ内にそのまま出力されてしまう問題を修正しました。#105480 (Groene AI).- リフレッシャブルmaterialized view が、リフレッシュのスケジューリングと同時に drop または replace されたときに発生する、まれな server crash を修正しました。#105588 (Groene AI).
- データファイルのフォーマットが
ParquetではないIcebergtable に対するALTER TABLE ... DELETEおよびALTER TABLE ... UPDATEについて、server が crash したり table が黙って破損したりする代わりに、明確なNOT_IMPLEMENTEDエラーで拒否するようにしました。#105893 (Groene AI). EXCEPTまたはINTERSECTで定義され、そのオペランドがUNIONチェーンである view で、DETACH/ATTACH後または server 再起動後に誤った結果が返される問題を修正しました。フォーマッタがINTERSECT/EXCEPTのUNION子要素を括弧で囲んでいなかったため、保存された SQL が逆の優先順位で再解析されていました。#105935 (Groene AI).- フォーマット自動検出時に
JSONdata がTSKVと誤判定される問題を修正しました。#100797 をクローズします。#106009 (Pavel Kruglov). JSONカラムにminmaxスキップ索引を直接作成することを禁止しました。混在型の配列が insert された場合、後でNO_COMMON_TYPE例外により insert が失敗することがあったためです。代わりに、型付き subcolumns に索引を作成してください (例:INDEX idx json.field TYPE minmax) 。#106094 (linhaojie).Time型の partition key を持つ table で、OPTIMIZE TABLE ... PARTITION ...やパーティション値を解決するその他のクエリで発生していた論理エラー (Parsed partition value ... doesn't match partition value for an existing part with the same partition ID) を修正しました。#106202 (Groene AI).- 論理削除によって projection part が残らなかった場合に、data part が壊れた projection を持つものとして誤ってマークされる問題を修正しました。これは、projection が出力 0 行で再構築された場合、または drop された場合 (
lightweight_mutation_projection_mode = 'rebuild'/'drop') に発生していました。従来は、この broken 状態によって、その part に対するクエリで projection optimization が無効化されていました。#106273 (Shaohua Wang). plainobject storage disk (s3_plainなど) 上のremoveDirectoryが、空でない directory の削除を再帰削除であるかのように扱い、その中のすべての files を削除してしまう問題を修正しました。空でない directory の削除はCANNOT_RMDIRで失敗するようになり、再帰削除では内容を明示的に処理するようになりました。#106281 (RinChanNOW).- クォーラムが同時に失敗としてマークされた場合に、Keeper のハードウェアエラーからのクォーラム
INSERTの復旧中に server を異常終了させる可能性があった論理エラー (Part ... doesn't exist) を修正しました。#106424 (Alexey Milovidov). - row policies の適用時に、重複したカラム名に関する
LOGICAL_ERROR例外が発生する問題を修正しました。#106438 (János Benjamin Antal). CREATE OR REPLACE TABLEおよびREPLACE TABLEで、既存の対象がmax_table_size_to_dropを超えている場合に、ディスク上に_tmp_replace_*テーブルが取り残され、元のテーブルが空のテーブルに置き換えられてしまう問題を修正しました。サイズチェックはスワップ前に実行されるようになったため、制限に違反した場合は、ユーザーに表示されるテーブル名を含むエラーを出して安全に中止されます。#106782 (Groene AI).Dynamic引数に対してJSON_QUERY/JSON_VALUE/JSON_EXISTSがString/UInt8ではなくDynamicを返していた問題を修正しました。#106461 をクローズしました。#106877 (Pavel Kruglov).query_plan_optimize_lazy_finalが有効な状態で、テキスト索引に対する filter を伴うFINAL付きのReplacingMergeTreetable へのクエリで、誤った結果が返る問題を修正しました。遅延FINALoptimization が、テキスト索引からの direct read を再現しない読み取りステップを構築していたため、filter によって一致するすべての行が除外されていました。#106894 (Jimmy Aguilar Mena).- 例外に追記されるメッセージにも
query_masking_rulesを適用するようにし、masking rules が設定されている場合に、jdbc/odbctable functions からのエラーの(in file/uri ...)接尾辞に含まれる URL-encoded credentials が漏洩しないようにしました。#106916 (Gaurav Dubey). - partition key に
LowCardinality(Nullable(...))カラムを含むテーブルで、part の再読み込み時 (server の再起動、DETACH/ATTACH) に毎回パーツが壊れているものとしてマークされ、detach される問題を修正しました。26.5 以降、このようなカラムの最小値と最大値がNULLの場合、part ごとの minmax 索引 file は書き込まれていませんでしたが、part の整合性 check では引き続きその file が必須とされていました。影響を受けるバージョンで書き込まれたパーツには minmax 索引 file がないため、引き続き手動で再 attach する必要があります。#106837 をクローズしました。#106945 (Pedro Ferreira). Nothing型のカラム (たとえばARRAY JOIN []が生成するもの) を非等価JOIN ... ONpredicate が参照した際に、LOGICAL_ERROR(Unexpected expression in JOIN ON section. Expected boolean (UInt8), got 'Nothing') が発生する問題を修正しました。#106981 (Groene AI).enable_filesystem_query_cache_limit = 1で作成された filesystem cache disk 経由でMergeTreetables を読み取る際に、まれにLOGICAL_ERROR(Attempt to release query context that does not exist) と、それに伴う server crash が発生する問題を修正しました。#107028 (Groene AI).- 空の part を
plain_rewritabledisk に移動した際に server crash が発生する問題を修正しました (たとえば、remove_empty_parts = 0によって保持されている空の part に対してALTER TABLE ... MOVE PARTITION ... TO DISKを実行した場合) 。#107040 (Groene AI). optimize_read_in_orderとread_in_order_use_virtual_rowが有効な場合に、UNION ALLに対するORDER BYクエリで行順序が不正になる問題を修正しました。#106879 をクローズしました。#107053 (Vladimir Cherkasov).geohashesInBox関数で、座標の引数に定数値と非定数値が混在している場合、または座標がBFloat16の場合に発生していたLOGICAL_ERROR(Unsupported argument types) を修正しました。定数/非定数が混在するFloat32引数は動作するようになり、BFloat16引数は明確なエラーとともに拒否されます。#107063 (Groene AI).- 同じキーに対して
WITH CUBE、WITH ROLLUP、またはGROUPING SETSを伴うGROUP BY上のSELECT DISTINCTで、誤った結果 (重複行) が返る問題を修正しました。これらのケースでは、グループ化修飾子がキーカラムをデフォルト値にした追加の行を出力し、それが実際のグループ値と衝突する可能性があるため、query_plan_remove_redundant_distinct最適化はDISTINCTを削除しなくなりました。#107072 (Groene AI). WHEREフィルターが定数項を含む論理積である場合のOUTER JOINにおける誤った結果を修正しました (たとえばp AND 1、またはQUALIFY NULLがWHEREにマージされるWHERE p QUALIFY NULL) 。この定数項が JOIN の非保持側に押し込まれ、JOIN 後のフィルターから削除されることがあり、その結果、JOIN が片側のカラムをデフォルト値にした非一致行を生成し、それらの行が誤ってフィルターを通過していました。#107084 (Groene AI).<lifetime>を設定したexecutable_poolユーザー定義関数が、基盤となるスクリプトの変更を反映しない問題を修正しました。以前は、編集後のスクリプトを再読み込みするのはSYSTEM RELOAD FUNCTIONSのみで、定期的な<lifetime>による再読み込みでは古いバージョンが実行され続けていました。#107087 (Groene AI).correlated_subqueries_default_join_kind = 'left'のとき、同じカラム識別子を 2 回投影するソース (例:SELECT number, *) に対する相関スカラーサブクエリで発生するLOGICAL_ERROR例外 (Cannot find input column ... on its position in inputs of expression actions DAG) を修正しました。#107112 (Groene AI).- ワーカースレッドがプロファイラーを開始する処理とサーバーのシャットダウンとの間で、サーバーグローバルなトレースコレクターに発生していたデータ競合を修正しました。#107307 (Groene AI).
- インクリメンタルバックアップは、
.backupメタデータファイルの<base_backup>ロケーターにS3資格情報を保存しなくなりました。use_same_s3_credentials_for_base_backup = 1を指定して作成したバックアップ、またはこのバックアップロケーターと一致する明示的なベースバックアップ資格情報を使用して作成したバックアップでは、秘密情報を含まないマーカーが保存され、復元時に追加設定なしで復元できます。異なる明示的なベースバックアップ資格情報、または追加のベース認証引数を使って作成したバックアップについては、それらをbase_backup設定とともにRESTOREに渡してください。古いバージョンで埋め込み資格情報を使って作成されたバックアップも引き続き復元可能です。#107357 (Pablo Marcos). output_format_csv_serialize_tuple_into_separate_columnsが有効な場合 (デフォルト) 、CSVWithNamesおよびCSVWithNamesAndTypesのヘッダーのカラム数がデータより少なくなる問題を修正しました。ヘッダー (および型の行) は、現在Tupleカラムをドット区切りの名前 (例:t.a,t.b) を持つ末端フィールドへフラット化するため、ヘッダーのカラム数がデータと一致します。これを制御する新しい設定output_format_csv_header_serialize_tuple_into_separate_columns(デフォルト1) が追加され、0に設定すると以前の単一名ヘッダーに戻せます。#107371 (Groene AI).Parquetの data files に予約済みの row-lineage カラム (_row_idなど) が含まれているIcebergv3 テーブルの読み取りを修正しました。ネイティブのParquetリーダーは、テーブルスキーマに含まれない予約済みフィールド ID に対してICEBERG_SPECIFICATION_VIOLATIONを発生させなくなりました。#107377 (Greg Maher).- スレッドプールのキューから、スケジュール済みタスクが実行前に取り除かれることで発生していた、シャットダウン中のまれな server の異常終了 (
std::future_error:The associated promise has been destructed prior to the associated state becoming ready) を修正しました。 #107383 (Groene AI). MaterializedPostgreSQLのテーブルエンジンおよびデータベースエンジンを修正し、デフォルト以外の PostgreSQL スキーマ (materialized_postgresql_schema) から単一のテーブルまたはデータベースをレプリケートできるようにしました。これには、同じデータベース内の複数のスキーマに同名のテーブルが存在する場合も含まれます (従来は publication と replication slot を共有し、相互に干渉していました) 。 #107425 (Alexey Milovidov).- server の停止中に 1 つのレプリケートテーブルの structure が変更されると、
MaterializedPostgreSQLがデータベース全体のレプリケーションを停止してしまう問題 (LOGICAL_ERROR: Columns number mismatch) を修正しました。現在は影響を受けたテーブルだけがスキップされ、DETACH/ATTACHで復旧できます。 #107427 (Alexey Milovidov). MaterializedPostgreSQLデータベースのBACKUPがTable ... were created or changed its definition during scanningにより無期限にハングすることがなくなり、テーブルデータも実際にバックアップされるようになりました (基盤となるReplacingMergeTreeに委譲されます) 。これにより、独立したReplacingMergeTreeとして復元できます。 #107433 (Alexey Milovidov).compatibility = '26.6'を設定した場合 (暗黙的にhiveパーティション方式が有効になります) に、S3/object storage テーブルパス内の{_partition_id}をBAD_ARGUMENTSを返さずに黙って受け入れてしまうリグレッションを修正しました。 #107437 (Lefteris).- 同梱の
mongo-c-driverにおけるメモリリークを修正しました。この問題は、MongoDB からの読み取り時 (たとえば MongoDB Dictionary やmongodbtable function 経由) に、再試行可能な読み取り error の後、再試行時の server 選択に失敗した場合に発生する可能性がありました。 #107448 (Groene AI). - 外部 engine によって作成され、任意の
snapshots、metadata-log、snapshot-log配列が省略されているIcebergテーブルへの insert 時に発生する例外を修正しました。これにより、そのような insert も失敗せず成功するようになりました。 #107473 (Shaohua Wang). DELETE FROM(論理削除) で、ALTER DELETEに加えてALTER UPDATEprivilege も必要になっていた問題を修正しました。これにより、ドキュメントどおりALTER DELETEのみを付与されたユーザーでもDELETE FROMを実行できます。 #107491 (Shaohua Wang).use_hive_partitioning = 1を指定し、実カラム (仮想カラムではないカラム) を絞り込むWHERE/PREWHERE句と Hive パーティションカラムの選択を同時に行った場合に、Hive パーティション化されたファイルの読み取りで発生していたNOT_FOUND_COLUMN_IN_BLOCKを修正しました。 #107505 (Groene AI).- 旧アナライザ (
enable_analyzer = 0) が、UNIONの子がINTERSECT/EXCEPT集合演算であるサブクエリから一部のカラムを読み取る際に発生するLOGICAL_ERROR(Different order of columns in UNION subquery) を修正しました。 #107511 (Groene AI). Arrow/ORCデータをLowCardinality(Nullable(...))カラムに insert する際、NULL値が黙って空文字列に変換されていた問題を修正しました。これは 26.5 で導入されたリグレッションでした。 #107532 (Jimmy Aguilar Mena).Dynamicカラムを持つテーブルに対する mutation で生成されたMergeTreepart のマージまたは読み取り時に発生する可能性があった論理エラー (Stream ... variant_discr ... is not found) を修正しました。#107562 (Alexey Milovidov).pointInPolygonがVariantやDynamicなどのラッパー型の定数 Polygon 引数で呼び出された場合 (たとえばpointInPolygon((x, y), if(c, [(0, 0), ...], NULL))) に、主キー解析中に発生していた論理エラー (WhichDataType(const_type).isArray()) を修正しました。#107589 (Groene AI).- 監視対象のファイルが削除された後、同じ inode を再利用して再作成された際に
FileLogengine で発生する可能性があった論理エラー (Last stored last_written_position in meta file ... is bigger than current last_written_pos) を修正しました。#107617 (Groene AI). - 非同期の Keeper リクエストが送信中に破棄された場合 (たとえばメモリ逼迫時) に、ZooKeeper クライアントのリクエスト処理中にまれに発生していた server abort (
std::future_error:The associated promise has been destructed prior to the associated state becoming ready) を修正しました。#107647 (Groene AI). ReplicatedMergeTreeテーブルのRESTOREを修正し、バックアップ内の重複コンテンツを持つ part が暗黙に重複排除されるのではなく、保持されるようにしました。#107652 (Pablo Marcos).JSONカラムに対する runtime join filter が誤った結果を返す問題を修正しました。#107646 をクローズしました。#107663 (Pavel Kruglov).- 共通の部分式を共有する
ALIASカラムを選択する distributed queries で、誤った結果が返る問題を修正しました。カラムの対応関係がずれて、別のカラムの値として返されることがありました。#107675 (Vladimir Cherkasov). normalized_query_hashをキーとする quota で、クエリ数の counters と同様に、単一のユーザー共有 bucket に計上するのではなく、各 query pattern ごとにすべての resource (read_rows,read_bytes,result_rows,result_bytes,execution_time,written_bytes,errors) を計上するようになりました。#107681 (Alexey Milovidov).UNION/INTERSECT/EXCEPTの sibling branches がWHEREpredicate だけ異なり、一方の branch の predicate がConstカラムへ定数畳み込みされた場合に発生していたBlock structure mismatch in UnionStep stream論理エラー (debug/sanitizer builds では server abort、release builds ではCode: 49) を修正しました。#107719 (Groene AI).VariantおよびDynamicカラム内にネストされたLowCardinalityの除去処理の不整合によって発生していた論理エラー (Bad cast) を修正しました。たとえばconcat、format、主キー解析で発生していました。#107598 をクローズしました。#107773 (Pavel Kruglov).- クラスターに非アクティブなレプリカ (たとえばオートスケーリング後に残った古いエントリ) が含まれる場合に、並列レプリカでワークロード分散が大きく偏る深刻な問題を修正しました。こうしたレプリカは読み取りコーディネーターによってカウントされなくなり、1 つのレプリカに作業が集中するのではなく、オンラインのレプリカ間で均等に分散されるようになりました。#107805 (Alexey Milovidov).
- プライマリキー解析中に
INサブクエリの Set を構築する際、処理が暗黙のうちに失敗した場合 (たとえばoverflow_mode = 'break'を伴うサブクエリのタイムアウト) にNot-ready Set is passed as the second argument例外が発生し得る問題を修正しました。この問題では、クエリパイプラインで使われる Set がそのクエリ中で恒久的に未構築のままになっていました。 #107924 (Alexey Milovidov). - 述語 pushdown (
enable_optimize_predicate_expression、レガシーアナライザ) において、JOIN ... ON条件内にUNIONサブクエリがある場合に発生していたサーバークラッシュを修正しました。 #107930 (Groene AI). - S3 または S3-compatible (たとえば GCS) の object を読み取り中にその場で上書きした場合に、誤って
CHECKSUM_DOESNT_MATCHやParquetの読み取りエラーが発生したり (さらに一部のフォーマットでは気付かれないまま誤った結果を返したり) する問題を修正しました。こうした読み取りは、2 つの object バージョンをつぎはぎしたデータを返す代わりに、明確で retryable な error で失敗するようになりました。これは新しい設定s3_validate_etag_on_read(デフォルトで有効) で制御されます。 #107934 (Shaohua Wang). setのデータスキッピング索引を持つ table に対して、row policy が常に真となる条件と非索引カラムのチェックを組み合わせてフィルタする場合に、SELECTがNOT_FOUND_COLUMN_IN_BLOCKで失敗する問題を修正しました。 #107971 (Shaohua Wang).- 実行可能 user-defined function のコマンド parameter のパースを修正し、名前が空または無効なプレースホルダーを parameter として受け付けないようにしました。 #107983 (Goutam Adwant).
PREWHERE使用時のMapsubcolumn におけるパフォーマンス低下を修正しました。#107912 をクローズします。原因は #99200 でした。 #107988 (Pavel Kruglov).- 存在しない variant 索引を判別子が参照している不正な
Nativeblock からVariantカラムを読み取る際に発生する、範囲外書き込みを修正しました。 #107991 (uwezkhan). Date32キーカラムに対してtoStartOfDay、toStartOfISOYear、toDaysSinceYearZero、toRelativeSecondNum、toRelativeMinuteNum、toRelativeHourNum、toRelativeWeekNum、toRelativeDayNum、toMonthNumSinceEpoch、またはtoYearNumSinceEpochを適用した際に、関数で表現可能な範囲外の日付 (特に1970-01-01より前の日付) を含む場合、誤ったプライマリキーおよびパーティション pruning によりクエリ結果が誤る問題を修正しました。これらの関数はプライマリインデックスに対して自身を単調であると報告しますが、以前はそのような argument に対して値が折り返していたため、実際には一致する行を含む granule を索引が刈り込んでしまう可能性がありました。現在は結果型の bounds で飽和するようになり、Date32の全範囲で単調性を保ちます。 #108018 (Nihal Z. Miaji).- 要素が
Dynamic/VariantのTupleに対するaccurateCastOrNullを修正しました。実際のソースNULLが変換失敗として扱われていました。対象要素がNullableの場合、ソースNULLは要素NULLのままになります (通常のTuple(Nullable(...))ソースと同じ挙動) 。対象要素が非Nullableの場合、ソースNULLは要素のデフォルト値を生成するのではなく、タプル全体をNULLにします。なお、parse/overflow の失敗時は引き続きタプル全体がNULLになります。 #108023 (Groene AI). また、Tuple内にネストされたDynamicまたはVariantカラムを、accurateCastOrNullまたはaccurateCastOrDefaultで非Nullableの要素型に CAST する際の論理エラーも修正しました。 #108061 (Alexey Milovidov). numericIndexedVectorPointwiseMultiplyが、BSI (bit-sliced index) 構成の異なる全要素 1 のベクトルとの乗算時に空の結果を返していた問題を修正しました。 #108027 (Alexey Milovidov).toTime64およびCAST(... AS Time64)が、saturateおよびignoreoverflow モードで範囲外の値をTime64の範囲内に丸めていなかった問題を修正しました。この問題により、表示上は同一でも比較結果が異なる値が生成されることがありました。 #108028 (Alexey Milovidov).getClientHTTPHeaderが非決定論的として正しく扱われるようになり、その結果がクエリ結果 cache に誤って再利用されなくなりました。 #108029 (Alexey Milovidov).clickhouse-client --port 9440で、安全な (TLS) 接続が再び自動的に有効になるようになりました。これは、リファクタリングによって secure connection のチェックに port が渡されなくなっていたために壊れていました。 #108032 (Alexey Milovidov).- 読み取り専用 table の data part の refresh 中に一時的な error が発生しても、バックグラウンド refresh タスクが恒久的に停止しないようになりました。 #108034 (Alexey Milovidov).
system.warningsにおける memory/CPU/mutation 過負荷の warning が、非同期メトリクス cycle より 1 cycle 遅れていた (さらに最初の cycle では存在しなかった) 問題を修正しました。 #108035 (Alexey Milovidov).mongodbtable function が、oid_columnsを名前付き argument (例:oid_columns='_id') として受け付けるようになり、BAD_ARGUMENTSで拒否しなくなりました。 #108039 (Alexey Milovidov).- 修飾付き asterisk (
t.*) でJOIN USINGキーを select し、その join がPASTE/CROSS/カンマ join または外側のONjoin の下にネストされていて、join_use_nulls = 0の場合に発生していたBad cast from type DB::ColumnNullable to DB::ColumnVector<...>例外 (論理エラー) を修正しました。 #108043 (Groene AI). - 正規表現の「すべて一致」関数
extractAll,extractAllGroupsVertical,extractAllGroupsHorizontal,countMatches,splitByRegexpにおける、幅ゼロアサーション (\b,^,$) の不正な処理を修正しました。たとえば、extractAll('new york is the greatest', '\b(\w)')は、すべての文字ではなく、各単語の先頭文字を正しく返すようになりました。 #108047 (Alexey Milovidov). Atomicデータベースで、クエリが失敗した際にCREATE TABLE ... AS SELECTが空のテーブルを残してしまう不具合を修正しました。たとえば、ユーザーにサブクエリから参照されるテーブルへのアクセス権がない場合です。従来は再試行すると、本来のエラーではなく、テーブルがすでに存在するというメッセージが返されていました。現在は一時テーブル経由でテーブルが作成され、完全にデータが投入されるまで可視状態になりません。#108048 (Alexey Milovidov).DateTime64、Decimal、または浮動小数点の range を使用するrange_hashedまたはcomplex_key_range_hashedDictionary について、dictGet/dictHasに対応する引数を指定してクエリできるようにしました。従来、このようなクエリはmust be convertible to Int64で失敗し、Decimal/DateTime64range の終端未指定インターバルでは誤ってデフォルト値が返されていました。#108052 (Alexey Milovidov).- 明示的なクエリを使用するローカル
ClickHouseログソースで、キーカラムが Dictionary 定義の先頭カラムではない複合キーを持つ Dictionary を読み込む際に発生していた例外 (CANNOT_PARSE_TEXT) を修正しました。ログソースのカラムは、位置ではなく名前で Dictionary の構造に対応付けられるようになりました。#108053 (Alexey Milovidov). - 狭い浮動小数点カラムで正確に表現できない decimal リテラル (たとえば
Float32カラムに対する0.1) を使用した場合に、valuestable function がARGUMENT_OUT_OF_BOUNDで失敗する不具合を修正しました。例:SELECT * FROM values('x Float32', 0.1)。このような値は現在受け入れられ、CASTおよびINSERT ... VALUESと一貫して、表現可能な最も近い値に変換されます。#108055 (Alexey Milovidov). - ユーザーが
ALIASカラムに対してのみSELECTアクセス権を付与されているテーブルでSELECT count()(またはその他の自明なクエリ) を実行した際に発生していたLOGICAL_ERROR(No available columns) を修正しました。#108056 (Alexey Milovidov). mapFilter、mapSort(およびその派生版) 、mapConcatがMapのキーおよび値の型からLowCardinalityを落としてしまう不具合を修正しました。従来、Map(LowCardinality(String), String)カラムに対するmapFilterはMap(String, String)を返しており、これによりCREATE TABLE ... AS SELECTで作成されたテーブルのメタデータが破損し、CHECK TABLEが失敗する可能性がありました。#108057 (Alexey Milovidov).splitByNonAlpha以外のトークナイザーを使うテキスト索引でhasTokenを使用した際に、不正な結果になる不具合を修正しました。#108066 (Robert Schulze).- XML で定義された多数の MySQL Dictionary が
share_connectionを介して単一の接続プールを共有している場合に、SYSTEM RELOAD DICTIONARIES(およびRELOAD DICTIONARY) が停止する不具合を修正しました。これらのプールは現在、設定のconnection_pool_sizeとconnection_wait_timeout(デフォルトは 5 seconds) を反映し、named collections を通じて定義された Dictionary と同じ動作になります。#108083 (Alexey Milovidov). - Dictionary に対して
SHOW DICTIONARIES権限だけを持つユーザーでもEXISTS <dictionary>を実行できるようにしました (従来はSHOW TABLESが必要でした) 。#108084 (Alexey Milovidov). CREATE TABLE dst AS src SETTINGS ...(および、明示的なENGINEを指定せずにORDER BY/PARTITION BYを伴う類似の構文) で、ソース table の engine、ストレージ clause (tableTTLやキーなど) 、および settings が暗黙に破棄される問題を修正しました。現在は、engine と上書きされていないストレージ clause はソース table から継承され、指定した settings はソース table の settings に上書きマージされます。#108085 (Alexey Milovidov)。MergeTreetable へのINSERTが、Windows ベースの filesystem (WSL、CIFS/SMB、Docker Desktop の bind mount) でfilesystem error: in rename: Permission deniedにより失敗する問題を修正しました。原因は、part writer が part directory の rename をまたいでファイルディスクリプタを開いたままにしていたことでした。#108089 (Alexey Milovidov)。WHEREclause なしでHivetable (例:SELECT * FROM hive_table) をクエリした際にクラッシュ (null pointer の逆参照) が発生する問題を修正しました。#108094 (Alexey Milovidov)。- 非定数または 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 (Groene AI)。 - 入力の精度が interval の単位より細かい場合に、
toStartOfIntervalとdateTruncが、その interval に含まれる開始時刻ではなく丸められた値を返す問題を修正しました。たとえば、toStartOfInterval(toDateTime64('2023-10-09 10:11:12.000999', 6), INTERVAL 1 millisecond)は10:11:12.000ではなく10:11:12.001を返していました。明示的な origin を指定する overload も影響を受けていました。#103535 をクローズします。#108186 (Yarik Briukhovetskyi)。 system.query_views_logのview_queryカラムに含まれる機密情報を隠すようにしました。#108214 (Valerii Mordovskii)。- 旧式の
hypothesisスキップ索引 (削除済みの索引タイプで、ATTACH互換性のためだけに残されているもの) を使ってアタッチされたMergeTreetable で、処理が停止する問題を修正しました。従来は、そのような table に対する論理削除、OPTIMIZE、通常のINSERT、またはフィルタ付きSELECTがILLEGAL_INDEX(“Index of type ‘hypothesis’ is no longer supported”) で失敗し、DELETEmutation は無限に再試行されていました。現在はこの無効な索引は不活性として扱われます。つまり、merge/mutation 中は変更せずに引き継がれ、INSERT 時およびクエリプラン作成時にはスキップされ、さらにALTER TABLE ... DROP INDEXで引き続き削除できます。#108217 (Groene AI)。 - setting
type_json_allow_duplicated_key_with_literal_and_nested_objectが、JSONの型付き path で機能しない問題を修正しました。#108218 (Pavel Kruglov)。 - 通常 projection / aggregate projection を持つ
MergeTreetable に対してmake_distributed_plan = 1でクエリを実行した際に、LOGICAL_ERROR(Different list of shards in child plans) が発生する問題を修正しました。#108256 (Groene AI)。 replaceRegexpOneとreplaceRegexpAllを修正し、.がデフォルトで改行文字にも一致するようにしました。これにより、他の regular expression 関数との一貫性が保たれます。#108265 (linjiayu1025-collab)。Array(Dynamic)またはArray(Variant)をaccurateCastOrNullでQBitにキャストする際に発生する論理エラーを修正しました。例:accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')。 #108288 (Groene AI).index_granularity_bytesがAggregateFunctionの state カラムにも適用されるようになりました。以前は、この種のカラムでは granule のバイト上限が無視されていました (たとえばAggregatingMergeTreeテーブルのuniqExactstate や aggregating projections) 。その結果、設定した上限を大幅に超える granule が生成され、読み取り増幅やクエリ実行時のメモリ使用量が増えていました。 #108297 (Groene AI).- 論理更新
UPDATE/DELETEの condition が 2 回評価される問題を修正しました。これにより、非決定論的な condition では誤動作が発生し、決定論的な condition でも余分な処理が行われる可能性がありました。 #86032 をクローズします。 #108323 (ofeliacode). headers_regexpregular expression が空文字列を許容する header がリクエストに存在しない場合に、定義済みの HTTP handler で発生する exception を修正しました。 #108324 (Vitaly Baranov).- 非定数の limit argument を指定した
arrayPartialSortの問題を修正しました。 #108327 (Vitaly Baranov). - キャンセル済みまたは
KILLされたINSERTが、スキップ索引 の build 中に長時間実行され続ける問題を修正しました (たとえば、高カーディナリティなカラムに対する無制限のset(0)索引) 。クエリがキャンセルされると、索引の build も速やかに停止するようになりました。 #108351 (Shaohua Wang). primestable function からのSELECTがキャンセルに応答しない問題を修正しました。step(またはlimit) が大きい場合、KILL QUERYやタイムアウトの後でもクエリが長時間実行され続けることがありましたが、これで速やかに停止するようになりました。 #108353 (Shaohua Wang).- 名前に
INTという substring を含むデータ型名の解析を修正しました (たとえば、データ型の位置で使われるquantileInterpolatedWeightedのような関数風の名前) 。このような名前は MySQL の整数型と誤認され、最初の(...)argument グループが表示幅修飾子として暗黙に消費されていたため、クエリのフォーマットの往復変換が壊れる可能性がありました。 #108354 (Groene AI). - 不正な
ARRAY JOINの後にカンマと括弧付きの table リストが続く場合、本来は拒否されるべきところを cross join として誤って解析していた不整合を修正しました。 #108365 (Raúl Marín). format_display_secrets_in_show_and_selectが無効 (デフォルト) の場合、EXPLAIN actions、EXPLAIN header、EXPLAIN PIPELINEの出力で、encrypt、decrypt、HMACなどの関数の secret argument を表示しないようにしました。 #108386 (Raúl Marín).TOターゲットを持つリフレッシャブルmaterialized view のCREATE OR REPLACEを修正しました。置き換え対象の view がすでにターゲットテーブルを所有しているため、誤って拒否されていました。 #108392 (Nikolay Degterinsky).- 不正な形式または同期がずれた native TCP protocol ストリームによって発生し得たサーバークラッシュ (
Received signal 4, illegal instruction) を修正しました。クライアントが指定する初期アドレスは、解析前に数値のhost:port形式であることを検証するようになり、数値でないポートがトラップされたgetservbynamelibc 関数に渡されないようになりました。 #108410 (Groene AI). - シャットダウン中に、database の停止処理で例外がスローされた場合に発生していたサーバークラッシュを修正しました (たとえば、table の flush が ZooKeeper のタイムアウトに達した場合) 。シャットダウンシーケンスの残りがスキップされなくなり、サーバー終了前に system logs が flush され、それらのスレッドも join されるようになりました。 #108417 (Groene AI).
- パターンに NUL (
\0) バイトが含まれているときに、正規表現関数 (match、extract、extractAll、replaceRegexpOne、replaceRegexpAllなど) が誤った結果を黙って返していた問題を修正しました。NUL は RE2 と同様、通常のリテラルバイトとして扱われるようになりました。 #108427 (Alexey Milovidov). http_options_responseが設定されていない場合に、clickhouse-localが HTTPOPTIONSリクエストに対して空の応答を返していた問題を修正しました。これにより、クエリは動作しているにもかかわらず、Web UI (/play) では接続が壊れているように表示されていました。 #108428 (Alexey Milovidov).- distributed query で、構造的に同一の重複
ALIASカラムを deduplicate しつつ、key = value形式の named-collection 引数を持つ table function (たとえばoss(s3_conn, filename = '...')) を参照している場合に発生するLOGICAL_ERROR(Invalid action query tree node ...) 例外を修正しました。 #108435 (Groene AI). Replicateddatabase 内の協調型リフレッシャブルmaterialized view が、MULTI_READ機能フラグをサポートしない Keeper 上で attach されていた場合に、起動時に発生し得たサーバークラッシュ (LOGICAL_ERROR: 'Unexpected exception in refresh scheduling') を修正しました (たとえば Keeper のダウングレード後) 。今後はサーバーを異常終了させる代わりに、その view を正常に停止します。 #108441 (Groene AI).- 並列レプリカ環境で
MergeTreetable から仮想カラムを選択する際に発生するNOT_FOUND_COLUMN_IN_BLOCKerror (例:Column _part not found) を修正しました。これには、asterisk_include_virtual_columns = 1を指定したSELECT *経由の場合も含まれます。 #108451 (Groene AI). SYSTEM RESET DDL WORKERの実行に、新しいSYSTEM RESET DDL WORKERprivilege が必要になりました。以前は、認証済みの任意のユーザー (readonlyを含む) がこれを実行でき、DDL worker の状態を繰り返しリセットしてON CLUSTERDDL を妨害できていました。 #108460 (Groene AI).catboostEvaluateの model path を、filetable function や dictionary sources と同様にuser_filesディレクトリ内に制限しました。以前は、この関数は任意の filesystem path を包含チェックなしで受け入れていたため、user_files外のファイルの存在確認や read のトリガーが可能でした。今後、model はuser_files内に配置する必要があります。 #108463 (Groene AI).hasColumnInTable関数に、ターゲットテーブルに対するSHOW COLUMNSprivilege が必要になりました。これはDESCRIBEおよびSHOW CREATE TABLEに必要な grant と同じです。以前は、どのユーザーでもhasColumnInTableを呼び出してカラム名を調べたり、アクセスチェックなしで table や database の存在を確認したりできました。 #108464 (Groene AI).mannWhitneyUTest、rankCorr、largestTriangleThreeBuckets、quantileGK、sequenceMatch/sequenceCount、groupArrayIntersectの細工された aggregate function states のデシリアライズ時に、過剰なメモリ割り当てが発生する問題を修正しました。不正な state が巨大な要素数を宣言すると、数バイトの入力しかないのに server が数十 GB のメモリを割り当てようとする可能性がありましたが、そのような state は現在TOO_LARGE_ARRAY_SIZEで拒否されます。#108465 (Groene AI).- S3 の
301 Moved Permanentlyresponse のリダイレクト先をremote_url_allow_hosts(RemoteHostFilter) に照らして検証するようにしました。これまでは AWS SDK の 301 処理で、response (Locationheader または<Endpoint>要素) 内の攻撃者指定の endpoint が host チェックなしで追跡されていたため、悪意のある、または compromised された S3-compatible server が ClickHouse を任意の host にリダイレクトさせることができました (SSRF) 。307 のリダイレクト経路ではすでにこのチェックが行われており、現在は両方の経路で動作が統一されています。#108466 (Groene AI). DataLakeCatalogデータベースエンジンの従来のstorage_aws_access_key_id、storage_aws_secret_access_key、storage_catalog_credential、storage_auth_header設定が、system.databases.engine_fullとSHOW CREATE DATABASEに平文で表示される credential 漏えいを修正しました。これらは現在[HIDDEN]としてマスクされます。#108470 (Groene AI).ssl_certificateのユーザー識別において、単一の*ワイルドカードが名前の 1 つの部分にのみ正確に一致するよう修正しました (RFC 6125 6.4.3) 。これまではCNまたはDNS:SAN subject 内のワイルドカード (たとえば*.corp.example.com) が、evil.deep.corp.example.comのような複数ラベルの name にも一致していたため、より深い subdomain 用 certificate の所有者がワイルドカード user として認証できてしまっていました。URI:SAN のマッチングは変更ありません。#108472 (Groene AI).- MySQL wire protocol における SQL 挿入を修正しました。
SHOW TABLE STATUS LIKEの argument と、MySQL インターフェイス (port 9004) 経由で送信されるSET <mysql_setting>の値は、書き換え後のクエリにそのまま連結されるのではなく、parse したうえで再度クォートされるようになりました。また、MySQL インターフェイス経由のKILL QUERY <id>が複数桁の connection id を黙って無視していた問題も修正しました。#108474 (Groene AI). - HTTP の query-string parameter として渡される機密性の高い値 (たとえば
param_secret_key/param_aws_secret_access_keyのようなparam_*query-parameter バインディング、passwordparameter、または S3 形式のsignatureparameter) が、system.text_logや OpenTelemetry spans にそのまま書き込まれないようになりました。Request URIのログ行では、名前から機密性が高いと判断される parameter の値は[HIDDEN]に置き換えられます。#108475 (Groene AI). urltable function およびURLstorage engine の schema inference 中にhttp_forbid_headersconfiguration を適用するようにしました。これまでは schema inference 中 (たとえばRegexpformat やDESCRIBE) でも禁止された header がネットワーク越しに送信され、その response body が parse エラーに含まれることで secret が漏えいする可能性がありました。現在は inference 経路でネットワークアクセスを行う前に header filter がチェックされ、既存のurlClusterの動作と一致します。#108476 (Groene AI).SELECT ... SAMPLE ...を query condition cache (設定use_query_condition_cache、デフォルトで有効) と併用した際に誤った結果になる問題を修正しました。#108488 (Groene AI).max_parser_depthが大きな値に設定されている場合に、[[[ ... ]]]やarray(array( ... ))のような深くネストした式が原因で発生していたサーバークラッシュ (stack overflow) を修正しました。 #108493 (Raúl Marín).RabbitMQtable engine で、ハートビートの欠落によりブローカーが TCP RST を送信せずに AMQP connection を閉じた際、DROP TABLEまたはサーバー停止時に無期限にハングする問題を修正しました。すべてのブロッキング event loop 呼び出しに 30 秒のタイムアウトを設定し、停止処理が必ず完了するようにしました。 #108497 (Aly Ayman).- internal query の一部として実行される secondary query は、今後 internal query として記録されます。 #108506 (Miсhael Stetsyuk).
ArrowFlighttable engine とarrowFlighttable function が、<remote_url_allow_hosts>の許可リストに従うようになりました。従来は connection の host と port が検証されていなかったため、クエリが許可リストにない host に到達できていました。 #108507 (Groene AI).- MySQL wire protocol コマンド
COM_FIELD_LIST(mysql_list_fields) とCOM_INIT_DB(USE database) に、それぞれの SQL 相当機能 (SHOW COLUMNS/DESCRIBEおよびUSE) と同じアクセス制御が適用されるようになりました。従来は、ユーザーが一部のカラムにしか権限を持たない table のカラム名を開示できてしまい、さらにSHOW DATABASESprivilege がなくても current database を切り替えられていました。 #108508 (Groene AI). http_forbid_headersが大文字・小文字を区別せずに照合されるようになりました。HTTP header 名は大文字・小文字を区別しないため、Authorizationを禁止すると、authorization、AUTHORIZATION、その他の表記違いもブロックされるようになりました。設定されたheader_regexpパターンも、明示的に(?i)フラグを付けなくても大文字・小文字を区別せずに照合されるようになりました。 #108509 (Groene AI).- distributed query が、まだ materialize されていない
MATERIALIZEDCTE を external table として参照し、かつ remote source が遅延生成される場合に発生しうるサーバークラッシュ (segmentation fault) を修正しました。 #108547 (Groene AI). - query condition cache (
use_query_condition_cache = 1) が、別のスキップ索引の組み合わせで実行されたクエリに対してスキップ索引由来の mark 除外を再利用してしまい、誤った結果を返す問題を修正しました。たとえば、use_skip_indexes = 0、ignore_data_skipping_indices、またはuse_skip_indexes_for_disjunctionsのモードが異なる場合です。スキップ索引由来の cache entries は、実際に実行された有効なスキップ索引の組み合わせをキーにするようになりました。 #108548 (Groene AI). DateTime64argument を取るchangeYear,changeMonth,changeDay,changeHour,changeMinute,changeSecondに関する複数の不具合を修正しました。結果カラムが argument の scale ではなく、ハードコードされたデフォルト scale 3 で作成されていたため、結果をarrayPushBack/arrayPushFront/arrayConcatに渡すとLOGICAL_ERROR(writeSlice expects same column types) が発生していました。また、ナノ秒精度 (scale 9) の入力ではDECIMAL_OVERFLOWが発生し、epoch 以前の sub-second 入力では誤った calendar second が返されていました。あわせて、DateTime64に対するtimeSlotsで、宣言された return type においてオプションのSizeargument の scale が無視され、Sizeの最大 scale で誤った timestamp が返される問題も修正しました。 #108551 (Groene AI). #108681 (Takumi Hara). #108994 (Groene AI).enable_identifier_resolve_cacheが有効 (既定) な場合に、褃合predicateにGROUP BY内でエイリアスを付けて再度参照すると発生するNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#108553 (Groene AI).STREAM読み取り (SELECT DISTINCT ... FROM table STREAM) に対してDISTINCTを実行した際に発生する論理エラー (Equal values are not contiguous within the range assumed to be sorted) を修正しました。STREAM読み取りではソートキー順ではなくコミット順で行が生成されるため、read-in-order の最適化はSTREAM読み取りには適用されなくなりました。#108568 (Groene AI).- 2 つのケースで、projections がカラムの宣言された
DEFAULT値 (例:-1) ではなく、型の既定値 (例:0) を返していた問題を修正しました。1 つ目は、projection 作成後にALTER TABLE ... ADD COLUMN ... DEFAULTで追加されたカラムを読み取る場合です (基となるテーブルからの読み取りはすでに正しく動作していました) 。2 つ目は、wide part 上でそのカラムのTTLが期限切れになった後です。#108569 (Shaohua Wang). #109013 (Shaohua Wang). - S3 へのアップロード (たとえばバックアップ) で、一時的な読み取りエラーの後に再試行した際に発生しうる
ReadBuffer is canceled. Can't read from it.エラーを修正しました。#108573 (Groene AI). ATTACH PARTITION ... FROMが、主キーは等価でも宣言方法が異なるテーブル (一方は明示的なPRIMARY KEY、もう一方はORDER BYから暗黙的に導出) を拒否していた問題を修正しました。#108590 (Jordi Orihuela).- 複数のテキスト索引が部分的に materialized されている場合に、テキスト索引からの direct read が失敗する問題を修正しました。#108530 を修正します。#108607 (Anton Popov).
DESCRIBE loop('db', 'table')およびDESCRIBE loop(<inner table function>)がSHOW COLUMNS/ ソースアクセスチェックを回避し、権限のないユーザーでもテーブルのカラムスキーマを読み取れてしまうメタデータ漏えいを修正しました。#108624 (Groene AI).S3QueueおよびAzureQueueテーブルエンジンの_etag仮想カラムを修正しました。宣言されているにもかかわらず一度も populate されていなかったため、SELECT _etagは常に空文字列を返していました。これでS3エンジンやs3table function と同様に、オブジェクトの ETag を返すようになりました。#108625 (Groene AI).- timestamp カラムが固定の数値 UTC オフセット (例:
+05:30,-08:00,00:00) または非 IANA マーカーfixedを timezone として持つArrow、ArrowStream、および Arrow ベースのORCファイルを読み取れない問題を修正しました。従来はCannot load time zone ...(BAD_ARGUMENTS) で失敗していました。#108633 (Groene AI). SEMI/ANTIjoin にjoin_algorithm = 'full_sorting_merge'を使用した場合に発生する例外 (LOGICAL_ERROR: Join is supported only for pipelines with one output portまたはNOT_IMPLEMENTED: MergeJoinAlgorithm is not implemented for strictness Semi) を修正しました。これには、相関のあるEXISTSサブクエリのデコリレーションによって生成される join も含まれます。full_sorting_mergeは、実行できない strictness / kind の組み合わせを受け付けないようになったため、プランナーは別の有効な algorithm にフォールバックするか、その join を実行できないことを報告します。#108658 (Groene AI).- 多数の異なる短いトークンに対して
positions = 1でテキスト索引を構築する際に発生していた heap buffer overflow を修正しました。#108659 (Groene AI). - S3 から読み取る、または S3 に書き込むクエリが、S3 リクエストの実行中に (たとえば
KILL QUERYにより) キャンセルされた場合、紛らわしいネットワーク/S3 エラーではなく、キャンセルとして報告されるようになりました。特に、S3 へのバックアップまたは S3 からの復元がキャンセルされた場合、system.backupsでBACKUP_CANCELLED/RESTORE_CANCELLEDが報告されるようになりました。#108673 (Julia Kartseva). - 古いバージョン (25.12 以前) で不正な
auth_headerを指定して作成されたDataLakeCatalogデータベースが、26.2 以降へのアップグレード後にアタッチできず、その結果サーバーが起動できなくなる問題を修正しました。auth_headerはCREATE時にのみ検証されるようになり、ATTACH時には起動中ではなく初回使用時に遅延してカタログが構築されるため、設定ミスのある、または到達不能な単一のカタログデータベースがサーバー起動を妨げることはなくなりました。#108674 (Groene AI). Nullable(Tuple(...))カラムの非 Nullable なLowCardinality要素がサブカラムとして使用された場合 (たとえばソートキーとして) に、マージ中に発生していた論理エラー (Sort order of blocks violated) と不正な読み取りを修正しました。#108679 (Groene AI).- 同じ
Distributedテーブルに対するDROP TABLEとSYSTEM FLUSH DISTRIBUTEDが同時実行された際に起こりうるクラッシュ (use-after-free) を修正しました。#108684 (Groene AI). - Azure アカウントの秘密鍵の Base64 デコード時に発生するクラッシュを修正しました。この問題は、秘密鍵が有効な Base64 でない場合に
azureBlobStorage(および関連する Azure の table function やストレージ) 経由で発生する可能性がありました。>= 0x80のバイトがあると範囲外読み取りが発生し、さらに任意の不正なバイトで未定義動作が発生していました。現在は不正な秘密鍵は適切に拒否されます。#108716 (Groene AI). 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 (Groene AI).CREATE OR REPLACE MATERIALIZED VIEW ... POPULATEにより、新しい materialized view がソーステーブルをサブスクライブしないままになり、replace 後に挿入されたすべての行が静かに失われていた問題を修正しました。#108728 (Alexey Milovidov).Distributedテーブルのシャーディングキーが、たとえばif(1, toInt32(id), toInt32(id) + 1)のようにアナライザによって定数畳み込みされる式であり、optimize_skip_unused_shards = 1のときに発生していた例外 (Cannot find sharding key column、および debug / sanitizer build ではサーバー abort) を修正しました。#108737 (Groene AI).GROUPING SETS/ROLLUP/CUBEでLowCardinalityの定数グループ化キーとgroup_by_use_nullsを使用した際に発生していた論理エラー (Bad cast from type DB::ColumnNullable to DB::ColumnString) と、誤った結果が返る可能性を修正しました。#108771 (Alexey Milovidov).LowCardinality(FixedString)(またはLowCardinality(Nullable(FixedString))) のキー カラムがキー内で関数でラップされている場合、たとえばPARTITION BY sipHash64(k) % NとWHERE k = 'literal'のようなケースで、パーティションおよび主キーの pruning が暗黙的に無効化されていた問題を修正しました。このようなクエリでは pruning が行われず、すべてのパーティションがスキャンされていました。 #108777 (Groene AI).Aliastable 経由、またはTimeSeriestable へのINSERT ... SELECTが、たとえばtimeout_overflow_mode = 'break'のように例外を伴わずにキャンセルされた際、論理エラー (debug および sanitizer builds での server abort) が発生する問題を修正しました。 #108783 (Groene AI). #108796 (Shaohua Wang).groupConcatを、String要素がスパースに格納されたTupleに適用したときに発生するBad cast from type DB::ColumnSparse to DB::ColumnString論理エラー (debug および sanitizer builds での server abort) を修正しました。 #108790 (Groene AI).Mapの値にLowCardinalityを含むネストされたMapがある場合に、mapFilter、mapSort、mapReverseSort、mapPartialSort、mapConcatでTYPE_MISMATCHが発生する問題を修正しました。例:mapFilter((k, v) -> 1, map('a'::LowCardinality(String), map('x'::LowCardinality(String), 'y'))). #108798 (Groene AI).insert_quorum = 'auto'で、生存中のレプリカが過半数未満の場合に inserts が事前に拒否されなかった問題を修正しました。このような inserts は、ローカル part を書き込んだ後にUNKNOWN_STATUS_OF_INSERTで timeout するのではなく、今後はTOO_FEW_LIVE_REPLICASにより即座に失敗します。 #108800 (Gagan Dhakrey).JOINのWITH TOTALS行に、join の片側にある定数サブクエリ由来の定数値ではなく、デフォルト値 (たとえば0) が含まれることがある bug を修正しました。この誤った結果が現れるのは、一部の JOIN 順序、またはquery_plan_join_swap_tablesetting を使用した場合のみでした。 #108807 (Vladimir Cherkasov).- server の shutdown と
S3Queue/AzureQueuetable の shutdown が同時実行された際に発生し得た segmentation fault (null-pointer dereference) を修正しました。 #108810 (Miсhael Stetsyuk). - シグナルスタックサイズが大きい CPU (たとえば AMX 対応カーネル上の Intel Sapphire Rapids / Granite Rapids) で動作する glibc builds において、signal alt-stack size がページサイズの倍数に切り上げられていなかったために発生していた、起動時 abort (
Cannot allocate ThreadStack、EINVAL) を修正しました。 #108813 (Groene AI). - 以前にキャンセルされたクエリによって同期が崩れたままの connection がプールから再利用された際に、distributed queries が
UNEXPECTED_PACKET_FROM_SERVER(expected TablesStatusResponse, got ProfileInfo) で断続的に失敗する問題を修正しました。 #108854 (Alexey Milovidov). - 分散テーブルに対して複数の
LowCardinality引数を持つ関数呼び出しで発生し得た論理エラー (リリースビルドでは例外、debug および sanitizer ビルドでは server の異常終了) を修正しました。たとえば、remotetable function でGROUP BYキーとして使用されるconcatAssumeInjective((SELECT toLowCardinality('p')), s)です。表示されていたメッセージは、Default functions implementation for LowCardinality is supported only with a single LowCardinality argumentまたはExpected the argument ... to have N rows, but it has Mでした。#108871 (Groene AI). reinterpret(x, 'Decimal128(scale)')(およびDecimal32/Decimal64/Decimal256/DateTime64の変換先) で、変換元と変換先の物理型が同じ場合に、要求された変換先の scale ではなく変換元の scale を内部 scale とする結果カラムが生成される問題を修正しました。値自体は正しかったものの、カラムオブジェクトの構造が宣言された型と一致していませんでした。#108878 (Groene AI).MergeTreeテーブルに対するDROP/DETACH/MOVE/REPLACE PARTITIONが、以前の同種の操作が中断され (たとえばロールバックされた transaction やクラッシュ) 、古いtmp_empty_<part>directory が残っている状態で実行された場合に、debug および sanitizer ビルドで server を異常終了させる可能性があったLOGICAL_ERROR(New empty part is about to materialize but the directory already exist) を修正しました。今後は失敗する代わりに、この古い directory が回収されます。#108879 (Groene AI).- ClickHouse Keeper が
Create2レスポンスのStatで誤ってdataLength = 0を返していた問題と、ClickHouse ZooKeeper client がCreate2レスポンスのStatをデシリアライズしていなかった問題を修正しました。#108909 (unintended). clickhouse-localが=の直後に記述された空のオプション値 (たとえば--format_csv_null_representation='') を拒否していた問題を修正しました。現在は--format_csv_null_representation ""およびSET format_csv_null_representation = ''と同様に動作します。#108910 (Vismay).- 名前付き要素と名前なし要素が混在する
Tupleデータ型 (たとえばTuple(a UInt8, UInt16)) をフォーマットする際に、debug および sanitizer ビルドで server を異常終了させていたLOGICAL_ERROR(Inconsistent AST formatting) を修正しました。#108915 (Groene AI). GROUPING SETS、ROLLUP、またはCUBEとmax_threads > 1を併用してuniqExactaggregate states をマージする際に発生していた segmentation fault を修正しました。#108928 (Raúl Marín).- lazy なカラムレプリケーション (
enable_lazy_columns_replication) が有効な場合に、バッチ途中のエラー後にINSERTがロールバックされると (たとえばBufferテーブル、非同期挿入、またはKafka/RabbitMQ/FileLogengine で) 、誤った結果や範囲外読み取りが発生する可能性があった問題を修正しました。#108935 (Groene AI). join_any_take_last_rowが、自動的な spilling to disk を使用する join を含む、サポート対象のすべてのハッシュベース join パスで反映されるようになりました。#108936 (János Benjamin Antal).- アナライザのバグを修正しました。
JOINの片方のテーブルに対するFINAL(例:FROM t1 FINAL JOIN t2) が、誤って結合先の他のテーブルにも適用されており、その結果、この種のクエリが遅くなる可能性がありました。#108979 (Vladimir Cherkasov). - アナライザーを無効にした状態で、一方のブランチが並列レプリカ付きの
GROUP BY GROUPING SETSを使用し、もう一方のブランチがFINALを使用するUNION ALL/INTERSECT/EXCEPTにおいて発生しうるLOGICAL_ERROR(“Cannot find__grouping_setcolumn in header of MergingAggregatedTransform with grouping sets”、または “Chunk info was not set for chunk in MergingAggregatedTransform”) を修正しました。#109003 (Groene AI). automatic_parallel_replicas_modeを有効にし、かつparallel_replicas_min_number_of_rows_per_replicaが 0 より大きい場合に、自動並列レプリカプランナーで発生しうるLOGICAL_ERRORを修正しました。#109011 (Groene AI).MsgPackフォーマットの schema inference 中に発生していた過剰なメモリ割り当てを修正しました。配列/map/string/binary のヘッダーで巨大な要素数が宣言された破損入力によって、単一の数 GB 規模の割り当てが発生することはなくなり、不正な入力として拒否されます。これにより、リリース build でのメモリ不足状態 (および sanitizer 下でのallocation-size-too-bigabort) も修正されます。#109019 (Groene AI).- サーバー上で解釈される
DateTime/DateTime64文字列リテラル (非同期INSERT、SELECTリテラル) でuse_client_time_zoneが無視される問題を修正しました。use_client_time_zoneが有効な場合、クライアントは自身のローカルタイムゾーンをsession_timezoneとして伝播するようになり、サーバー側での解析が同期INSERTの経路と一致するようになりました。#109051 (Groene AI). query_plan_optimize_lazy_finalが有効で、かつWHEREフィルターが部分的にPREWHEREにプッシュダウンされる (optimize_move_to_prewhere_if_final経由) 場合に発生するNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#109073 (Groene AI).- クエリ内で
b.*のような修飾付きアスタリスクを使用し、そのbが別のテーブルの非複合カラムと同名のテーブル (またはサブクエリ/CTE) エイリアスである場合に発生するエラーを修正しました。このようなクエリは失敗しなくなり、bのすべてのカラムを正しく選択できるようになりました。#109078 (Vladimir Cherkasov). - 相関サブクエリが join にデコリレートされ、かつソース relation が同じ column name を複数回持つ場合に発生する
Block structure mismatch in JoinStep論理エラー (debug および sanitizer builds ではサーバー abort) を修正しました。例:WITH t AS (SELECT number, * FROM numbers(3)) SELECT *, (SELECT t.number WHERE t.number >= 0) FROM t(correlated_subqueries_default_join_kind = 'right'の場合) 。#109114 (Groene AI). - ファイルシステムキャッシュ経由で読み取るクエリが、
KILL QUERYでキャンセルされた後も進行中のダウンロードを待ち続けてハングすることがある問題と、そのような待機によってリフレッシュが停止したリフレッシャブルmaterialized view を drop またはSYSTEM STOP VIEWした際に処理がブロックされる問題を修正しました。#109116 (Murphy). - materialized view を持つテーブルへの insert 時に
parallel_view_processing設定が無視される問題を修正しました。25.10 以降、この設定に関係なく view は常に並列に実行されていました。#109170 (Antonio Andelic). INSERTのカラムリストで、t.* LIKE '<pattern>'/t.* ILIKE '<pattern>'と書かれた修飾付きカラムマッチャーは受け付ける一方、その正規形であるt.COLUMNS('<regexp>')は拒否するというパーサーの不整合を修正しました。これにより、クエリフォーマットの往復変換が壊れる問題 (および debug / sanitizer builds でサーバーが abort する問題) も解消されます。#109176 (Groene AI).ProfileEventsの増分が単調増加しない問題を修正しました。NetworkReceiveBytesとAIOWriteBytesのカウンターは、ソケットタイムアウトや AIO の失敗時に負の値だけ増加してしまい (巨大な値にラップアラウンドする) 、MemoryOvercommitWaitTimeMicrosecondsは非単調クロックで計測されていました。 #109180 (Azat Khuzhin).Arrow、ArrowStream、Avro形式、および従来のORCとParquetリーダーでのスキーマ推論を修正しました。nullable な struct カラムに対して、Nullable(Tuple)型が許可されていないにもかかわらずNullable(Tuple)を返していた問題を解消しています (allow_experimental_nullable_tuple_typeは無効) 。DESCRIBEはCREATE TABLEで拒否される型を返していたため、推定したスキーマを使ったテーブル作成やデータ挿入はNullable Tuple type is not allowedエラーで失敗していました。 #109185 (Nihal Z. Miaji).- 相関付き
EXISTSおよびスカラーサブクエリで、相関がサブクエリのプロジェクションにのみ現れ、かつ非相関のWHERE句と組み合わさる場合に誤った結果になる問題を修正しました (サブクエリがすべての行に対して false /NULLと評価される可能性がありました) 。 #105760 を修正しました。 #109186 (Dmitry Novik). CREATE USER ... HOST LIKE 'a', 'b'(および同等のALTER USER) で、最初の pattern だけが暗黙的に保持されていた問題を修正しました。指定したすべてのHOST LIKEpatterns が、ユーザーの host allow-list に保存されるようになりました。 #109187 (Groene AI).- アナライザ使用時に、
Distributedengine テーブル経由でテーブルをクエリすると、mapValues(map)またはmapKeys(map)に定義されたテキスト索引が暗黙的に使われない問題を修正しました。この索引はローカルテーブルおよびcluster/remotetable functions 経由では使われていましたが、Distributedengine テーブル経由のクエリではスキップされていました (force_data_skipping_indices有効時はINDEX_NOT_USEDで失敗していました) 。 #109188 (Groene AI). Replicateddatabase に対して DDL query を実行する際、Keeper 内のホストごとのfinishedstatus ノードがすでにクリーンアップされていると、debug ビルドおよび sanitizer ビルドでサーバーが異常終了する可能性のあった誤ったLOGICAL_ERROR(There was an error on <host>: Cannot obtain error message (probably it's a bug)) を修正しました。 #109192 (Groene AI).- 絶対値が
Int32をオーバーフローする指数を持つSAMPLE比率 (例:SAMPLE 1e-3000000000) が、暗黙的にSAMPLE 1として扱われる問題を修正しました。 #109197 (Raúl Marín). SYSTEM PREWARM PRIMARY INDEX CACHE ... ON CLUSTERのアクセスチェックを修正しました。誤ってSYSTEM PREWARM PRIMARY INDEX CACHEではなくSYSTEM PREWARM MARK CACHEprivilege を要求していました。 #109198 (Raúl Marín).- カスタム
disksetting (SETTINGS disk = disk(...)) を使って作成されたMergeTreeテーブルで、ALTERqueries が失敗する問題を修正しました。 #63019 を修正しました。 #109199 (Mikhail Artemenko). - ウィンドウコンテキスト (
OVER ()) の aggregate functionscramersV、cramersVBiasCorrected、contingency、theilsUの state と、通常の aggregation の state を、連鎖した集合演算 (EXCEPT,INTERSECT) やネストしたUNION ALLで組み合わせた後、たとえば-Mergecombinator 経由で読み取ると server が crash する問題を修正しました。 #109200 (Groene AI). - 定数の
ON条件を持つANY JOIN(例:t1 ANY INNER JOIN t2 ON 1) で誤った結果が返される問題を修正しました。この query はANYjoin result ではなく、完全なデカルト積を返していました。 #109207 (Vladimir Cherkasov). - deduplication を伴う非同期挿入で、
optimize_on_insertによって inserted block が空になる場合 (たとえばSummingMergeTreeで行の合計が 0 になる場合) に server が crash する問題を修正しました。 #109229 (Den Kalantaevskii). SYSTEM DROP REPLICAおよびSYSTEM DROP DATABASE REPLICA ... FROM ZKPATHについて、空またはルートのみの ZooKeeper パス を parse 時にBAD_ARGUMENTSで拒否し、補助 Keeper パス を名前付き Keeper に振り分け、さらに Keeper パス を正規化することで、ローカルの自己保護チェックが意図した レプリカ を誤って対象にしたり、保護を回避されたりしないよう修正しました。 #109230 (Groene AI).- URL スコープの
<s3>endpoint block が、トップレベルの<s3>デフォルトより優先されるよう、S3 settings の優先順位を修正しました。 #109251 (Bharat Nallan). INSERT INTO TABLE FUNCTION(たとえばremoteやfile) でインラインのVALUESdata を使い、server 自身がそのインライン data を parse する場合 (send_table_structure_on_insert_with_inline_data = 0) に、カラムDEFAULT値が適用されない bug を修正しました。DEFAULTを持つ非Nullableカラムに明示的にNULLを insert すると、宣言された default ではなく0になっていました。現在は通常の tableINSERTおよび HTTP protocol と同じ動作になります。 #109258 (Groene AI).Replicateddatabase 内で、s3Cluster(およびfileCluster/urlClusterなどの他の cluster table functions) からのCREATE TABLE ... AS SELECTが、NOT_FOUND_COLUMN_IN_BLOCKにより失敗する問題を修正しました。 #109266 (Groene AI).- data lake catalog database に対して
SHOW TABLESとSELECT ... FROM system.tablesが異なる結果を返していた問題を修正しました。ClickHouse が読み取れない tables は、今後は両方で一貫して非表示になります。 #109273 (Smita Kulkarni). - projections を持つ
MergeTreetable を、enable_block_number_columnまたはenable_block_offset_columnsetting が有効な状態で merge すると、不要な_block_number/_block_offsetカラムを含む projection parts が生成される bug を修正しました。その結果、merge 後の projection part は projection 定義や insert で生成された projection parts と一致しなくなり、CHECK TABLEとOPTIMIZE ... DRY RUNで corrupted (CORRUPTED_DATA) と報告されていました。 #109284 (Groene AI). - 2 フィールドの
{key, value}records からなる Avroarrayを ClickHouse のMapカラムとして読み取れるようにしました。これは、非 string の key を持つMAP<K, V>に対して Iceberg と Spark が生成する encoding です (Avro ネイティブの maps は string key のみをサポートします)。以前はそのような file はArray(Tuple(key, value))としては読み取れましたが、Map(K, V)としては読み取れず、Type Map(...) is not compatible with Avro arrayで失敗していました。 #109289 (Groene AI). - 必須の索引引数が省略された場合に
CREATE HYPOTHETICAL INDEX ... TYPE set(およびngrambf_v1/tokenbf_v1) で発生していたサーバークラッシュを修正しました。こうしたステートメントは、今後は明確なエラーを返して拒否されます。#109294 (Groene AI). enforce_keeper_component_trackingサーバー設定が有効な場合に、メタデータを Keeper に格納するMergeTreeテーブルで、KILL MUTATIONなどの mutation 操作によって発生しうるLOGICAL_ERROR(Current component is empty) を修正しました。#109297 (Groene AI).- scale が 9 より粗い
DateTime64カラムに、約 2262 年以降のORCtimestamp を読み込む際の問題を修正しました。ネイティブのORCリーダーは、これまで全ての timestamp を固定のDateTime64(9)中間形式を経由して変換していましたが、これはナノ秒 scale ではInt64の overflow を引き起こすため、要求されたDateTime64の scale (たとえば Iceberg が生成するDateTime64(6)) であれば値を表現できる場合でも、VALUE_IS_OUT_OF_RANGE_OF_DATA_TYPEとして拒否していました。現在は timestamp を要求された scale で直接読み込むようになり、対象の scale でも値を保持できない場合はdate_time_overflow_behaviorが適用されます。#109302 (Groene AI). - サーバーとして動作する
clickhouse-localは、SYSTEM START LISTEN HTTPの後、対話用のPrettyCompact既定値ではなく、clickhouse-serverと同じTabSeparated既定の出力フォーマットで HTTP connection を処理するようになりました。これにより、clickhouse-connectなどのドライバーから HTTP 経由でclickhouse-localに接続する際の問題が修正されます。対話型の端末セッションでは、引き続き結果はPrettyCompactで表示されます。#109362 (Alexey Milovidov). - S3 multipart upload で一時的に発生する
Code: 499 ... InvalidPart(S3_ERROR) エラーを修正しました。MinIO ではCompleteMultipartUpload実行時に、アップロード直後の part が一時的に存在しないように報告されることがありますが、このエラーは、すでに処理対象となっているNoSuchKeyと同様に、s3_max_unexpected_write_error_retriesの範囲内で再試行されるようになりました。#109364 (Groene AI). - 別のカラムに、インライン alias を定義して参照する
DEFAULTまたはMATERIALIZEDexpression がある場合、ALTER TABLE ... DROP COLUMNで発生するUNKNOWN_IDENTIFIERエラーを修正しました。#109374 (Alexey Milovidov). GROUPING SETS、ROLLUP、CUBEで発生しうる、二段階 sets を使ったuniqExactaggregate states の並列 merge における data race (およびその結果としてまれに発生するクラッシュ) を修正しました。#109389 (Groene AI).- 2 つ以上の shard を持つクラスターで
Distributedテーブルを読み取るCREATE TABLE ... ON CLUSTER ... AS SELECTの実行時に発生するエラー (NOT_FOUND_COLUMN_IN_BLOCK、または古いバージョンではstd::bad_function_call) を修正しました。#109407 (Alexey Milovidov). TTL ... GROUP BY(ロールアップ) を持つテーブルの merge を修正しました。すでに完全に集計済みのパーツが merge のために何度も無限に再スケジュールされることがあり、さらにMATERIALIZEDカラムや有効な永続仮想カラムを持つテーブルが正しく処理されていませんでした。これらのカラムは現在anyで集計されます。#105647 をクローズします。#109410 (Mikhail Artemenko). #109532 (Mikhail Artemenko).- 右辺の引数に素の配列カラムを指定した
INが、誤った結果 (常に false) を黙って返したり、例外を投げたりしていた問題を修正し、x IN arrがhas(arr, x)と同様に動作するようにしました。#109416 (Alexey Milovidov). - 永続仮想カラム
_block_number/_block_offsetに対する暗黙的な min-max 索引を持つMergeTreeテーブルで、ALTER TABLE操作 (RENAME/ADD/MODIFY COLUMN、および新たに挿入された part を持つテーブルでのMATERIALIZE INDEX) 時にUNKNOWN_IDENTIFIERエラーが発生する問題を修正しました (add_minmax_index_for_block_number_column/add_minmax_index_for_block_offset_columnで有効化) 。#109428 (Groene AI). #110236 (Groene AI). - 非 const の
Array(LowCardinality(T))引数に対するarrayFoldで発生するLOGICAL_ERRORを修正しました (例:arrayFold((acc, x) -> acc + x, materialize([1, 2, 3]::Array(LowCardinality(Int64))), toInt64(0))) 。この問題により、Arguments of 'plus' have incorrect data typesで失敗していました (debug および sanitizer ビルドでは server abort) 。#109462 (Groene AI). ReplicatedMergeTreeテーブルに対するCHECK TABLEで、チェック中に一時的かつ再試行可能な ZooKeeper エラー (例: connection loss) が発生すると、正常な part が壊れていると報告される問題を修正しました。今後、このようなエラーは再試行可能なクエリエラーとして返されます。#109465 (Alexey Milovidov).groupArrayLastMergeおよびlargestTriangleThreeBucketsaggregate function における segfault を修正しました。aggregate function states の deserialization を検証するようにしたことで、壊れた state がメモリ範囲外アクセスを引き起こさないようになりました。#109485 (Miсhael Stetsyuk). #109492 (Miсhael Stetsyuk).parallel_hashjoin algorithm に対してグローバルなmax_rows_in_join/max_bytes_in_join制限が適用されていなかった問題を修正しました。この問題により、join_overflow_mode = 'throw'を指定したクエリがSET_SIZE_LIMIT_EXCEEDEDを発生させる代わりに、黙って成功することがありました。#109488 (Hechem Selmi).- 値が
Int32に収まらないBIGINTカラムでパーティション分割された Paimon table の読み取りを修正しました。こうしたパーティション値は切り詰められており (たとえば9223372036854775807が-1になる) 、誤ったパーティションパスが生成され、filesystem error で失敗していました。#109510 (Groene AI). - equality delete file を持つ Iceberg tables の読み取り時に発生する crash を修正しました。equality delete file では nullable でも table schema では non-nullable のカラム (またはその逆) がある場合、delete file から読み取った値が未検証の cast によって異なる型のカラムに挿入されていました (column type confusion) 。その結果、カラムが破損し、server が crash していました。#109551 (Miсhael Stetsyuk).
- MySQL の
connect_timeout、read timeout、write timeout が有効にならない問題を修正しました。応答しない MySQL server への接続試行では、connect_timeout = 1を指定していても 2 分以上ハングすることがありました。これは、sampling query profiler の定期シグナルが MySQL client の内部 poll deadline を繰り返しリセットしていたためです。#109592 (Shaohua Wang). - 非 transactional な
TRUNCATEが、同じテーブルにinsertを行った未コミットの transaction と同時実行された際に発生しうるLOGICAL_ERROR(creation_csn is not set while removal_csn is set to 1) を修正しました。このようなTRUNCATEで、まだコミットされていない transaction によって作成された part が削除されることはなくなりました。#109598 (Tuan Pham Anh). - 物理的な null 許容性が要求された ClickHouse 型と異なる
Parquetの struct カラムを読み取る際に発生するTYPE_MISMATCHエラーを修正しました。これにより、non-nullable なParquetgroup をNullable(Tuple(...))として読み取れるようになり、ネイティブのParquetリーダーでも、物理的に nullable な struct (ParquetのOPTIONALgroup) をNullable(Tuple(...))として読み取れるようになりました。#109615 (Groene AI). #109898 (Groene AI). - マルチクエリストリーム内の
INSERT ... VALUESの後ろに SQL comment (たとえばVALUES (1) -- comment) が続く場合に、server-side の inline insert parsing パス (send_table_structure_on_insert_with_inline_data = 0) で発生していたサイレントなデータ損失を修正しました。末尾の comment が終端の;を越えて行データとして走査され、その結果、ストリーム内の後続クエリが黙ってスキップされていました。#109643 (Groene AI). - 起動時エラーの発生後、server のシャットダウン中というごく短いタイミングでクエリが到着した場合に発生する segfault を修正しました。#109675 (Miсhael Stetsyuk).
ALTER TABLE ... APPLY PATCHESで論理更新をマテリアライズした後に、古い skip index (text、bloom_filterなど) や projection が残る問題を修正しました。従来は、patch によって更新されたカラムに依存する index および projection ファイルが更新されないままだったため、それらを使用するクエリが誤った結果を返す可能性がありました (たとえばhasTokenが更新済みの行を見落としたり、使い終わったパッチパートが削除された後に projection が古い集計結果を返したりすることがありました) 。#109709 (Groene AI).- クエリが
name/databaseカラムだけを読み取る場合に、database ごとの grant を持つユーザーについてsystem.tablesが黙って database をスキップしてしまう問題を修正しました。導入バージョン 26.2。#109723 (Samay Sharma). output_format_arrow_low_cardinality_as_dictionary = 1のときに、LowCardinality(Time)カラムをArrowフォーマットに書き込む際に発生するLOGICAL_ERRORを修正しました。#109730 (Groene AI).- オブジェクトストレージが continuation token とともに空の listing page を返した場合に、
ObjectStorageQueue/AzureQueue(およびazureBlobStoragetable function) が object を黙ってスキップしてしまう問題を修正しました。Azure Blob Storage ではこの挙動が発生することがあり (たとえば listing が内部パーティション境界をまたぐ場合) 、async list iterator は空ページを listing の終端と見なして token を破棄していました。現在は continuation token を追跡するようになりました。#109761 (Gal Ben Moshe). - timestamp (
DateTime64) カラムでパーティション分割された Iceberg tables で、partition pruning によって行が返されなくなる問題を修正しました。#109764 (Den Kalantaevskii). convfunction でFixedString引数に対して発生するILLEGAL_COLUMN例外を修正しました。これらは正しくStringに cast されるようになりました。#109670 をクローズしました。#109771 (hp).getClientHTTPHeader関数は、RFC 9110 に従って、ヘッダー名を大文字小文字を区別せず扱うようになりました。特に、authorizationヘッダーは大文字小文字に関係なくフィルタリングされるようになりました。#103957 をクローズします。#109791 (Mikhail f. Shiryaev).max_execution_time(timeout_overflow_mode = 'throw'の場合) で、クエリがときどきまったくキャンセルされない問題を修正しました。内部のタイムアウト監視が、より遅いデッドラインを持つクエリをすでに待機していると、その後に登録されたより早いデッドラインのクエリが完全に見落とされ、制限時間を大幅に超えて実行され続けることがありました。#109792 (Shaohua Wang).- gzip 圧縮された Iceberg メタデータファイルのファイル名を修正しました。ClickHouse はこれまで
v{N}.gzip.metadata.json(HTTP のContent-Encodingトークン) として書き込んでいましたが、Iceberg の仕様ではgz拡張子のv{N}.gz.metadata.jsonが想定されています。その結果、Spark やその他の Hadoop カタログリーダーは ClickHouse が書き込んだメタデータを見つけられませんでした。ClickHouse は現在v{N}.gz.metadata.jsonを書き込み、後方互換性のため従来のgzip名も引き続き読み取ります。#109812 (Groene AI). enable_join_runtime_filters = 1(26.2 以降デフォルトで有効) での join において、build 側の join key がNULL値を含むLowCardinality(Nullable(...))で、ランタイムフィルタが bloom filter にフォールバックした際に、NOT_IMPLEMENTEDエラー (“Method getDataAt is not supported for Nullable(String)”) が発生することがあった問題を修正しました。#109824 (Groene AI).- external database engine (例:
PostgreSQL) は、UUIDカラムに対する範囲比較 (>=、>、<=、<) をプッシュダウンしなくなりました。ClickHouse と外部データベースでは UUID の並び順が異なるため、これをプッシュダウンすると結果から行が暗黙のうちに欠落していました。現在は、このような predicates は ClickHouse 側で評価されます。#109833 (Vismay). - higher-order function が具体的な値を期待する箇所に lambda expression が渡された場合に発生するサーバークラッシュを修正しました (例:
arrayFold(lambda, arr, another_lambda)におけるarrayFoldの accumulator) 。このようなクエリは、enable_analyzer = 0の場合、クラッシュする代わりにILLEGAL_TYPE_OF_ARGUMENTで拒否されるようになりました。#109840 (Groene AI). icebergLocaltable function およびIcebergLocalengine が、object storage の種別としてlocalではなくazureを宣言していた問題を修正しました。これにより、SETTINGS disk = '...'でローカルディスクを指定して使用した際、ディスク種別チェック (Disk type doesn't match) に失敗していました。#109872 (Pedro Ferreira).- 同じ source column で複数回パーティション化された Iceberg tables (例:
PARTITIONED BY (hours(ts), ts)) の読み取りを修正しました。従来、このような table はCannot add column ...: column with this name already exists (ILLEGAL_COLUMN)で失敗していました。#109895 (Groene AI). - 反転した (
DESC) key column を持つ table で、part に final mark がない場合 (非 adaptive granularity、index_granularity_bytes = 0) に、primary key index が granule を誤って刈り込み、誤った query results になる問題を修正しました。#109901 (Nihal Z. Miaji). - 型のネストが内部の深さ制限を超えた際に、
generateRandomStructureが無効な構造文字列を生成し、2 つのデータ型が連結されることがあった不具合 (例:Decimal32(7)IPv4) を修正しました。これにより結果をパースできなくなっていました。 #109928 (Groene AI). Array(LowCardinality(Nullable(String)))(その形式で保存されたNestedフィールドを含む) 上にtext索引を構築し、索引対象の配列にNULL要素が含まれている場合に発生していたNOT_IMPLEMENTEDerror (Method getDataAt is not supported for Nullable(String) in case if value is NULL) を修正しました。索引構築時にはNULLの配列要素がArray(Nullable(String))と同様にスキップされるようになりました。 #110055 (Groene AI).LowCardinality(Nullable(...))カラム上にminmaxスキップ索引を構築した場合に誤った結果になる不具合を修正しました。以前は、ストレージにプッシュダウンされたWHERE/PREWHERE/HAVING ... IS NULL条件により、カラムにNULL値が含まれていてもすべての granule が刈り込まれ、0 行が返されていました。 #110061 (Groene AI).distinct_overflow_mode = 'break'を修正しました。DISTINCTはドキュメントどおり、制限に達するまでに蓄積された部分結果を返して、ソースの読み取りを停止するようになりました。以前は、max_rows_in_distinct/max_bytes_in_distinctを超えた chunk が破棄され (結果が切り詰められるか空になっていた) 、その後もクエリは入力の末尾まで読み取りとハッシュセットへの挿入を続けていたため、MEMORY_LIMIT_EXCEEDEDに至ることがありました。 #110075 (Sergey Kuznetsov).- すべての position delete files より新しい非 Parquet 形式 (例:
ORC) の data file を含む Iceberg table に対するOPTIMIZE TABLEで発生していた論理エラーChunkInfoRowNumbers does not existを修正しました。 #110107 (Alexey Milovidov). max_bytes_in_distinctとmax_bytes_in_setを修正しました。文字列の keys は、制限チェックでカウントされていなかったアリーナに保存されていたため、文字列 keys に対するDISTINCT/INでは、キー payload 全体の分だけバイト制限を超えるメモリを保持できていました (キー長に対して実質的に無制限) 。これらの制限は、ドキュメントどおりアリーナも考慮するようになりました。そのため、バイト制限に近い文字列 keys を持つクエリは、以前より早く正しく制限に達する場合があります。 #110120 (Sergey Kuznetsov).identity(または scalar subquery の結果) が、ネストしたLowCardinalityを含む値をラップしており、クエリでWITH TOTALS/WITH ROLLUPを使用した場合に発生していたLOGICAL_ERROR(Bad cast from type ColumnLowCardinality to ColumnString) を修正しました。 #110138 (Groene AI).- 内側の次元サイズが 0 の
Npyファイルの読み取りを修正しました。materialized された行数と、最適化されたcountおよび最適化されていないcountの結果が一致するようになりました。 #110146 (Yanjun Qiu). - 複数の keys でグループ化し、その sort order が grouping key の接頭辞にすぎない場合に、順序付き集約で二次時間的な増大 (および
max_execution_timeへの非応答) が発生していた不具合を修正しました。 #110159 (Alexey Milovidov). - 相関のあるサブクエリ (例:
exists((SELECT ...))) を含むフィルターがconvert_query_to_cnfまたはoptimize_and_compare_chainで最適化された際に発生していた論理エラー (Unexpected number of columns in result sample block) を修正しました。 #110187 (Alexey Milovidov). DELETEまたはALTER UPDATEの mutation で、そのWHERE条件またはUPDATEの代入内のサブクエリに set operation (UNION/UNION ALL/UNION DISTINCT/EXCEPT/INTERSECT) を使用した際に発生していた例外 (UNION mode UNION_DEFAULT must be normalized) を修正しました。#110196 (Alexey Milovidov).- zip アーカイブの読み取り中 (たとえば zip バックアップからの
RESTORE時) に、同じアーカイブから先行して行われた読み取りがストリームの途中で失敗したあとに発生し得たReadBuffer is canceled. Can't read from it.論理エラー (debug/sanitizer build での server 異常終了) を修正しました。#110197 (Groene AI). x IN (subquery)を含む mutation がプライマリキー解析中にサブクエリの set を構築している際、server のシャットダウンが遅くなり、KILL MUTATIONが応答しなくなる問題を修正しました。set の構築は即座にキャンセルされるようになりました。#110198 (Alexey Milovidov).- 複数ノード構成で無限 append-entries ループに陥る代わりに、Keeper は協調 settings
max_requests_batch_sizeとmax_requests_append_sizeが0に設定されている場合、それを拒否するようになりました。#110200 (Alexey Milovidov). - タプル式に対して
ORDER BYとともにGROUP BY ALLを使用した際に発生していたNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#110206 (Alexey Milovidov). - サブカラム (
Nullableカラムのx.nullやArrayのarr.size0など) を参照するCHECK制約を持つ table へのINSERTで発生していたNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#110208 (Alexey Milovidov). - クォートが必要なカラム (例:
@timestamp) をデフォルトの sort order が参照している Iceberg tables の読み取りを修正しました。このような table は、生成された storage のORDER BYが生の column name から構築されていたため、SYNTAX_ERRORでパースに失敗し、読み取れなくなっていました。#110233 (Groene AI). DataLakeCatalog(Iceberg/Glue) database のsystem.tablesで、単一の table のメタデータを解決できない場合にクエリ全体が中断したり、その table が黙って欠落したりする問題を修正しました。このような table は、opened storage object を必要とするカラム (engine、total_rowsなど) にはデフォルト値または NULL 値を設定したうえで、database_datalake_require_metadata_accessに関係なく、name 付きで一覧に残るようになりました。壊れた table への直接アクセスでは、引き続きエラーが報告されます。#110242 (Groene AI).quantileTDigestファミリーの aggregate-function state カラムがGROUP BYキーとして使用され、複数の threads によって同時に serialize された場合に発生し得たクラッシュ (heap-buffer-overflow) を修正しました。#110263 (Groene AI).- Microsoft Fabric / OneLake の
DataLakeCatalogtable へのINSERTがIncorrectEndpointError(HTTP 400) で失敗する問題を修正しました。ADLS Gen2 (DFS) への書き込みを.blobhost ではなく.dfsendpoint host にルーティングするようにしたためです。注:remote_url_allow_hostsを使用する場合、INSERTのために.blob(読み取り) と.dfs(書き込み) の両方の Fabric host を許可リストに含める必要があります。#110290 (Mohammad Lareb Zafar). - 特定の PRQL クエリ (
SET dialect = 'prql') の解析時に server が abort する問題を修正しました。prqlccompiler 内の panic により、本来はクエリエラーとして報告されるべきところ、process が abort していました。#110316 (Groene AI). - projection のカラム集合が変更される前に書き込まれた projection part (たとえば、
ALIASカラムの参照元を materialize する方法が異なるバージョンをまたいでアップグレードした後や、projection で使われるALIASカラムの参照先をALTER TABLE ... MODIFY COLUMNで変更した後) が、projection 経由で読み取られたり merge されたりした際に、誤ったクエリ結果が静かに返される問題を修正しました。欠落していたカラムは実データではなくデフォルト値で埋められていました。今後、このような part は基となるテーブルから読み取られ、merge 時には基となるデータから projection が再構築されます。#110328 (Shaohua Wang). ORDER BY ... WITH FILLがmax_execution_timeを尊重せず、大きな補完範囲を生成する際にキャンセルに時間がかかる問題 (特にINTERPOLATE使用時) を修正しました。#110332 (Alexey Milovidov).UPDATE ..., DELETE ...のような複数コマンドのALTERを Iceberg table に対して実行した際に発生する論理エラー (debug/sanitizer build での server abort) を修正しました。こうした mutations は今後、明確なNOT_IMPLEMENTEDエラーで拒否されます。#110347 (Groene AI).SELECTクエリが単独の table Identifier の直後で終わる場合 (例:... FROM t COMMENT 'x') に、COMMENTが暗黙的 alias として誤って解釈され、その結果、comment が view/table に適用される代わりに誤解を招く構文エラーが発生するパーサーの bug を修正しました。#110372 (Aditya Kumar).- 深くネストした
Array/Tuple/Map/Objectliteral をコピーまたは破棄した際に発生する server crash (ネイティブの stack overflow) を修正しました。たとえば、max_parser_depthを引き上げた状態で、非常に深くネストした literal を含むクエリです。#110393 (Raúl Marín). - vector search が期待より少ない行を返す可能性があった 2 つのケースを修正しました。
vector_search_index_fetch_multiplierの値が 1.0 未満だと、計算された fetch 数が 0 に切り捨てられて空の結果になる可能性がありました (このような値は今後拒否されます) 。また、vector search optimization はLIMIT ... WITH TIESクエリではスキップされるようになりました。これは、この optimization が探索対象をちょうど N 個の候補に制限し、N 番目の行と同順位の行を落としていたためです。#110452 (Tamish Mhatre). #110453 (Tamish Mhatre). IN (subquery)において、subquery に相関したサブクエリが含まれ、かつ Set が索引解析中に構築される場合に発生する、論理エラーExpected CommonSubplanReferenceStep to reference CommonSubplanStep、エラーSubplan cannot be used to build pipeline、および論理エラーTrying to extract chunk from ChunkBuffer before all inputs are finishedを修正しました。#110491 (Alexey Milovidov).- 名前付き
WINDOW句の定義内でクエリパラメータの置換が行われない問題を修正しました。以前は、そこにある parameter は黙って未置換のまま保持され、未設定のIdentifierparameter によってEXPLAIN SYNTAX実行中に例外Logical error: '!part.empty()'が発生する可能性がありました。#110506 (Alexey Milovidov). - 残存した
txn_version.txt.tmpファイルによってディスクレベルのメタデータが破損している場合に、object storage disk 上のMergeTreetable で server の起動に失敗する問題を修正しました。#110519 (Alexey Milovidov). - バックグラウンドでの cache ダウンロードがファイルシステム以外のエラーで失敗した際 (たとえば Iceberg table で
OPTIMIZEを実行中など) に、空の孤立した cache ファイルが残り、ファイルシステムキャッシュで論理エラー (Expected file ... not to exist) が発生することがあった問題を修正しました。#110549 (Groene AI). Dynamictype のカウント、またはJSON/ObjectパスのカウントがSIZE_MAXに近い破損したNative形式の stream の読み取りを修正しました。このような不正な入力は、今後は未捕捉のstd::length_errorではなく、明確なINCORRECT_DATAエラーで拒否されます。#110590 (Alexey Milovidov).MaterializedPostgreSQLデータベースエンジンで、table がまだ同期キューに残っている間にデタッチされた (または structure が変更された) 場合に発生し得たサーバークラッシュを修正しました。#110596 (Alexey Milovidov).- クライアントの
SET param_<name>(および--param_<name>フラグ) で、parameter 名がlimit、offset、max_threads、log_commentなどの組み込み設定名と一致した場合に誤動作する問題を修正しました。競合した設定によっては、クエリがCANNOT_PARSE_QUOTED_STRINGで失敗したり、値が暗黙に正規化されたり (例:max_threads=0がauto(N)になる) 、設定エイリアス名が失われたりしていました。また、そのような parameter があると、同じセッション内の以降のすべてのSET param_*も壊れていました。#110597 (Raúl Marín). DEFAULTexpression を持ち、part 内で materialized されていないカラムの subcolumn 読み取りを修正しました (例:ALTER TABLE ADD COLUMNの後やALTER TABLE MATERIALIZE COLUMNの実行中) 。これまでは、subcolumn が評価されたDEFAULTexpression ではなく型のデフォルト値で埋められており、そのようなQBitカラムに対する転置ベクトル距離関数 (cosineDistanceTransposedなど) がSIZES_OF_ARRAYS_DONT_MATCHエラーで失敗していました。これにより #110634 をクローズします。#110636 (Alexey Milovidov).non_replicated_deduplication_windowを有効にしたパーティション化MergeTreetable へのINSERTで、LOGICAL_ERRORInvalid partition key size: 0により失敗することがあった問題を修正しました。これは、async insert バッチが部分的にしか deduplicate されなかった場合 (insert_deduplication_tokenの一部が重複で、一部が新規だった場合) に発生していました。#110651 (Groene AI).- バックグラウンドの非同期挿入 flush は、
KILL QUERYで kill されると速やかに停止するようになりました。従来は、大きなバッファ済みペイロードの flush が最後まで解析を続け、キャンセルを無視していました。#110652 (Shaohua Wang). partial_mergeJOIN 上に置かれたoptimize_aggregation_in_orderを伴うGROUP BYと、optimize_distinct_in_orderを伴うDISTINCTが誤った結果を返す問題を修正しました。read-in-order optimization が partial-merge join を通じて伝播していましたが、この join は左入力を join key で再ソートするため、左 stream 本来の順序を保持しません。その結果、行が誤ってグループ化されていました。#110671 (Groene AI).Date/Date32/DateTime64値に対し、極端なMONTH、WEEK、またはDAYinterval count を指定したtoStartOfIntervalで発生していた符号付き整数 overflow を修正しました。#110688 (Groene AI).- 並列レプリカが
custom_key_sampling/custom_key_rangeモードで動作している際に、FROMにサブクエリを含むクエリで発生するNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。こうしたクエリ (例:SELECT * FROM (SELECT id, k, v FROM t WHERE id < 20) ORDER BY k) は、以前はNot found column __table2.id in block ...で失敗していました。#110690 (Groene AI). - 先頭に空白を含む WKT 文字列 (例:
readWKT(' POINT(1 2)')) をreadWKTが拒否していた問題を修正しました。これらの文字列は、型付きのreadWKTPoint/readWKTPolygon/… リーダーおよび WKT の文法では受け入れられます。#110706 (Groene AI). Distributedtable の上に構築されたMergetable に対するクエリで、同じテキストインデックス predicate がPREWHEREとWHEREの両方で使われた場合に発生する論理エラー (Column ... already added for reading、debug/sanitizer builds では server abort) を修正しました。#110710 (Groene AI).- 並列レプリカが有効な場合に、スカラーサブクエリまたは定数の参照ベクトルを指定して呼び出した
QBitカラム向けの転置距離関数 (cosineDistanceTransposedなど) で発生するNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。これにより #110719 はクローズされます。#110729 (Alexey Milovidov). ReplicatedMergeTreeで、2 つのパーティション操作 (たとえば 2 つのMOVE PARTITION/REPLACE PARTITIONクエリ、またはバックグラウンドのDROP_RANGEと競合する 1 つのクエリ) が、重複する範囲に対するバックグラウンドのパーツチェックを同時にキャンセルしたときに発生する、まれなLOGICAL_ERROR(Unexpected number of parts to remove from parts_queue、debug/sanitizer builds では server abort) を修正しました。#110738 (Groene AI).Quantized(...)codec を持つカラムが別のシリアライゼーションの内側にラップされている場合に発生し得たHash is not set for serialization論理エラーを修正しました。たとえば、同名カラムの型が異なる SOURCES 上のMergetable (Variantにマージされる) で発生していました。#110776 (Groene AI).median/quantileaggregate function の state に非常に大きな整数定数を乗算したとき (例:medianState(x) * 18446744073709551615) に server がハングする問題を修正しました。このクエリはキャンセルに応答しなくなり、無期限に実行される可能性がありました。#110779 (Groene AI).- 長さ 0 の interval を持つ quota (例:
CREATE QUOTA q FOR INTERVAL 0 SECOND MAX queries = 1000) が消費された際に発生する server crash (整数のゼロ除算) を修正しました。現在は、0 以下の quota interval duration は quota 作成時に拒否されます。#110846 (Pedro Ferreira). colがLowCardinalityのときに、throwIf(notLike(col, pattern))(および関数に対する他のthrowIf) が無条件に throw していた問題を修正しました。デフォルトのLowCardinality実装では Dictionary 全体に対してthrowIfを実行していましたが、Dictionary はどの行からも参照されていなくても予約済みのデフォルト値を常に保持しているため、その未使用スロットに 0 以外の値があると、条件を満たさないデータに対してもthrowIfが throw していました。#110864 (Groene AI).- 並列レプリカおよび interserver secret で保護されたクラスター上での
Distributed読み取りで、クエリの有効なロール (SET ROLEまたはroleパラメータ) をリモートノードに伝播するようにしました。従来はリモートノードがユーザーのデフォルトロールにフォールバックしていたため、行ポリシーの評価結果がイニシエーターと一致していませんでした。#110867 (Nikolay Degterinsky). - 初期スキーマにネストしたフィールド (
Tuple/Array/Map) が含まれている場合に、ALTER TABLE ... ADD COLUMNの後で Icebergテーブルが重複したフィールドIDを生成してしまう不具合を修正しました。last-column-idは、ネストした子要素を含む割り当て済みフィールドIDの最大値を記録するようになったため、その後に追加したカラムがネストしたフィールドIDを再利用することはなくなり、ICEBERG_SPECIFICATION_VIOLATION(Duplicate field id) で読み取りが失敗することもなくなりました。#110884 (Groene AI). - Ed25519 SSH 秘密鍵 (
CREATE USER ... IDENTIFIED WITH ssh_key ... TYPE 'ssh-ed25519'、またはusers.xml内の同種の秘密鍵) を使用した際に、FIPSビルドで発生していたクラッシュを修正しました。Ed25519 は FIPS で承認されていないため、このような秘密鍵は今後、明確なLIBSSH_ERRORエラーで拒否されます。#110891 (Konstantin Bogdanov). QBitカラムに対する転置距離関数 (cosineDistanceTransposed、L2DistanceTransposed、dotProductTransposed) の低精度時の結果を修正しました。precisionbit planes に切り詰められた値は、削除された bit を 0 で埋めて再構成されていたため、再構成後の値がすべて 0 に偏り、低精度では退化していました。QBit(BFloat16)で precision 1 の場合は符号 bit だけが残るため、すべての値が±0.0に再構成され、距離はすべての行で同じ定数となって順位付け情報を失っていました。切り詰められた値は今後、残りの精度 cell の有界な中点に再構成されます (生のInt8コードはその cell の中心に変換され、正確な 0 と無限大は保持されます) 。これにより、小さいprecisionでは精度と速度をトレードオフしつつも、極端に偏った結果にはなりません。フル精度の結果は変わりません。これにより #110898 を修正します。#110911 (Alexey Milovidov).- 一時テーブルも使用していたセッションから Icebergテーブルをクエリした後、graceful shutdown 中にサーバーがクラッシュする (use-after-free) 不具合を修正しました。#110914 (Miсhael Stetsyuk).
- 旧式の (バージョン 0) state フォーマットでシリアライズされた
Bool値を持つsumMap/sumMapWithOverflow/sumMapFilteredaggregate states のマージ時に発生していたLOGICAL_ERROR: Cannot sum Bools(debug/sanitizer builds でのサーバー abort) を修正しました。この修正により、バージョン 0 のBoolstate に関する 2 つのサイレントな誤結果も是正されます。型がBoolの map keys は states 間で deduplicate されておらず、さらに 0 値 compaction で誤ったエントリが削除されていました。#110922 (Groene AI). -Tuplecombinator を持つ aggregate function がRESPECT NULLSとともに使用され、中間 state (-State、distributed aggregation、WITH ROLLUP/WITH CUBE) を生成した際に発生していたクラッシュを修正しました。結合後の function に誤った state variant の名前が付けられていたため、シリアライズされたAggregateFunctiontype が往復変換時に互換性のないインメモリレイアウトへ再解決されていました。#110930 (Groene AI).- schema evolution によって名前変更された Iceberg のカラムに対する
PREWHERE(および行レベルポリシー) が、古い data files では暗黙に0行を返してしまう不具合を修正しました。このようなクエリは今後、WHEREと同じ正しい行を返します。#110941 (Groene AI). - 複数の距離が同点になった場合に、
vector_search_with_rescoring = 1を指定したベクトル検索クエリで遅延マテリアライゼーションと組み合わせると発生する可能性があったLOGICAL_ERROR(LazyMaterializingTransform: Number of rows in lazy chunk N does not match number of offsets M) を修正しました。#111003 (Groene AI). - Apache Arrow Java < 19.0.0 (Apache Spark に同梱) で生成された、空のネストされた
Array/Map列を含むArrow/ArrowStreamデータの読み取りを修正しました。これらのデータは以前、offsets バッファが小さすぎるというINCORRECT_DATAエラーで拒否されていました。#111101 (Raúl Marín). - ページキャッシュ有効時に
plain_rewritableディスクで stale read が発生する問題を修正しました。#111105 (Mikhail Artemenko). Variant型 (Geometryを含む) の定数で、distributed queries および並列レプリカを使用するクエリで発生するCANNOT_CONVERT_TYPEエラーを修正しました。#111136 (Nikita Fomichev).- HDFS から大きなファイルを読み取る際、単一の read request が
hdfsPreadの 32 ビットサイズ上限 (INT_MAX) を超えると、読み取りが失敗したり不正な内容を読み込んだりする可能性がある不具合を修正しました。#98470 (Arup Chauhan). - 空の needle に対する等値比較でテキスト索引が誤って使用される問題を修正しました。#108340 (Robert Schulze).
- スケジュールされた merge を空きのない background pool に投入できない場合に、
Manualmerge selector でSYSTEM SYNC MERGESがハングする問題を修正しました。#108770 (Alexey Milovidov). - stale な
txn_version.txt.tmpファイルが data part に残っていると、ATTACH TABLE ... AS REPLICATEDによってコミット済みデータが破棄され、mutation 前の行が復活してしまう問題を修正しました。#108772 (Alexey Milovidov). - non-replicated な
MergeTreeテーブルでのALTER TABLE ... MOVE PARTITION TO TABLEにおける race condition の可能性を修正しました。この問題は、移動したパーツの commit とブロック番号の割り当てが同じ lock の下で行われていなかったため、交差する data parts が生成される可能性があるものでした。#108922 (Mikhail Artemenko). - Databricks UniForm によって書き込まれた
Icebergテーブルの読み取りを修正しました。Databricks UniForm は、退化したプレースホルダー schema (フィールドリストが空) をマニフェストファイルに書き込みます。#108945 (Konstantin Vedernikov). - パーティション化されていない
Hiveテーブルを複数スレッドで読み取る際に発生する use-after-free を修正しました。#109164 (Alexey Milovidov). logger.startup_console_log_levelが設定されている場合に、server の起動後もコンソールの log level が元に戻らない問題を修正しました。誤った configuration key から level を取得していたため、コンソールは server の lifetime を通じて引き上げられた startup level のままになっていました。#103472 をクローズします。#109858 (Garrett Thomas).plain_rewritableディスクの metadata transaction における snapshot isolation の異常を修正しました。#92055 を修正します。#110948 (Mikhail Artemenko).- ホストが明示的に
--host引数で渡されていない場合にclickhouse-client --loginで発生する abort (front() called on an empty vector) を修正しました。たとえば、ホストが--connection、設定ファイル、またはCLICKHOUSE_HOST環境変数から指定されている場合に発生していました。#103603 をクローズしました。#110279 (Christoph Wurm)。 - ラムダ引数がバッククォートで囲まれた Identifier で、その名前にドットが含まれる場合 (たとえば
__table1.) に発生する論理エラー (!part.empty()) を修正しました。以前はこのようなクエリで、release build では処理済みの例外が発生し、エラーメッセージのフォーマット中に debug build および sanitizer build ではサーバーが abort していました。#108735 (Groene AI)。 - 式で
INoperator を使うALIASカラム (別のALIASカラム経由の場合を含む) を持つ table に対するALTER TABLE ... DROP COLUMN、ALTER TABLE ... DELETE/UPDATEmutations、および lightweightDELETE FROMで発生するLOGICAL_ERROR(No set is registered for key) を修正しました。#111039 (Pedro Ferreira)。 - 非同期 INSERT と deduplication (
async_insert=1,async_insert_deduplicate=1) で発生していた、気づかれにくいデータ消失を修正しました。異なるinsert_deduplication_token値を持つ複数の async-insert エントリが、別々のパーティションに書き込まれる 1 回の flush にまとめられた際、各 token は自身の行が実際に書き込まれたパーティションだけでなく、その flush が触れたすべてのパーティションの deduplication log に登録されていました。そのため、これらの token のいずれかを再利用する後続の insert が、それまで一度も書き込んでいないパーティションに対して行われると、静かに deduplicate されて失われていました。現在は、token は自身の行が実際に書き込まれたパーティションに対してのみ登録されます。#111031 をクローズしました。#111049 (Groene AI)。 - 実験的 setting
make_distributed_plan = 1のもとで、Distributedtables または views 上のMergetable をクエリした際に発生するLOGICAL_ERROR例外 (ScatterExchangeStep should have one source shard, got 8) と、行の重複を修正しました。#107946 をクローズしました。#108401 (Groene AI)。 Nullable(Tuple(...))カラムを、複数のカラムに flattening するのではなく、単一のCSVフィールドとして serialize するようにしました。以前は、非NULL値は複数のCSVフィールドとして書き込まれる一方、NULLは単一の\Nとして書き込まれていたため、行ごとにカラム数が変わり、CSVWithNames/CSVWithNamesAndTypesヘッダーや往復変換が壊れていました。#108959 (Groene AI)。Parquetv3 reader で、フォーマットレベルの key condition がParquetfile から読み込まれないカラムを参照している場合に発生する論理エラー (KeyCondition uses PREWHERE output) を修正しました。#109267 (Groene AI)。serialize_query_plan = 1のもとで、FINALまたはSAMPLEを伴う table function の読み取り結果が誤っていた問題を修正しました。あわせて、table functions 用の aggregation hash-table statistics cache key も修正し、異なる table functions が同じ preallocation エントリを共有しないようにしました。#109847 (Azat Khuzhin)。- 完了前に失敗した
BACKUP ... TO Memory(...)の cleanup を修正しました。失敗した backup が登録されたまま残るため、その名前を再利用できませんでした。#109947 (Julia Kartseva)。 WITH FILL STEPとadd*/subtract*の日付・時刻 interval 関数における極端な interval 演算を修正しました。範囲外の差分が符号付き overflow に依存しなくなり、WITH FILLで非常に大きなYEARstep を指定した場合も、カレンダーを逆方向にたどって停止してしまうことがなくなりました。#110158 (Groene AI).- Azure services からの
411 Length Requiredエラーを修正しました。Poco ベースの Azure HTTP transport が、Azure Key Vault など、自身ではContent-Lengthを設定しない SDK clients 向けに、request body からContent-Lengthを設定するようになりました。#110299 (Konstantin Bogdanov). - lazy
FINALoptimization (query_plan_optimize_lazy_final、既定では無効) は、クエリが sorting-key 順に読み込まれる場合には適用されなくなりました。置き換え後の plan ではその順序が維持されず、結果が誤った順序で返る可能性があるためです。また、読み取る行数より小さいLIMITが読み取り step に直接適用される場合にも適用されなくなりました。この場合、必須の set 構築パスによって早期終了の効果が失われるためです。#110576 (Nikolai Kochetov). readWKTとreadWKTPointがPOINT EMPTYに対して、未初期化の座標 (scalar) や前の行の古い座標 (vectorized) を返していた問題を修正しました。ClickHousePointは空の表現を持たない固定のTuple(Float64, Float64)であるため、POINT EMPTYは今後CANNOT_PARSE_TEXTとして拒否されます。#110692 (Groene AI).- ハッシュ結合で右側カラムをマテリアライズする際の timezone 処理の誤りを修正しました。#111033 をクローズします。#111074 (Yarik Briukhovetskyi).
String(またはそれより短いFixedString) のキーや minmax スキップ索引 が、より長いFixedString定数との比較で filter された場合に、count()の結果が誤りになり、行が欠落する問題を修正しました。例:toFixedString('abc', 257) = string_col。プライマリキー と minmax pruning が NUL 埋めされた定数から range を構築してしまい、一致する granules を誤ってスキップしていました。#111106 (Groene AI).- Asynchronous な
Nativeフォーマット inserts を修正し、ALTER ... MODIFY COLUMNの後で互換性がなくなった 1 つのバッファ済みエントリが原因で、バッチ全体が失敗することがないようにしました。#111064 をクローズします。#111108 (Mikhail f. Shiryaev). - 別種のオブジェクトに対する dictionary の
CREATE OR REPLACEを修正しました。replace がすでに committed された後にCANNOT_DETACH_DICTIONARY_AS_TABLEで失敗し、孤立した_tmp_replace_*table が残る問題がありました。#111142 (Nikolay Degterinsky). Joinengine table に対するANYjoin で、右側カラムへのWHEREfilter によりクエリ planner がその join をSEMIまたはANTIに Rewrite できる場合に、INCOMPATIBLE_TYPE_OF_JOINが発生する問題を修正しました。Joinengine table では宣言された strictness が固定で変更できないため、そのような table に対してはこの変換を行わないようになりました。#111362 (Groene AI).- 入力データの parse 結果が 0 行になったとき (たとえば空の JSON document や feature を持たない GeoJSON
FeatureCollectionなど) に、formattable function がカラムを返さない問題を修正しました。NOT_FOUND_COLUMN_IN_BLOCKを投げる代わりに、正しいカラムを持つ空の結果を返すようになりました。#111390 をクローズします。#111428 (Groene AI).
ビルド/テスト/パッケージングの改善
- Sanitizer buildで、サニタイザレポートがグローバルバッファ
sanitizer_reportに取り込まれるようになり、コアダンプアナライザがそれをコアダンプから読み取れるようになりました。#109333 (Miсhael Stetsyuk). - vendored binariesを使う代わりに、
muslをソースからbuildするようになりました。#97452 (Konstantin Bogdanov). - LLVM-libc の SIMD
memcmp/memcpy/memmove/memset/bcmp/memmem実装を使用するようになりました。#107566 (Konstantin Bogdanov). あわせて、AVX-512 搭載マシンで-O0Debug build (-DDEBUG_O_LEVEL=0) 時に発生するmemmoveのサイレント破損を修正しました。#110904 (Konstantin Bogdanov). - コードベースおよび同梱のサードパーティライブラリ全体から、
curlライブラリの使用を削除しました。#108296 (Konstantin Bogdanov). mariadb-connector-cを 3.4.9 に更新しました。#108328 (Konstantin Bogdanov).libsshを 0.12.0 に更新しました。#108329 (Konstantin Bogdanov).- macOS で transaction
COMMIT時にハングする問題を修正しました。#108375 (Raúl Marín). - object file 内の DWARF デバッグセクションを圧縮する (
-gz)COMPRESS_DEBUG_SECTIONSCMake オプションを追加しました。これは compiler が対応している環境では自動的に有効になり、Debug build のディレクトリサイズを縮小します。最終的な binaries は非圧縮のままなので、runtime のスタックトレースのシンボル化には影響しません。#109306 (Murphy). また、同梱の LLVM toolchain は zlib 付きで build されるようになり、その clang が-gz=zlibをサポートするようになりました。さらに、不足していたclang++-21の symlink も追加されました。#109596 (Murphy). - Debug build では、vendored Rust crates を、削減したデバッグ情報 (
debug = 1、cargo のlimitedレベル) かつインクリメンタル cache なし (REDUCE_RUST_DEBUG_INFO、デフォルトで有効) で compile するようになりました。これにより、Rust build artifact が縮小され (クリーンbuildで約 12 → 約 7 GB) 、再build時に cargo cache が無制限に増大するのを防ぎます。完全な DWARF とインクリメンタル compile を復元するには、-DREDUCE_RUST_DEBUG_INFO=OFFを設定してください。#109471 (Murphy). - macOS で streaming distributed query exchange と
STREAMreads をサポートしました。#109769 (Raúl Marín). libarchiveを 3.8.7 から 3.8.8 に更新しました。#109874 (Robert Schulze).c-aresを 1.34.6 から 1.34.8 に更新しました。#109905 (Robert Schulze).- CVE-2026-40355 および CVE-2026-40356 に対応するため、
krb5を更新しました。#109910 (Robert Schulze). libpngのサードパーティ依存関係を削除しました。FORMAT PNGは今後、代わりに小型の組み込み PNG エンコーダ (同梱の zlib を利用) を使用します。#110051 (Alexey Milovidov).- jemalloc の malloc zone をラップすることで、macOS 上では
operator newを経由しない生の C の割り当てもメモリトラッカーで追跡し、これらにもメモリ制限が適用されるようにしました。#110370 (Raúl Marín). clickhouse-serverおよびclickhouse-keeperの-distrolessDocker イメージは、現在はシェルを含まない本番用ステージからビルドされます。以前はデバッグステージからビルドされ、/busybox/shが含まれていました。#105677 をクローズ。#105678 (ashishch432).abseil-cppを LTS20260526.0に更新しました。#108991 (Konstantin Bogdanov).
後方互換性を持たない変更
- この変更により、
allow_experimental_query_deduplication機能が削除されました。この機能は長期間 experimental のままで、テストもなく、今後サポートされる予定もありません (初期テストは不安定だったため、#49579 で削除されました) 。 #99398 (Igor Nikonov). - XRay ベースの
SYSTEM INSTRUMENT機能では、parametersではなくargumentsを使うようになりました。具体的には、system.instrumentation.parametersカラムはargumentsにリネームされ、SYSTEM INSTRUMENT ADD ... HANDLER PARAMETERS ...構文はSYSTEM INSTRUMENT ADD ... HANDLER ARGUMENTS ...に変更されました。古いカラム名や構文を使っているクエリまたは自動化は、新しい名前を使うよう更新する必要があります。古い名前は、もうサポートされません。 #103854 (Pablo Marcos). - 設定
show_data_lake_catalogs_in_system_tablesはshow_remote_databases_in_system_tablesにリネームされ、対象範囲も拡大されました。値が 0 (デフォルト) の場合、データレイクのカタログに加えて、MySQLおよびPostgreSQLのデータベースもsystem.tables、system.columns、system.completionsから非表示になります。古い設定名はエイリアスとして維持されます。 #104416 (Pablo Marcos). - デフォルトの x86 build は、x86-64-v2 (SSE4.2) ではなく x86-64-v3 (AVX2) を対象とするようになりました。これには AVX2 をサポートする CPU (Intel Haswell 以降、AMD Excavator 以降) が必要です。お使いの CPU が AVX2 をサポートしていない場合は、通常の x86-64 を対象とする
amd64compatbuild を使用してください。 #105019 (Raúl Marín). min/maxaggregate およびminmax索引で、ネストされたDynamic/Variantを拒否するようになりました。以前は最上位レベルのDynamic/Variantしかチェックしていませんでした。 #104747 をクローズします。 #105468 (Pavel Kruglov).icebergHashとicebergBucketは、Int128、UInt128、Int256、UInt256、Decimal256の argument を明示的なエラーで拒否するようになりました。以前は、より広い値を暗黙的に切り捨て、衝突する hash を生成していました。Iceberg spec では、32/64-bit 整数と、精度 38 までの decimal に対する hash しか定義されていません。収まる値について従来の挙動を維持したい場合は、Int64またはDecimal128に cast してください。 #105866 (Raúl Marín).- CLI でのクエリ echo をきめ細かく制御できるようになりました。
--echoオプションは省略可能なブール値を受け取るようになり、対話モードと batch mode の両方で動作します。新しいオプション--echo-formattedと--echo-query-idは、それぞれ echo されたクエリを整形するかどうか、およびquery_idを表示するかどうかを制御します。--hilite/--highlightオプションは、echo されたクエリのハイライトも制御するようになりました。その副作用として、--echoはブール値オプションになったため、値を伴わない--echoの直後に置かれた位置引数のクエリはその値として扱われます。代わりに--echo --query "..."または--echo=falseを使用してください。 #106191 (Alexey Milovidov). - experimental な KQL (Kusto) 関数
array_sort_ascとarray_sort_desc、およびそれらの SQL backend であるkql_array_sort_ascとkql_array_sort_descを削除しました。これらの関数は experimental で、実装品質が低く、正確性やパーサーに関する不具合の原因にもなっていました。これらの名前を使うクエリは、今後UNKNOWN_FUNCTIONを返します。 #108101 (Groene AI). ALTER TABLE ... REPLACE PARTITION ... FROM ...は、ソーステーブルの要求されたパーティションにパーツが存在しない場合でも、宛先パーティションのデータを黙って削除しないようになりました。以前は、このようなリクエストを行うと宛先パーティションが削除され、その代わりに何も書き込まれないため、データ損失を招きやすい危険な挙動でした。現在はデフォルトでBAD_ARGUMENTSにより拒否されます。従来の黙ってクリアする挙動に戻すには、新しい設定allow_replace_partition_from_empty_source = 1を設定するか、compatibilityを26.5以下に設定してください。宛先データを明示的に削除するには、ALTER TABLE ... DROP PARTITIONを使用してください。#104939 (Groene AI).- サーバー設定
insert_deduplication_versionのデフォルトがcompatible_double_hashesからnew_unified_hashに変更されます。挿入の重複排除は、パーツ/パーティション単位ではなく、挿入ブロック全体 (insert ごと) に対して機能するようになりました。つまり、同じ insert の再試行は引き続き重複排除されますが、同一のパーツを生成する 2 つの異なる insert は相互に重複排除されなくなり、同じ行を並べ替えて insert した場合も重複排除されなくなります。従来の挙動に戻すには、insert_deduplication_version = compatible_double_hashesを設定してください。old_separate_hashesがデフォルトだったリリースから直接アップグレードするインスタンスでは、new_unified_hashを使用する前に、関連する最長の重複排除ウィンドウが経過するまで、まずcompatible_double_hashesで実行する必要があります。#107886 (Sema Checherinda).
新機能
- 一連のスナップショットリードで実装された、
MergeTreeテーブルに対する継続的クエリのサポートを追加しました。これは、汎用的なストリーミングクエリのサポートに向けた最初の一歩です。#105114 (Mikhail Artemenko). - 仮想 (what-if) スキップ索引を追加しました。
CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...を使用してセッションスコープの仮想スキップ索引を定義し、続いてEXPLAIN WHATIF SELECT ...を使用すると、マテリアライズすることなく、そのスキップ率とコストを見積もれます。定義した索引は、新しいsystem.hypothetical_indexesテーブルに表示されます。#104608 (Yarik Briukhovetskyi). clickhouse-serverに、テーブル、materialized view、リフレッシュ可能なマテリアライズドビュー、辞書、分散テーブル、ビューの間の依存関係グラフを可視化する埋め込み/schemaWeb UI を追加しました。#105276 (Nikita Mikhaylov).PNG出力フォーマットのサポートを追加し、クエリ結果を PNG 画像として直接レンダリングできるようにしました。#74691 (Maksim Dergousov).- 環境変数に基づいて、
clickhouse-clientまたはclickhouse-localを呼び出した AI コーディングエージェント (Claude Code、Cursor、Codex、Gemini CLI、Goose など) を検出する機能を追加しました。検出されたエージェントは、system.query_log、system.query_thread_log、system.processesの新しいclient_agentカラムに記録されます。#106619 (Alexey Milovidov). - 関数、テーブルエンジン、データ型、設定、フォーマットなど、システムの共通コンポーネントに埋め込まれたリファレンスドキュメントを Markdown としてレンダリングし、1 つのテーブルに集約する新しい system table
system.documentationを追加しました。#107463 (Alexey Milovidov). - GeoJSON の
FeatureCollectionドキュメントを読み込むためのGeoJSON入力フォーマットを追加しました。各 feature ごとに 1 行を生成し、id(String) 、geometry(Geometry) 、properties(Nullable(JSON)) の各カラムを持ちます。Point、LineString、MultiLineString、Polygon、MultiPolygonの geometry は、ClickHouse ネイティブのGeometry型に読み込まれます。Geometry型で表現できないGeometryCollectionとMultiPointは、デフォルトでは例外を発生させますが、input_format_geojson_unsupported_geometry_handling設定を使えばNULLとして格納することもできます。#91533 への寄与です。#98124 (Mark Needham). - SQL から直接 Mapbox Vector Tiles を提供するための関数を追加しました。
MVTEncodeGeomは geometry を slippy-map タイルのピクセル空間に投影してクリップし、MVTEncodeはグループ内の投影済み geometry を単一レイヤーのタイルのバイナリバイト列に集約し、MVTBoundingBox/MVTBoundingBoxMercatorは行をその範囲に制限するためのタイルのバウンディングボックスを返します。Point、line、polygon の geometry をサポートします。PostGIS のエイリアスST_AsMVTGeomおよびST_AsMVTでも利用できます。#106107 (Saarthak Gupta). clickhouse-localがSYSTEM START LISTENおよびSYSTEM STOP LISTENクエリをサポートするようになり、TCP 接続と HTTP 接続を受け付けるサーバーとして動作できるようになりました。#101143 (Alexey Milovidov).clickhouse-clientとclickhouse-localに、対話型のhelpコマンドを追加しました。help <name>(/help、man、/manも可) と入力すると、関数、table engine、Data type、フォーマット、setting、そのほかのコンポーネントのドキュメントが表示され、Markdown から SQL のシンタックスハイライト付きでターミナル内にレンダリングされます。語が曖昧な場合は一致する候補をすべて表示し、見つからない場合は類似する名前を提案します。#108042 (Alexey Milovidov).- Azure Data Lake Storage Gen2 への書き込みをサポートしました。#105406 (Konstantin Vedernikov).
RowBinaryWithNamesAndTypesAndDefaultsフォーマットを追加し、schema evolution への対応を強化しました。#105736 (Mark Zitnik).- 既存の
Enum型に新しい値を追加する際、現在のEnum値をすべて再指定しなくても済むように、ALTER TABLEクエリでADD ENUM VALUESを実装しました。#93830 (Ilya Golshtein). - リフレッシャブルmaterialized view が
REFRESH DEPENDS ONをサポートするようになり、時間ベースのスケジュールではなく、別の RMV のリフレッシュを契機にリフレッシュできるようになりました。 (REFRESH EVERY ... DEPENDS ONはすでに存在していましたが、この用途では信頼性に欠けていました。)CREATE MATERIALIZED VIEWのドキュメントを参照してください。#104440 (Michael Kolupaev). * LIKE '<pattern>'および* ILIKE '<pattern>'を使った、名前パターンによるカラム選択をサポートしました。これにはtable.* LIKE '<pattern>'やtable.* ILIKE '<pattern>'のような修飾形式も含まれます。LIKEはカラム名を case-sensitive に、ILIKEは case-insensitively に一致させます。#104569 (Yue Ni).LIKEpattern 内でカスタムのエスケープ文字を定義できるESCAPE構文を追加しました。これにより、%と_を wildcards ではなくリテラル文字として扱えます。#99774 (Ilya Yatsishin).materialize_projections_on_insertおよびmaterialize_projections_on_mergeMergeTreeテーブル設定を追加しました。materialize_projections_on_insert = 0の場合、INSERTでは projection parts の構築をスキップするため、多数の projections を持つテーブルで insert throughput が向上します。materialize_projections_on_merge = 1の場合、merge は元のすべてのパーツに存在しない projection を再構築するため、projections を INSERT 時ではなく merges 中に構築できます。なお、merges は引き続き、同じ projections の組み合わせを共有するパーツだけを結合します。#100993 (Christoph Wurm).- 新しい immutable な
MergeTreesettingallow_tuple_element_aggregationを追加しました。デフォルトでは無効です。有効にすると、SummingMergeTree、AggregatingMergeTree、CoalescingMergeTreeはTupleカラムを再帰的に平坦化し、merges 中に各 leaf 要素を独立して aggregation します。これは、その要素がトップレベルのカラムである場合とまったく同じで、SummingMergeTreeはその値を合計し、AggregatingMergeTreeはその aggregate-function state を merge し、CoalescingMergeTreeは最後の非 NULL 値を保持します。この setting はテーブル作成時に指定する必要があり、対応していない engine では暗黙的に無視されます。#98039 (johnjing). - 新しい関数
quantizeBFloat16ToInt8とdequantizeInt8ToBFloat16:256 レベルの Gaussian Lloyd-Max 量子化器を使って embedding の部分を 8 ビットに圧縮する scalar codec で、そこから bit-truncation によって Int4/Int2/binary codes を抽出できます。#108102 (Alexey Milovidov). - 関数
arrayTopKとarrayBottomKを追加: -arrayTopK(k, array)は大きい順に K 個の要素を返します -arrayBottomK(k, array)は小さい順に K 個の要素を返します。 #104563 (Vitaly Baranov). Icebergテーブル向けに、各テーブルの current snapshot 内の各データファイルまたは削除ファイルごとに 1 行ずつ、ファイルごとのメタデータを公開する新しい system tablesystem.iceberg_filesを追加しました。これにより #98777 をクローズします。 #104415 (Asya Shneerson).- すべてのテーブルにある
CHECKおよびASSUME制約について、制約名、種別、式を含む情報を提供するsystem.constraintsテーブルを追加しました。 #105337 (Pedro Ferreira). - 利用可能な dictionary layouts を、埋め込みドキュメント (
description,syntax,examples,introduced_in,related) とともに一覧表示する新しいsystem.dictionary_layoutsテーブルを追加しました。 #106182 (Alexey Milovidov). - 利用可能な dictionary sources を、埋め込みドキュメント (
description,syntax,examples,introduced_in,related) とともに一覧表示する新しいsystem.dictionary_sourcesテーブルを追加しました。 #106184 (Alexey Milovidov). - 利用可能な data skipping index types を、埋め込みドキュメント (
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). SYSTEM RESTART DISK <name>を実装しました。これにより、ディスクの in-memory メタデータを再読み込みし、その上にある読み取り専用レプリカテーブルのデータパーツを再スキャンするようになりました。これにより、共有plain_rewritableストレージ上のテーブルの読み取り専用レプリカは、refresh_parts_intervalを待ったりサーバーを再起動したりすることなく、別のサーバーによって書き込まれたデータを必要に応じて認識できます。 #106645 (Jordi Villar).- PostgreSQL 形式の
expr OP SOME(array)/expr OP ALL(array)(右辺がサブクエリではない形式) がサポートされ、=/<>についてはhas/NOT hasに、それ以外の比較演算子についてはarrayExists/arrayAllのラムダに書き換えられるようになりました。ANYは array form では受け付けられません。これはanyも集約関数であるためです。代わりにSOMEを使用してください。ANY/SOME/ALLの subquery form は引き続きIN/NOT INに変換されます。 #105129 (Alexey Milovidov). - 新たに 2 つの
load_balancing戦略hostname_longest_common_prefixとhostname_longest_common_suffixを追加しました。これらは、イニシエーターのホスト名と最長の共通プレフィックス (または接尾辞) を持つレプリカを優先します。これらは、ホスト名のプレフィックスまたは接尾辞にデータセンターが埋め込まれており、数値セグメントの長さが可変な場合に有用です。このような場合、既存のnearest_hostnameおよびhostname_levenshtein_distance戦略では誤ったレプリカが選ばれることがあります。 #107360 (Denny [DBA at Innervate]). - 証明書ベース認証のオブザーバビリティを向上させるため、TLS クライアント証明書の情報 (subjects、serial number、issuer、validity period) を
system.session_logテーブルに追加しました。#107679 (Alexey Milovidov). S3のロールベースアクセス向けに、オプションのexternal_id認証情報を追加しました。#106941 (Elian Gidoni).- 新しい
S3Queue設定after_processing_move_preserve_pathを追加しました。after_processing='move'およびafter_processing_move_prefixと併せて有効にすると、処理済みオブジェクトはファイル名だけにフラット化されるのではなく、宛先プレフィックス配下で完全なソースパスを保持したまま移動されます。#105354 (Asya Shneerson). - message queue エンジン (
Kafka、RabbitMQ、NATS) からアタッチされた materialized view への挿入を無効にするmessage_queue_disable_insertionサーバー設定を追加しました。read-only レプリカのシナリオで有用です。#104911 (JIaQi Tang). LOCALTIMEとLOCALTIMESTAMP(SQL 標準 / PostgreSQL 構文) を追加しました。LOCALTIMESTAMPはnow()の別名です (DateTimeを返します) 。LOCALTIMEは現在の時刻をTime値として返します。#106139 (Thomas Cabral).EXTRACT(unit FROM expr)の糖衣構文としてdate_part('unit', expr)を追加しました。標準の interval kind と PostgreSQL 独自拡張 (epoch、dow、doy、isodow、isoyear、century、decade、millennium) をすべてサポートします。#105127 (Alexey Milovidov).- timezone offset の時部分と分部分を取得する PostgreSQL 互換の
EXTRACT(TIMEZONE_HOUR FROM dt)およびEXTRACT(TIMEZONE_MINUTE FROM dt)、さらに interval から値を抽出するためのEXTRACT(<unit> FROM INTERVAL n <unit>)/date_part('<unit>', INTERVAL n <unit>)を追加しました。#106227 (Vinayak Joshi). argMinとargMaxの aggregate 別名としてmin_byとmax_byを追加しました。#105712 (Joey Yu). これらの別名はばかげています。本物のエンジニアは元の ClickHouse 名を使います。- Oracle/MySQL/Snowflake 互換のため、
regexpExtractの大文字小文字を区別しない別名としてREGEXP_SUBSTRを追加しました。#105122 (Alexey Milovidov). - PostgreSQL / SQL 標準互換のため、
currentUser()の大文字小文字を区別しない別名としてSESSION_USERを追加しました。#106081 (Takumi Hara). CREATE TABLEと同様に、ALTER TABLE ... ADD/MODIFY COLUMNで末尾のNULL/NOT NULLmodifier をサポートしました。#106150 (Takumi Hara).- h3 の
h3PolygonToCellsWithContainment関数を使って、center-based、fully-contained、overlapping の containment mode をサポートする新しい algorithm を利用できるようになりました。#104455 (Youssef Kadry). IP_ADDRESSまたはFORWARDED_IP_ADDRESSでキー化を行う際に、IPV4_PREFIX_BITS and IPV6_PREFIX_BITSフラグを追加しました。#89270 (Aditya Chopra).formatReadableTimeDeltaが、MonthおよびYear以外の型のINTERVAL式も入力として受け付けるようになりました。#64315 (Francisco J. Jurado Moreno).formatReadableSize、formatReadableDecimalSize、formatReadableQuantity関数で、オプションの精度引数を指定して小数点以下の桁数を制御できるようになりました。デフォルトは 2 で、従来の動作を維持します。#104648 (Antonio Filipovic).- 浮動小数点数のテキスト出力における小数桁数を制御する
output_format_float_precision設定を追加しました。#99721 (phulv94). - 値が整数であっても、浮動小数点数および
Decimal数値のテキストフォーマット出力で常に小数点を表示する設定output_format_always_write_decimal_point_in_float_and_decimalを追加しました。たとえば1ではなく1.を出力します。デフォルトでは無効です。#62614 (Ilya Yatsishin). - 新しい HTTP ハンドラーの設定要素
<url_prefix>と<full_url_prefix>(ベースパス配下のすべてのパスに一致し、たとえば Prometheus ハンドラーで有用) に加え、<url_regexp>、<full_url_regexp>、<headers_regexp>をサポートしました。従来の<url>regex:...</url>形式は現在廃止されています。#107492 (Vitaly Baranov). basicSTATISTICS をサポートしました。これはカラムごとの compact な統計で、該当する場合に数値の最小値/最大値、文字列の平均長、NULL の件数を格納します。#106048 (Han Fei).- ClickHouse Keeper で TTL ノードをサポートしました。
create_ttlfeature フラグで有効化できます。#100397 (Konstantin Vedernikov). - workloads 向けに memory reservation 機能を導入しました。workload scheduling のドキュメントを参照してください。#82414 (Sergei Trifonov).
実験的機能
- マルチステージの分散クエリ実行: プランナーがクエリプランを scatter / broadcast / gather / shuffle exchange で接続されたステージに分割し、そのプラン断片を worker ノードに振り分けます。ステージ間のデータは TCP 経由でストリーミングされるか、共有オブジェクトストレージ上の一時ファイルを介して受け渡されます。この仕組みにより、分散 shuffle および broadcast hash join、shuffle 集約、分散ソートがサポートされます。この機能は Experimental で、デフォルトでは無効です。#106020 (Alexander Gololobov)。Experimental な distributed query plan engine (
make_distributed_plan) では、worker ごとに異なるタスクディスパッチポートおよび streaming-exchange ポートを使用できるようになりました。これらは<remote_servers>内で、レプリカごとにstateless_worker_portとstreaming_exchange_portを使って設定します。未設定の場合は、従来の server レベルのポート (stateless_worker_client.portとdistributed_query.streaming_exchange_port) が使用されます。これにより、1 台のホスト上で複数の worker を実行できるようになります。#107885 (Alexander Gololobov). - inner joins 向けの Experimental な
dphypjoin 並べ替えアルゴリズムが、query_plan_optimize_join_order_algorithm設定のオプションとして追加されました。あわせて、join 順序探索に上限を設け、その上限を超えた場合はチェーン内の次のアルゴリズムにフォールバックするquery_plan_optimize_join_order_max_searched_plans設定も追加されました。従来の上限なし探索の動作を維持するには、これを0に設定してください。#98798 (Alexander Gololobov). - ClickHouse 内から LLM API を使って埋め込みを生成する
aiEmbed関数を追加しました。#102922 (George Larionov). - Experimental な Linux OOM canary を追加しました。これは、メインの server プロセスより先に Linux OOM killer の対象となる sacrificial child process です。
oom_canary_enableで有効にすると、アロケータキャッシュの削除、クエリのキャンセル、マージのキャンセル、およびsystem.crash_logへのイベント記録によってメモリ逼迫を軽減します。OOM への応答には、cgroup v2 のmemory.eventsに OOM-kill の記録があることが必要です。#101942 (Peng). /webterminalの Web 端末インターフェースが正式機能となり、デフォルトで有効になりました。これは新しいenable_webterminalserver 設定で制御されます。従来のallow_experimental_webterminal設定は非推奨になりましたが、後方互換性のため引き続き有効です。エンドポイントを無効にするには、enable_webterminalをfalseに設定してください。#106255 (Alexey Milovidov).- PromQL HTTP エンドポイントで、URL クエリパラメータ (
database=,table=, またはtable=db.table) による database と table の指定がサポートされるようになりました。従来の暗黙的なdefault.prometheustable へのフォールバックは廃止されました。handler config にも URL にも table が指定されていない場合、ハンドラーはThe time series table name is not setを返すようになりました。従来の動作を維持するには、<table>default.prometheus</table>を設定するか、URL でtable=...を渡してください。#107553 (Vitaly Baranov). prometheusQueryおよびprometheusQueryRangeTable functions で、PromQL のhistogram_quantile関数がサポートされました。これにより、leラベルで識別される従来の Prometheus histogram バケットに対する quantile の計算が可能になります。#103477 (Joe Smith).- テキスト索引に遅延ポスティングリスト適用モードを追加しました。
SET allow_experimental_text_index_lazy_apply = 1およびSET text_index_posting_list_apply_mode = 'lazy'で有効にすると、ポスティングリストは Roaring Bitmaps として完全に実体化されるのではなく、packed-block 粒度で必要に応じてカーソルベース方式でデコードされるため、選択的なテキスト索引クエリでのメモリ使用量と CPU 時間を削減できます。#100035 (Peng). - WebAssembly UDF 向けの AssemblyScript ABI のサポートを追加しました。AssemblyScript のコードをコンパイルし、生成された WebAssembly モジュールをローカルの ClickHouse に読み込むブラウザベースの プレイグラウンド を使えば、ローカルにツールチェーンをインストールしなくても AssemblyScript ABI を試せます。#104606 (Vladimir Cherkasov).
- オプションのプレフィックスを付けた Prometheus ハンドラーをメインの HTTP ポートにアタッチできるようにしました。#104975 (James Cunningham).
- 実験的な
MergeTree設定packed_skip_index_max_bytesを追加しました。これにより、小さなスキップ索引の substream を、part ごとに単一のskp_idx.packedアーカイブへまとめられるようになり、table に多数のスキップ索引が定義されている場合の inode 負荷を軽減できます。判定は書き込み時に substream 単位で行われ、シリアライズ後のサイズがしきい値未満の substream はアーカイブに格納され、それより大きいものは従来どおり独立したskp_idx_<name>.idx2/.mrk2layout のままになります。1 つの part 内で layout を混在させることもできます。全文索引はサポートされておらず、常にファイルごとに保持されます。デフォルトは 0 (パック無効) です。#105321 (Raúl Marín). ABI BUFFERED_V1を使用する WebAssembly UDF 向けにBuffersシリアライゼーションをサポートし、永続化される WASM UDF 関数設定としてwebassembly_udf_enable_fuelを追加しました。#105574 (Antonio Andelic).- 実験的な
use_reader_executor設定 (デフォルトではオフ) を追加しました。これにより、読み取りは従来の読み取りバッファの legacy chain ではなく、新しい pipeline ベースのReaderExecutorを経由するようになります。#106570 (Sema Checherinda). 実験的なuse_reader_executorの読み取りパス向けに、モデル化された読み取りコスト KPI (ReaderExecutorModeledCostMsPerRequestedMiB) を含むオブザーバビリティ メトリクスを追加しました。#106968 (Sema Checherinda). 実験的なuse_reader_executor読み取りパスの内部でChainedBuffersバッファを導入し、ReaderExecutorChainedBufferBytesメトリクスを追加しました。#107210 (Sema Checherinda). MergeTreesorting key における降順の sort order (例:ORDER BY (time DESC, key)) が常にサポートされるようになり、実験的設定allow_experimental_reverse_keyは不要になりました。この設定は廃止されました。#106440 (Nikita Mikhaylov).Nullable(Tuple(...))はベータになりました。デフォルトでは無効で、使用するにはenable_nullable_tuple_type = 1を設定してください。#107754 (Nihal Z. Miaji).
パフォーマンス改善
- Keeper にさまざまな変更を加え、全体として約 2 倍高速化しました (バッチ処理の改善、リーダーへのメッセージのパイプライン化、ログ追記のパイプライン化) 。 #101757 (Michael Kolupaev).
- 単純な
SELECTクエリにおけるクエリごとのオーバーヘッド (パース、解析、プランニング) を削減しました。たとえば、単一接続でのSELECT count() FROM hitsはおおよそ 50% 高速になりました。 #104513 (Raúl Marín). - 長い主キーおよび高カーディナリティな主キーに対する主キー索引解析を最適化しました。長い主キーでは、索引解析の実行時間は主キーの長さではなく、主にクエリのフィルタの複雑さ (実際に使用するキーカラム) に依存するようになりました。そのため、ソートキーを拡張しても、そのうち少数のカラムだけでフィルタするクエリに対する索引解析の追加オーバーヘッドはほぼ無視できます。高カーディナリティな主キーでは、ClickHouse はキーカラムのうち選択性の高いプレフィックスのみをメモリ内に保持し、後続のカラムは読み込まないため、索引解析は主キー全体ではなく、そのインメモリのプレフィックスだけを対象に動作するようになりました。この最適化はデフォルトで有効で、新しい設定
use_lightweight_primary_key_index_analysisで無効化できます。 #65103 をクローズします。 #91836 (Nihal Z. Miaji). - デフォルトの x86 ビルドは、x86-64-v2 (SSE4.2) ではなく x86-64-v3 (AVX2) を対象とするようになりました。これには AVX2 をサポートする CPU (Intel Haswell 以降、AMD Excavator 以降) が必要です。CPU が AVX2 をサポートしていない場合は、プレーンな x86-64 を対象とする
amd64compatビルドを使用してください。 #105019 (Raúl Marín). - 汎用の比較ソートに
ipnsortとdriftsort(安定ソート) を使用するようになりました。これらは Rust 標準ライブラリのソート実装を C++ に移植したものです。これにより、数値以外のカラムに対するORDER BYや安定ソートが高速化され、逆順にソート済みの入力での最悪ケースも解消されます。 #106650 (Alexey Milovidov). - 高カーディナリティで均等に分散したキー向けに、新しい
GROUP BY最適化を追加しました。grouping key をハッシュ化して行をスレッド間に分散し、各スレッドが互いに重ならないキー集合を merge フェーズなしで集約します。有効にするにはenable_sharding_aggregator = 1を設定してください。 #104233 (Nihal Z. Miaji). - 文字列キーの
GROUP BYクエリでハッシュテーブルのプリフェッチを有効にし、高カーディナリティな文字列集約の性能を約 8% 改善しました。 #101007 (Le Zhang). - 大きな aggregate state (たとえば
groupArray) を持つ部分的な二段階集約結果を merge する際の Peak memory usage を削減しました。merge が完了するまで各 bucket の元の state をすべて保持し続けるのではなく、merge 中に bucket ごとに段階的に解放するようにしました。 #102330 (Yuri Fedoseev). EnumDataTypeのメモリ表現を最適化しました。Enum型を含むテーブルでは、Enum部分のメモリ使用量が最大 10 倍改善される場合があります。値 (数値) から name を取得する処理時間は同等か、それ以上に高速です。name による検索はやや低速ですが、この方向のアクセスはあまり一般的ではありません。 #95668 (Ilya Yatsishin).- クエリ解析中に同じ識別子の解決が重複して行われるのを防ぐため、識別子解決のキャッシュを追加しました。 #88043 (Max Justus Spransy).
- 多数のカラムを持つテーブルに対するクエリのクエリ解析性能を改善しました。不要な場合は、カラムノードのハッシュ (ソーステーブル式全体を含む) の計算を回避します。約1200カラムのテーブルに対する、ネストした
SELECT *サブクエリの解析が、現在は約50倍高速になりました。#106957 (Dmitry Novik). - 多数または深くネストした関数呼び出しを含むクエリについて、関数解決 cache から冗長なクエリツリーのハッシュを削除し、クエリ解析を高速化しました。#107516 (Dmitry Novik).
- 多数のアクセスエンティティ (行ポリシー、ロール、クォータ、設定プロファイル) が同時に変更された際に、レプリケートされたアクセスストレージでログインやクエリ開始が長時間停止する問題を修正しました。エンティティごとの cache は、変更された各エンティティごとではなく通知バッチごとに1回だけ再計算されるようになり、アクセスロックを数分間保持し得た二乗オーダーの処理を解消しました。#107672 (Azat Khuzhin).
- probe 側の JOIN ランタイムフィルタとして、ハッシュ結合の
FixedHashMapを共有するようになりました。build 側の hash table がFixedHashMapである場合 (またはFixedHashMapに変換可能な場合) 、それがランタイムフィルタとして使われ、通常BuildRuntimeFilterStepが設定するSet/BloomFilterを置き換えます。これは新しい設定join_runtime_filter_from_fixed_hash_table(デフォルトはtrue) で制御されます。#105640 (Xiaozhe Yu). JOINの後に選択性の高いLIMIT、TopN、または別のJOINが続く場合に、selector 索引とレプリケーション索引を遅延適用するようになりました。遅延 selector 索引を有効にするためのペイロードカラム数は、設定query_plan_min_columns_for_join_lazy_indexingで制御できます (0 はこの最適化が無効であることを意味します) 。この最適化を適用するLIMITは、設定query_plan_max_limit_for_join_lazy_indexingで制御できます。#106566 (Hechem Selmi).- DP (動的計画法) による JOIN の並べ替えが、並列レプリカでも使用可能になりました。#105889 (Nikita Taranov).
- JOIN がランタイムフィルタ (デフォルトで有効な
enable_join_runtime_filters) を使用する場合のクエリプランを改善しました。JOIN 並べ替えのコストモデルが、右側の部分木にあるWindowTransform(およびその他の行保持型プランステップ) を透過して見られるようになり、統計なしにフォールバックする代わりに、基になる行数とカラムごとの NDV を使用します。#107229 (UnamedRus). - RIGHT および FULL JOIN における未結合行の出力で、バッチ化により仮想関数呼び出しを排除しました。#105679 (Hechem Selmi).
HashJoinで packedkeys32およびkeys64メソッドをサポートしました。#107202 (Nikita Taranov).Setで packedkeys32およびkeys64メソッドをサポートしました。#107564 (Nikita Taranov).- 集約における Nullable カラムの処理をさらに最適化しました。#106015 (Nikita Taranov).
LIMIT BYクエリの性能を改善しました。#103349 (Nihal Z. Miaji).LIMIT BYのカラムがORDER BYのプレフィックスである場合、Sort中に各並列ソート済みストリーム内でLIMIT BYを実行することで、ORDER BY ... LIMIT BYクエリを高速化しました。これにより、最終的なソートマージや後続のパイプライン処理を流れる行数を削減できます。この最適化は、新しい設定query_plan_push_limit_by_into_sort(デフォルトで有効) で制御されます。#104000 (Nihal Z. Miaji).<cols>がテーブルのソートキーのプレフィックスである場合、またはWHERE col = constによって先頭カラムが固定されて結果的にそうなる場合に、SELECT ... LIMIT N BY <cols>クエリを高速化しました。これを有効にすると、MergeTreeはプライマリキー順にデータを読み取り、まずストリーミングモードでLIMIT BYを適用して、ソート済みストリームごとに O(1) のメモリで大部分のデータを除外します。その後、絞り込まれたデータに対して通常のLIMIT BYを実行し、最終結果を取得します。新しい設定optimize_limit_by_in_order(デフォルトで有効) で制御されます。#105135 (Nihal Z. Miaji).- パーティション化された
MergeTreeテーブル上のLIMIT BYクエリを高速化しました。すべてのストリームを 1 つにマージしてから制限を適用する代わりに、各パーティションのストリーム内でLIMIT BYを並列に実行します。これは、パーティション式がLIMIT BYのカラムの決定論的関数であり、どのLIMIT BYグループも 2 つのパーティションにまたがらない場合に適用されます。新しい設定allow_limit_by_partitions_independently(デフォルトで有効) で制御されます。#105126 (Nihal Z. Miaji). - 冗長なキー式を削除することで
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 (Nihal Z. Miaji). - 分片化された aggregation、
grace_hashjoin の bucket 化、および並列 window パーティション化を高速化しました。chunk ごとのカラム hash を、ハードウェア CRC32C を使用するカーネルに置き換えています。#106538 (Harikrishnan Prabakaran). - x86-64-v4/v3 において、マルチターゲット自動 vectorization により、配列引数に対する
L1Distance、L2Distance、L2SquaredDistance、LinfDistance、cosineDistanceを最適化しました。非 const の配列引数については、実行時の指数を使ってstd::powを使用するLpDistanceを除き、これらすべてで compiler によって vectorized されたカーネルを利用できるようになりました。既存の AVX-512 および Sapphire Rapids のBFloat16定数引数高速パスは、L2DistanceとcosineDistanceについて維持されています。#101310 (Peng). {Norm}DistanceおよびdotProduct関数のパフォーマンスを改善しました。#106007 (Nikita Taranov).arrayNorm関数のパフォーマンスを改善しました。#106211 (Nikita Taranov).- 一部のケースで
dotProductのパフォーマンスが向上しました。#106210 (Nikita Taranov). - 配列長がベクトル化処理幅でちょうど割り切れる場合の、
Array(Float32)、Array(Float64)、Array(BFloat16)に対するL2DistanceおよびcosineDistanceの AVX-512 const-left パスの性能を改善しました。#104625 (Sergey Kuznetsov). - amd 向けの AVX-512 codegen を有効にし、
arrayDistanceの codegen も改善しました。#106505 (Nikita Taranov). QBitデータ型に対するL2DistanceTransposedおよびcosineDistanceTransposed関数の性能を改善しました。#106701 (Raufs Dunamalijevs).encrypt、decrypt、tryDecrypt、aes_encrypt_mysql、aes_decrypt_mysql関数の性能を最大で 1 桁向上させ、BoringSSL から OpenSSL 3.x への移行 (24.4) で失われた性能を回復しました。#107339 (Konstantin Bogdanov).- OpenSSL 3.x で暗黙的に行ごとに行われていた OpenSSL provider のルックアップを回避することで、
encrypt、decrypt、halfMD5関数の性能を改善しました。#99105 (Konstantin Bogdanov). - AVX-512 を使用して複数の入力を並列にハッシュ化する
SHA1の SIMD 実装を追加し、スループットを向上させました。#105459 (Joanna Hulboj). - マルチバッファ
MD5実装向けに AArch64 ASIMD/NEON バックエンドを追加しました。#105563 (Venkata Vineel ). MATERIALIZE PROJECTION実行時に projection の計算前にソース block をまとめることで、一時的な projection パーツの数と merge のオーバーヘッドを削減しました。5000 万行の table で約 3.4 倍高速化します。#100047 (Amos Bird).ORDER BYカラムに skip 索引があるMergeTreetable で、part 書き込み時の不要なカラム並べ替えを回避することでINSERTレイテンシを削減しました (traces 系ワークロードで約 17%) 。#101101 (Amos Bird).- Arrow の SIMD code path (ARM の NEON、x86 の SSE4.2/AVX2/AVX512) を有効にし、それらを使用して
BYTE_STREAM_SPLITでエンコードされた Parquet のFLOAT/DOUBLEカラムのデコードを高速化しました。#106376 (Raúl Marín). bloom_filter索引を持つLowCardinalityカラムの挿入性能を改善しました。#106410 (Michael Jarrett).- ディスクごとの thread pool を使用して、
DiskObjectStorageTransaction::copyFileで blob コピーを並列化しました。#105089 (Asya Shneerson). fileやs3などの file 系 table function でOneinput format を使用する際に、ファイルの内容を読み込まないようにしました。#105157 (Yue Ni).- 動的シンボルを export しないようにすることで、macOS における
clickhouseの起動を約 3 倍高速化しました。これにより、動的リンカーが起動のたびにそれらを処理する必要がなくなります。#107768 (Raúl Marín). - 起動時のファイルシステムキャッシュのloadingを、cache keyごとの冗長なディレクトリopenを避けることで高速化しました。#107414 (Alexey Milovidov).
- 起動時のファイルシステムキャッシュのloadingを、ディレクトリ一覧取得の完了後に一覧取得用スレッドでもcacheメタデータを読み込めるようにし、スレッドの半分がidleのままにならないようにすることで高速化しました。#107416 (Alexey Milovidov).
- 同梱のWasmEdgeライブラリを更新し、起動のたびにグローバル初期化子でランダムなhashシークレットを生成しなくなったことで、
clickhouseプロセスの起動overheadを削減しました。#107869 (Raúl Marín). MergeTreeの主キーとスキップ索引で、ifNullやcoalesceが条件を包んでいるfilter、たとえばifNull(key = 0, 0)やcoalesce(key = 0, 0)でもgranuleを刈り込めるようになりました。こうしたpredicateは、NULLになり得る比較を確定的なブール値に変換するためにクエリジェネレータが出力することが多いものの、従来は索引解析から見て不透明だったため、granuleをスキップできませんでした。これは既存のallow_key_condition_coalesce_rewrite設定 (デフォルトで有効) を拡張するものです。#106264をクローズします。#106272 (Andy Zhao).DateTime64型に対するスキップ索引の評価で、26.6ではCPU使用量が低減されるはずです。#107707 (Shankar Iyer).- まれなtokenの処理を最適化し、複数token検索におけるテキスト索引解析の性能を向上しました。#98226 (Anton Popov).
- テキスト索引のposting list圧縮segmentにcacheを使用するようにしました。#106299 (Anton Popov).
- テーブルの大きな連続範囲を選択するクエリに対する汎用排除検索の性能を向上しました。#93813 (Michael Jarrett).
- 同じendpointとbucketを持つ
S3clientsでcacheを共有し、重複したリージョンdiscoveryを回避するようにしました。#92482をクローズします。#96802 (Andrey Zvonov). - クエリに
has(<constant array>, <expr>)が含まれている場合、可能であればアナライザはそのノードを、より高速なin実装を使う形にtransformします。#97341 (Shankar Iyer). ThreadPoolで新しいjobがscheduleされたとき、任意のワーカースレッドではなく、直近でidleになったワーカースレッド (LIFO) を起こすようにしました。これにより、スレッドごとのアロケータcacheに起因するメモリ断片化を低減します。jobの処理順序は変わりません。#100177 (Alexey Milovidov).- 近似ランタイムフィルタとbloom filter indexesの性能を向上しました。#100201 (Christoph Viebig).
ASOF JOINでparallel_hashjoin algorithmを使えるようにし、異なる等価キー値ごとにbuildを並列化できるようにしました。従来、ASOFは無条件でparallel_hashの対象外でした。#105375 (Greg Maher).- 結果が空になることが分かっている空の入力がある場合、
INTERSECTおよびEXCEPTクエリで無制限の入力を読み込まないようにしました。#105393 (Yue Ni). - 各種
MemoryTrackerブロッカーにconstinitを追加しました。#105490 (Azat Khuzhin). - 範囲チェック時の
rb_maxの繰り返し呼び出しを回避することで、UInt64以外のgroupBitmap状態に対するbitmapContainsの性能を改善しました。#105960 (Yue Ni). - 単一の Dictionary を参照する
LowCardinalityカラムで、不連続なクエリを高速化しました。#103662 (Ivan Babrou). - ブロックが 1 行 בלבדの場合の
HashJoinの probe に高速パスを追加しました。#106008 (Nikita Taranov). SELECT ... FROM view(SELECT ... FROM remote(...)) WHERE ...のようなクエリの predicates が、リモートシャードに送信されるクエリに pushdown されるようになりました。最適化allow_push_predicate_ast_for_distributed_subqueriesでは、table function のケースが考慮されていませんでした。#105986 (Nikolai Kochetov).enable_join_transitive_predicatesをデフォルトで有効化しました。#103724 (Alexander Gololobov).- テキスト索引で関数
multiSearchAny、multiSearchAnyUTF8、multiMatchAnyをサポートしました。あわせて、関数matchのテキスト索引解析も改善し、選択肢グループを含むパターンでより多くの granule をスキップできるようになりました。#106279 (Anton Popov). - 初回の PREWHERE 選択後に導入された filter (predicate pushdown、ランタイムフィルタ、または明示的な PREWHERE とプランナーが設定した WHERE) を、
MergeTree読み取りの上に отдель отдельの Filter ステップとして残すのではなく、2 回目のオプティマイザーパスで既存の PREWHERE にマージできるようにしました。#105445 (Yarik Briukhovetskyi). QueryConditionCacheが、PREWHERE を部分的に通過する読み取りバッチ内であっても、個別に filter で除外された granule を記録するようになりました。これにより、同じ condition を持つ後続クエリで再読み取りされる mark 数を削減できます。#105335 (Han Fei).- Keeper 設定
nuraft_use_bg_thread_for_snapshot_ioを追加し、デフォルトで有効にしました。これにより、NuRaftは snapshot オブジェクトを Raft のワーカースレッドではなくバックグラウンドスレッドで読み込むようになります。#106285 (Antonio Andelic). KeeperMemoryStorageを使用する ClickHouse Keeper で、受信した snapshot の適用時におけるピークメモリ使用量を削減しました。#105851 (Antonio Andelic).- LLVM/JIT の割り当てを専用の jemalloc アリーナに振り分けるようにしました。これにより、長寿命の JIT 管理用データと短命なクエリ割り当てが混在することで発生する RSS の断片化を軽減します。オブザーバビリティ向けに、新しい非同期メトリクス
jemalloc.jit_arena.active_bytes、jemalloc.jit_arena.dirty_bytes、CompiledExpressionCacheBytesMax、CompiledExpressionCacheCountMaxも追加しました。SYSTEM DROP COMPILED EXPRESSION CACHEは、基盤となる CHJIT インスタンスも破棄し、JIT アリーナをパージするようになりました。#104113 (Raúl Marín). - ネイティブ V3 リーダーで
Parquetから疎な辞書エンコード済みNullable(String)カラムを読み取る際に発生していた、過剰な memory reservation を修正しました。#102805 (Francisco). - 暗号化ディスク上で
CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)が、データをハードリンクせずコピーしてしまう問題を修正しました。 #106731 (Nikita Mikhaylov). - クエリプランオプティマイザにおけるカーディナリティ推定を改善しました。決定論的な単一引数関数 (例:
toYear(date)) によって生成されるカラムは、統計情報がないまま扱われるのではなく、引数の異なる値の数を上限として引き継ぐようになり、join の並べ替え精度が向上しました。 #107757 (Alexander Gololobov). - 高ログレート時の非同期ログの CPU オーバーヘッドを削減しました。各メッセージごとではなく、キューが空から非空に遷移したときにのみログ consumer に通知するようにしました。 #107352 (Nikita Mikhaylov).
- より多くの場面で、クエリ実行中の重複計算を削減しました。 #106113 (Yarik Briukhovetskyi).
- recursive CTE の結果処理を並列化しました。大規模な
WITH RECURSIVEの結果に対するGROUP BYなどの操作が、単一スレッドに制限されなくなりました。 #107694 (Alexey Milovidov). - ARM では NEON SIMD パス、x86 ではより広い AVX2 kernel を追加し、大文字小文字を区別しない substring 検索 (
positionCaseInsensitiveUTF8,ILIKE,multiSearchAnyCaseInsensitiveUTF8などの関連関数) の性能を改善しました。 #107882 (Raúl Marín). FPC浮動小数点 codec で、ARM において約 16% 発生していたスループット低下を修正しました。この問題は、predictor table がVectorWithMemoryTrackingを使用するようになった際に発生したものです。 #108182 (Groene AI).
改善
- バックグラウンドの
MemoryWorkerが、現在のメモリ使用量とカーネルが利用可能として報告するメモリ量に基づき、サーバーの hard memory limit を定期的に更新するようになりました。これにより、ClickHouse は同じホスト上で動作するほかのプロセスのための余裕を確保できます。計算式は(resident memory + system MemAvailable) * max_server_memory_usage_to_ram_ratioです。同じ server settingmax_server_memory_usage_to_ram_ratioで、起動時の上限と動的調整の両方を制御します。両方を無効にするには0に設定してください。静的な起動時/再読み込み時の上限のみ (以前のバージョンの動作) を維持するには、新しい server settingmemory_worker_dynamic_hard_limitを0に設定してください。#104964 (Alexey Milovidov). PostgreSQLプロトコルで C# PostgreSQL client をサポートしました。これにより #18611 が解決されます。#80785 (Konstantin Vedernikov).- mutations でアナライザを使用するようになりました。#98884 (Nikolai Kochetov).
- CLI でのクエリのエコー出力をきめ細かく制御できるようになりました。
--echoオプションはオプションのブール値を受け取るようになり、対話モードと batch mode の両方で動作します。新しいオプション--echo-formattedと--echo-query-idは、それぞれエコーされたクエリを整形するかどうか、およびquery_idを表示するかどうかを制御します。--hilite/--highlightオプションは、エコーされたクエリのハイライトも制御するようになりました。その副作用として、--echoはブール値オプションになったため、値を指定しない--echoの直後に位置引数のクエリを置くと、その値として扱われます。代わりに--echo --query "..."または--echo=falseを使用してください。#106191 (Alexey Milovidov). - データレイクのカタログで、schema evolution と同時実行の整合性チェックを併用できるようになりました。#106102 (Konstantin Vedernikov).
- datalake table engines でキャッシュディスクを利用できるようになりました。#102017 (RinChanNOW).
catalog_type = 'onelake'を使用するDataLakeCatalogdatabase での table データ読み取りを修正し、デフォルトで OneLake Blob endpoint (.blob.fabric.microsoft.com) を使用するようにしました。以前の DFS endpoint (.dfs.fabric.microsoft.com) の動作を維持するには、onelake_use_blob_endpoint = falseを設定してください。#106843 (Konstantin Vedernikov).S3(Azure)Queuesettingpersistent_processing_node_ttl_secondsのデフォルト値を1 hourから6 hoursに変更しました (service の異常再起動などに伴うクリーンアップ時間を表します) 。以前のデフォルトは処理ノードの ttl としては問題ありませんでしたが、bucket lock の ttl にも使われており、こちらはより長時間保持される場合があるため、1 時間では不十分でした。#106838 (Kseniia Sumarokova).Icebergメタデータキャッシュのデフォルトサイズを 1 GB から 128 MB に縮小しました。#106492 (Konstantin Vedernikov).S3Queuestreaming task のquery_idを、依存先の table insert に伝播するようにしました。#106494 (Christoph Wurm).DataLakeCatalog経由で table をクエリする際に、system.query_logのused_storagesに storage engine 名を設定するようになりました。#100706 (Melvyn Peignon).- Iceberg の snapshots がどの
'operation'とどの'summary'を持つかを確認できるようになりました。テストやデバッグに役立ちます。#106246 (Den Kalantaevskii). - 最終的な
S3の multipart upload リクエストを task tracker 経由で非同期に完了するようにし、finalize で直列に実行する代わりに、最後の part の upload と並行して処理できるようにしました。#105487 (Asya Shneerson). - テキスト索引のデフォルトパラメータを制御するための 4 つの新しい
MergeTreeテーブル設定text_index_dictionary_block_size、text_index_dictionary_block_frontcoding_compression、text_index_posting_list_block_size、text_index_posting_list_codecを追加しました。これらの設定により、各索引定義で毎回パラメータを指定しなくても、テーブルレベルでテキスト索引の動作を調整できます。明示的に指定した索引ごとの argument は引き続き優先されます。#100626 (Anton Popov). - projections が、
index_granularityだけでなく、追加のMergeTree設定 (圧縮、part フォーマット、シリアライゼーション) も上書きできるようにしました。これには、許可された設定の allow-list と検証が含まれます。#101170 (Amos Bird). - projection の merge の進捗を公開するため、
system.mergesにcurrent_projection、current_projection_progress、projections_completed、projections_remainingカラムを追加しました。#102611 (Amos Bird). - 主キーカラムに対する
INサブクエリ付きのPREWHEREで、granule pruning に主キー索引が使われず、関連する granule だけでなく full table scan が発生していた問題を修正しました。#102570 (Nikita Mikhaylov). - 関数
h3PolygonToCellsが、MultiPolygonのすべての Polygon に対して最大配列サイズを適用し、基盤となる H3 ライブラリの戻りコードを検証し、空の結果を黙って返す代わりにMultiLineStringargument を拒否するようになりました。#106399 (Raúl Marín). - ローカルの ClickHouse Keeper snapshots に関する情報を持つ、keeper 専用の新しい
system.keeper_snapshotsテーブルを追加しました。#105571 (Miсhael Stetsyuk). - ローカルの ClickHouse Keeper changelog (Raft log) ファイルに関する情報を持つ、keeper 専用の新しい
system.keeper_changelogsテーブルを追加しました。#105617 (Miсhael Stetsyuk). - keeper 専用の
system.keeper_clusterテーブルを追加しました。現在の Keeper から見た各 Raft クラスター member につき 1 行を持ちます。#105646 (Miсhael Stetsyuk). - watches 向けに、Keeper の profile event (server-side + client-side) をさらに追加しました。#97703 をクローズします。#105336 (Konstantin Vedernikov).
NuRaftの未コミット log entry の受け入れ制限と append-entries の backward-probe throttling 向けの Keepercoordination_settingsを追加しました。#106108 (Antonio Andelic).mysqltable function、MySQLtable engine、MySQLデータベースエンジン、dictionarySOURCE(MYSQL)、および named collections にenable_compression設定を追加しました。有効にすると、ClickHouse は connection 上で転送されるすべてのデータに対して MySQL プロトコルレベルの圧縮をネゴシエートします。#103229 (Bernard Lim).- PostgreSQL ワイヤプロトコル経由で実行されるクエリのキャンセル遅延を短縮しました。
KILL QUERYは、chunk 全体がクライアントに送信されるのを待たず、単一の chunk 内で出力のシリアライゼーションを中断できるようになりました。#106535 (Roman Vasin). - MySQL ワイヤプロトコル経由で実行されるクエリのキャンセル遅延を短縮しました。
KILL QUERYは、chunk 全体がクライアントに送信されるのを待たず、単一の chunk 内で出力のシリアライゼーションを中断できるようになりました。#107228 (Roman Vasin). - MySQL ハンドシェイクにおける
auth_responseの長さの読み取りを修正しました。長さバイト>= 128が signedcharとして読み取られていたため、複数 GB の値として解釈されていました。#107384 (uwezkhan). MaterializedPostgreSQLで、精度が 76 を超える PostgreSQL のnumeric(p, 0)列 (たとえば 256 ビット整数に使われるnumeric(78, 0)) を、“Precision too big” で失敗させる代わりに、ClickHouse のInt256にマッピングするようになりました。Int256に収まらない値は、明確なエラーで拒否されます。#107431 (Alexey Milovidov).- TCP connection の確立に失敗した場合、クライアントに例外を送信するようにしました。#107317 (Nikolai Kochetov).
AvroのFixedフィールドを、8 ビット / 16 ビット / 32 ビット / 64 ビット整数バリアントに挿入できるようになりました。#98139 (Patrick Pichler).AvroConfluentフォーマットで、一時的な障害 (転送タイムアウト、接続拒否、DNS エラー、HTTP5xx/408/429) が発生した場合、最初のネットワーク障害で INSERT を中止するのではなく、Confluent スキーマレジストリ HTTP クライアントを指数バックオフ付きで再試行するようになりました。新しい設定format_avro_schema_registry_max_retries(デフォルト5) およびformat_avro_schema_registry_retry_initial_backoff_ms(デフォルト100) でこのポリシーを制御します。スキーマ検証エラー (HTTP409、不正な Avro JSON) は引き続き致命的です。#106661 (Groene AI).system.query_log.used_privilegesに、例外を送出しないisGranted経路 (checkAccessWithFilter) を含む、付与済みのすべてのアクセスチェックの privileges を記録するようになりました。従来は、例外を送出するエントリポイント (checkAccess/checkGrantOption) 経由でチェックされた privileges のみが記録されていたため、file/s3/azure/urltable functions を使うDESCRIBE、CREATE TABLE AS、および同様のクエリでは、READ ON FILE/READ ON S3/READ ON AZURE/READ ON URLが監査ログに記録されませんでした。アクセス制御の適用自体に変更はありません。#104693 (Alexey Bakharew).- MergeTree ファミリーのテーブルに格納されたデータの総非圧縮サイズを報告する非同期メトリクス
TotalUncompressedBytesOfMergeTreeTablesとTotalUncompressedBytesOfMergeTreeTablesSystemを追加しました。#106364 (Alexey Milovidov). - サーバー全体のメモリ制限に達したタイミングを運用担当者が監視できるよう、プロファイルイベント
GlobalMemoryLimitExceededを追加しました。#106466 (Sacheendra Talluri). executable_poolUDF 向けにExecutableUserDefinedFunction*ProfileEventsカウンターを追加しました。呼び出しごとの実行回数、実時間とプール待機時間、子プロセスの CPU 使用量とピークメモリ、stdin/stdout のバイト数がsystem.query_log.ProfileEventsで確認できるようになりました。#105010 (Xu Jia) #105618 (Ilya Andreev).- 非同期メトリクス
ExecutableUserDefinedFunctionMemoryResidentBytesおよびExecutableUserDefinedFunctionProcessesを追加しました。これらは、executableおよびexecutable_pooluser-defined function について、子孫プロセスや待機中のプールワーカーを含む常駐メモリ (VmRSS) と稼働中プロセス数を報告します。#107300 (Hanzi Jiang). - Linux 専用の 3 つの async メトリクス
MemoryThreadStacksCount、MemoryThreadStacksVirtual、MemoryThreadStacksResidentを追加しました。これらは pthread スタックメモリを、その他の匿名メモリとは分けて報告します。asynchronous_metrics_enable_heavy_metricsで有効になります。Linux 5.17+ (prctl(PR_SET_VMA_ANON_NAME)) と、読み取り可能な/proc/self/smapsが必要です。これらの条件を満たさない場合、メトリクスは出力されず、その制限はsystem.warningsに記録されます。#106230 (Raúl Marín). - macOS で
MemoryThreadStacks*非同期メトリクス (スレッドスタックの resident/virtual サイズと本数) を利用できるようにしました。#107752 (Raúl Marín). - テーブルエンジンに埋め込みドキュメントが追加され、新しい
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). clickhouse-client、clickhouse-local、および埋め込み client に--chimeコマンドラインオプションを追加しました。クエリの実行時間が少なくとも N 秒に達したあとで終了すると (成功時・エラー時を問いません) 、client は ASCII のBEL制御文字 (\x07) を stderr に書き込みます。音を鳴らすか画面を点滅させるかは、ユーザー設定に応じて端末が判断します。既定では 5 秒のしきい値で有効です。任意のしきい値を設定するには--chime Nを、無効にするには--chime 0を指定します。#92718 をクローズしました。#104545 (Groene AI).clickhouse-clientでは、端末が bracketed paste をサポートしていない場合でも、貼り付けた複数行クエリ内の改行が、行ごとに継続プロンプトへ切り替わるのではなく、同じ編集バッファにまとめられるようになりました。貼り付けたクエリは 1 つのプロンプト配下に保持され、矢印キーで行をまたいで移動できます。これは一般的な TTY のバッファ付き貼り付け動作に依存する、ベストエフォートの改善です。#104299 (Alexey Milovidov). また、構文ハイライトが無効 (--highlight 0) な場合でも動作するようになりました。#106665 (Alexey Milovidov).clickhouse-client/clickhouse-localに、MySQL 形式の runtime pager 制御を追加しました。#105706 (Azat Khuzhin).clickhouse-clientが UTF-8 以外の端末にも対応するようになりました。端末の文字エンコーディングが UTF-8 でない場合 (たとえばLANG=Cのとき) 、Prettyフォーマットは、端末表示を乱すおそれのある Unicode の罫線文字を出力する代わりに、ASCII のグリッド罫線にフォールバックします。#106213 (Alexey Milovidov).clickhouse-clientのHelloパケット処理で、server から渡される表示用文字列 (server 名、time zone、表示名、password ルールの pattern とメッセージ) をサニタイズし、悪意のある server が client にそのまま表示されるバイト列を注入できないようにしました。あわせて、無制限な割り当てを防ぐため、これらのサイズにも上限を設けました。#105243 (Raúl Marín).- Web UI では、クエリが
FORMAT PNGのような image 出力フォーマットを使用している場合、生データ bytes を table として表示する代わりに、結果を image として表示するようになりました。#107638 (Alexey Milovidov). output_format_pretty_use_nbsp_for_paddingsetting を追加しました。output_format_pretty_grid_charsetがUTF-8の場合、table スタイルのPrettyフォーマットで table レイアウトの padding をU+00A0NO-BREAK SPACE として描画します。これにより、通常のスペースを詰めてしまうツールでも、コピーしたPretty出力で table の位置合わせを維持しやすくなります。この setting はデフォルトで無効で、ASCIIcharset の出力では通常のスペースを使用します。#103559 (Ashrith Bandla).- universal install script が、Linux と macOS で
clickhousectlを~/.local/binにchctlの symlink とともにインストールするようになりました。スキップするにはCLICKHOUSE_ONLY=1を設定してください。#105399 (Alasdair Brown). curl https://clickhouse.com/ | shで ClickHouse をインストールする際、現在のディレクトリにすでにclickhousebinary が存在すると断続的に発生していた、誤検知のSyntax error: Unterminated quoted stringを修正しました。#106417 (Alexey Milovidov).- ウェブターミナルが開いているときに
play.htmlページの左パネルの高さを修正し、下部の端末トグルボタンが見えたままになるようにしました。#105087 (Alexey Milovidov). - Web UI で、実行後に唯一のクエリが選択されないようにしました。#105711 (Joey Yu).
- Web SQL UI で、クエリの高さが現在の editor の高さを最大 30% 上回る場合に、クエリエディタを展開するようになりました。#105713 (Joey Yu).
- Web UI では、左パネルを展開した際に下部メニューのアイコン (ウェブターミナルと GitHub) を横並びにし、データベースとテーブルの一覧により多くの縦方向のスペースを確保するようにしました。 #106427 (Alexey Milovidov).
- Web UI (
play.html) で、Escapeキーを押すと現在選択中の結果テーブルのセルが非アクティブになるようになりました。 #107777 (Alexey Milovidov). - Web SQL UI (Play) のデータベースパネルを改善しました。データベースアイコンのツールチップ、パネルを非表示にするボタン、データベース名/テーブル名全体をクリック可能にする変更、およびスクロールバー表示時にパネル幅がずれる問題の修正が含まれます。 #108013 (Alexey Milovidov).
- 任意の割り当てで
MEMORY_LIMIT_EXCEEDEDを送出できるようにするサーバー設定 (min_allocation_size_to_throw_on_memory_limit) を追加しました。これにより OOM の防止に役立つはずです。 #105265 (Azat Khuzhin). - SSH で
NONE認証を許可しました (no_passwordユーザーにパスワードを求めないようにします) 。 #105476 (Azat Khuzhin). clickhouse suで、権限を落とす前に補助グループの一覧をリセットするようにし、/bin/suおよびsudoの動作に合わせました。これまでは、権限を落としたプロセスが呼び出し元の補助グループを継承していました。 #105247 (Raúl Marín).- 数値判定関数 (
isFinite,isNaN) にBFloat16のサポートを追加しました。 #105391 (Mohamed Hussain S). - polygon dictionaries (
polygon_index_cell,polygon_index_each) のメモリ使用量を削減し、system.dictionaries.bytes_allocatedがそれらの構築するルックアップ索引を正しく反映するようにしました。 #105431 (Raúl Marín). - パーティション割り当て後も短いポーリング間隔を使い続けていた Kafka table engine のコンシューマーを修正し、設定された
kafka_poll_timeout_msに戻るようにしました。これにより、過剰な空ポーリング、より小さい挿入パート、rebalance 後の余分な merge オーバーヘッドを回避します。 #100431 (sugaf1204). - クエリプランで未使用カラムを削除する際、カラムを名前ではなく位置で識別するようにしました。これにより、重複したカラム名が存在する場合でも未使用カラムの削除が可能になります。 #100586 (János Benjamin Antal).
- レプリケーション対応エンジンに対して
table_readonlyを使おうとした場合に、ClickHouse が適切な例外を送出するようになりました。また、この設定に関連する DDLクエリ (およびDatabaseReplicated) の例外処理も改善されています。 #100950 (alesapin).OPTIMIZE TABLE ... ON CLUSTERやその他の DDL は、ターゲットテーブルにtable_readonly = 1が設定されていても、もうハングしません。この設定は新しい専用のエラーコードTABLE_IS_PERMANENTLY_READ_ONLYを送出するようになり、DDLWorkerはこれを再試行不可として扱います (ReplicatedMergeTreeの一時的な ZooKeeper 切断時に発生する一過性のTABLE_IS_READ_ONLYとは区別されます) 。また、table_readonly設定はReplicatedMergeTreeに対して、作成時にもALTER MODIFY SETTING経由でも、明示的に拒否されるようになりました。 #97652 の後続対応です。 #105109 (Alexey Milovidov). - ターゲットテーブルの置き換え後 (たとえば
EXCHANGE TABLESや削除して再作成した場合) にUNKNOWN_TABLEで失敗することがあったリフレッシャブルmaterialized view の refresh を修正しました。refresh は古い UUID に依存せず、名前でターゲットテーブルを解決するようになりました。#102724 (Seva Potapov). - 設定
wait_for_part_commit_in_dependent_materialized_views(デフォルトはfalse) を追加しました。materialized view のSELECTが自身のソーステーブルを再度読み込む場合 (たとえばソースに対するINNER JOINを介する場合) 、依存 view の実行時点では挿入中の part がまだ commit されていないため、カスケード処理でその時点の行を取りこぼすことがありました。この設定を有効にすると、依存 view が実行される前に part を commit するため、処理中の行も参照できるようになりますが、その代償として挿入の並列度は低下します。#105943 (Elmi Ahmadov). tryDeserializeで致命的なエラー (たとえばMEMORY_LIMIT_EXCEEDED) を握りつぶさないようにしました。#106808 (Azat Khuzhin).InverseDictionaryLookupPassで、CREATE TEMPORARY TABLEの権限を遅延チェックするようにしました。#107098 (Azat Khuzhin).serialize_query_plan = 1が設定され、定数 argument を持つラムダ (たとえばarrayMap(t -> t.2, ...)) を含む distributed queries で発生していたILLEGAL_TYPE_OF_ARGUMENTエラーを修正しました。ActionsDAGのINPUTノードにある定数カラムが、クエリプランのシリアライゼーション時にも保持されるようになりました。#107124 (Alexey Milovidov).contingency、cramersV、cramersVBiasCorrected、theilsUの aggregate functions の状態のデシリアライゼーションで、保存されたカウントが整合性のある contingency table を構成していることを検証するようになり、そうでない場合はCORRUPTED_DATA例外を送出します。#106899 をクローズしました。#107185 (Nihal Z. Miaji).arrow::Statusでラップされた例外について、元の error codes を保持するようにしました。#107267 (Azat Khuzhin).- 静的な server configuration (
users.xml) で定義された quota でkeyed_by_normalized_query_hashをサポートし、既存のCREATE QUOTA ... KEYED BY normalized_query_hashDDL syntax と整合するようにしました。#107654 (Alexey Milovidov). - 互換性設定は廃止された設定を適用しなくなったため、それらを変更済みとしてマークしたり、廃止された設定に関する警告を出したりしなくなりました。#107737 (Maxim Orlovsky).
- 非同期 INSERT では、
trace/debugレベルでquery_idの完全な一覧をログ出力しなくなりました。これは 26.2 以降、非同期 INSERT トラフィックの多い services でtext_logを肥大化させる可能性があったためです。詳細な行は現在testレベルで出力されます。#107852 (Sema Checherinda). - ファイルシステムキャッシュの改善: 無効化された priority エントリが
KeyMetadataを pin しないようにしました。#106387 のフォローアップです。#107903 (Kseniia Sumarokova). FileCacheのメトリクスを改善しました。#106116 (Kseniia Sumarokova).- スタックトレースが実際には空の場合、例外メッセージで “Stack trace (when copying this message, always include the lines below):” という前置きを表示しないようにしました。 #106524 (Alexey Milovidov).
- 非常に大きなオフセットに対するファイルシステムキャッシュの境界アラインメント計算時に、
roundUpToMultipleで発生しうる overflow を修正しました。 #92579 (Bharat Nallan). EXPLAIN SYNTAXが、explain 出力内で演算子を一貫して関数呼び出しとして整形するようになりました (たとえば1 + 2ではなくplus(1, 2)) 。 #94681 (Mohamed Abdelhalim ).- error メッセージ内の table 名候補を改善しました。同じ名前そのものは候補に出さなくなり、候補に database 名も含めるようになりました (例: “Maybe you meant
other_db.my_table?”) 。 #95116 (Mathuranath Metivier). FROMclause のないクエリで未解決の Identifier がある場合の error メッセージを改善し、FROMclause を追加するよう案内するようにしました。 #101769 (Yash ).- 繰り返される processor chain を compact に表示する
EXPLAIN PIPELINEオプションを追加しました。 #104662 (Yue Ni). - 構文 error メッセージの構築時に発生していた heap-buffer-overflow の読み取り (
parseQuery.cpp経由のUTF8::computeWidthImpl) を修正しました。これは、パーサーが最初のセミコロンまたはストリーム終端トークンより前までバックトラックした際に発生していました。release builds では近傍の heap メモリのバイト列が表示される error に混入し、ASan builds では異常終了していました。 #105086 (Groene AI). - 互換性設定
file_like_engine_default_partition_strategyで、hive パーティション方式をデフォルトにしました。 #86746 (Kseniia Sumarokova). - macOS で thread stack をより大きい 8 MiB にして Linux のデフォルトに合わせ、JIT コンパイル中の stack overflow によるまれな server クラッシュを修正しました。 #107033 (Raúl Marín).
clickhouse-localの一時ストレージサイズ上限は、1 GiB にハードコードされなくなりました。デフォルトは 1 TiB に引き上げられ、max_temporary_data_on_disk_sizeサーバー設定で構成できます。 #106689 (Alexey Milovidov).clickhouse-disksにread-checksumsコマンドを追加しました。MergeTreeDataPartのchecksums.txtファイルを読み取り、人間が読みやすいタブ区切りの table として出力します。 #106901 (Asya Shneerson).clickhouse-disksにread-bitmapコマンドを追加しました。 #107834 (murphy-4o).- Chdig: セキュアな接続のために TLS を有効化しました (従来は “unknown setting
skip_verify” または “connection reset by peer” のいずれかが発生していました) 。 #105864 (Azat Khuzhin). chdigv26.5.1。 #105918 (Azat Khuzhin).chdigv26.6.1 -{asynchronous_,}metric_log、クエリパターン、ヒートマップ、ディスクに保存された logs/traces に対応しました (以前は1時間分の traces で >40GiB を使用することがありました) 。#107678 (Azat Khuzhin).- サーバー設定 (
programs/server/config.xml) でkeep_alive_timeoutが 30 に設定されるようになりました (従来は 10) 。これにより、ドキュメントおよび実装上の実際のデフォルト値と整合します。#107779 (Dan Checkoway). - サーバー設定
disk_connections_rcvbufのデフォルト値が0(kernel TCP autotuning) から204800(200 KB) に変更され、オブジェクトストレージ (S3/Azure/GCS) のディスクへの接続におけるソケットごとの TCP 受信バッファの上限が設定されました。#107859 (Sema Checherinda). PREWHEREオプティマイザは、選択性を見積もる前に同じカラム集合を参照する conjuncts をグループ化するようになりました。これにより、a > 2500 AND a < 2502のような条件は、2つの独立した predicates ではなく、1つの結合された range としてまとめて評価され、より正確に選択性を推定できます。#106337 (Han Fei).- silk fiber 対応の secure/plain socket 実装を追加しました。#107680 (Miсhael Stetsyuk).
nested関数で、文字化けしたエラーメッセージ (引数の順序が入れ替わっていた) とタイプミスを修正しました。#108031 (Alexey Milovidov).clickhouse-disksに、指定した path に sed 式をインプレースで適用するsedコマンドを追加しました。#107131 (Asya Shneerson).MaterializedPostgreSQLデータベースエンジンに、作成時設定materialized_postgresql_use_extended_date_and_time_typesを追加しました。デフォルトでは (有効時) 、PostgreSQL のdate/timestampカラムはDate32/DateTime64として推論されます。CREATE DATABASE時にこれを0に設定すると、より狭いDate/DateTime型として推論されます。#107428 (Alexey Milovidov).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
tryNサフィックスが付いたデタッチされたパーツを削除できるようにしました。#58957 (János Benjamin Antal).- 並列レプリカ実行時に、ネストされたサブクエリ内で重複する projection alias (たとえば
SELECT *, day + 365 AS day) を含むクエリで発生していたMULTIPLE_EXPRESSIONS_FOR_ALIAS例外を修正しました。#80310 (Alexey Milovidov). - セミコロンの後に comment がある形で終わるクエリに対して、
splitMultipartQueryが “Empty query” エラーを返す不具合を修正しました。#85491 (Yarik Briukhovetskyi). ARRAY JOINに関する不具合を修正しました。LowCardinalityの Numeric types を使用している場合に、Function writeSlice expects same column types for GenericArraySlice and GenericArraySink例外が発生していました (issue #57243) 。#91784 (Jimmy Aguilar Mena).- 新しいアナライザで、定数カラムを
DISTINCTおよびORDER BYと併用したLIMIT BY使用時に発生するNOT_FOUND_COLUMN_IN_BLOCK例外を修正しました。#93195 (Ashrith Bandla). data_type_default_nullable = 1で、かつテーブルをReplicateddatabase 内またはON CLUSTER経由で作成した場合に、NOT NULLカラムが暗黙的にNullableとして作成されてしまう問題を修正しました。#97572 (xiaohuanlin).- Hive Metastore との通信時に発生する TTransportException エラーに対処するため、自動リトライ機構と再接続ロジックを追加し、HiveCatalog connection の安定性を改善しました。#98471 (Dmitriy Borisenko).
nested関数 (ARRAY JOINの内部で使用) がカラム型からLowCardinalityを取り除いてしまい、出力でArray(LowCardinality(String))がArray(String)になってしまう問題を修正しました。#95582 をクローズします。#98974 (Yash ).- 並列レプリカを有効にしたクエリで
url、s3、または同様の table function を使用した際に発生する “Distributed task iterator is not initialized” 例外を修正しました。#100146 (Alexey Milovidov). - external ツール (例: Spark) によって format version が更新された Iceberg tables の読み取り時に発生する論理エラー例外を修正しました。#100407 (Alexey Milovidov).
like、ilike、notLike、notILike、match関数が、定数でない needle を伴う定数 haystack (例:'foo' LIKE pattern_column) をサポートするようになりました。これまではILLEGAL_COLUMNが発生していました。#100479 (Yash ).- view が整数カラムを
Boolカラムにマッピングしている場合に、query_plan_enable_optimizations = 0を指定したMaterializedViewクエリで返される行数が誤っていた問題を修正しました。#100692 (Maksim Moisiuk). - PREWHERE optimization が有効な状態で、ORC data files を含む Iceberg tables を読み取る際に発生する例外 (
LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it') を修正しました。#101206 (Groene AI). - RestCatalog の競合状態を修正しました。#101216 (Smita Kulkarni).
- 通常の projection を持つ table 上の VIEW から select する際に発生する
NOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#101218 (Amos Bird). - file が削除されて再作成されたときに、FileLog で古いメタデータが残る問題を修正しました。#101408 (Azat Khuzhin).
RIGHT/LEFT JOINが別の table とカンマ結合 (cross) されている場合 (例:t1 RIGHT JOIN t2 ON t1.c = t2.c, t3) に、join の並べ替えによって不一致の行が欠落してしまう問題を修正しました。以前は、クエリは outer join の結果ではなく inner join の結果を返していました。#101684 (Groene AI).EXPLAIN INSERT INTO ... SELECT ... FORMAT ...において、FORMATclause がEXPLAINの出力に適用されず、INSERTによって消費されてしまう問題を修正しました。#101772 (Yash ).- table レベルの
default_compression_codecsetting が明示的に設定されている場合に、MergeTreeパーツで誤った圧縮 codec が選択される問題を修正しました。INSERT 時、merge 中、および projection 用に書き込まれるパーツで、table レベルの setting ではなく server 全体の default codec が使われていました (完全削除 mutation によって生成される空の part も今回の修正対象に含まれます) 。#101784 (Yash ). max_bytes_per_second、max_cpusなどのワークロード設定で、負のFloat64値 (例:-100.5) を拒否するようにしました。以前は負の整数しか検証されておらず、その結果、負の浮動小数点数によって壊れた scheduler node が気付かれないまま作成される可能性がありました。#101825 をクローズします。#101842 (Groene AI).- JOIN 内で aggregation を含む VIEW が関与するクエリの実行時に発生することがあった
LOGICAL_ERROR(“Port is not connected”, code 49) を修正しました。#102574 (Jimmy Aguilar Mena). - default 以外のシリアライゼーションを持つカラムに対する mutation 後に、part のメタデータが不整合になる問題を修正しました。#102817 (Eduard Karacharov).
- mutation の実行前にメタデータを更新するよう修正し、#96806 を解消しました。#102882 (Smita Kulkarni).
- 同時実行中の INSERT があると SELECT クエリが大幅に遅くなる問題を修正しました。以前は INSERT pipeline が、実際にはほとんどの slots を使わない場合でも、クエリ開始時に
max_threadsまで CPU slots を予約していたため、同時実行中の SELECT が飢餓状態になっていました。CPU slot の割り当ては需要駆動型になり、pipeline は実際に並列化可能な作業を push するときにのみ slots をリクエストします。これは同時実行制御と、ワークロード向けのプリエンプティブ CPU scheduler の両方に適用されます。新しい server settingconcurrent_threads_lazy_allocation(default はtrue) は rollback の手段として機能します。#102928 (Seva Potapov). Nullable(Tuple(...))カラムから抽出した subcolumns の読み取り時におけるNULLの伝播を修正しました。たとえばtup Nullable(Tuple(s Nullable(String)))では、SELECT tup.sが、外側の tuple がNULLの行で garbage values ではなく正しくNULLを返すようになりました。これはNULLを表現できるすべての要素型、すなわちNullable、Dynamic、Variant、LowCardinality(Nullable(...))を対象としています。#105356 をクローズしました。#102942 (Nihal Z. Miaji).- Native format でクライアントから渡されたデータが truncated している、または不正な形式である場合に、
LOGICAL_ERRORではなくINCORRECT_DATAを送出するようにしました。#102975 (János Benjamin Antal). - ObjectStorage の読み取り処理にキャンセルチェックを追加しました。#98165 をクローズしました。#103016 (Smita Kulkarni).
- aggregate function のパラメーターのデコード時に
input_format_binary_max_type_complexityを考慮するようにしました。#102903 をクローズしました。#103026 (Pavel Kruglov). - Arrow ベースの Parquet リーダーで Geo カラムの Nullable 推論を修正しました。#101845 をクローズしました。#103032 (Pavel Kruglov).
recursiveRemoveLowCardinalityがカスタムのジオメトリ型名 (例:LineStringとRing、MultiLineStringとPolygon) を消してしまい、ジオメトリ型の誤解釈を引き起こしていた問題を修正しました。#103207 をクローズしました。#103041 (Joanna Hulboj).max_insert_block_size_bytesが0(デフォルト) の場合に、INSERTのパース中にinput_format_max_block_size_bytesが黙って無視されていた問題を修正しました。これにより、この設定は行 input formats によって生成される blocks のサイズを正しく制限するようになりました。#103068 (Kirill Kopnev).- ClickHouse が、末尾の null byte を不適切に削除していたために無効な GSSAPI tokens を断続的に生成していた問題を修正しました。#103114 (Michael Jarrett).
- short-circuit functions (
if、multiIf、and、orなど) に対するアナライザ時の定数畳み込みを修正し、静的に到達不能な分岐で解析時に例外が発生しないようにしました。たとえばWITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))は、ゼロ除算エラーで失敗するのではなく、正しく0を返すようになりました。#103157 (Peng). EXPLAIN SYNTAXがパラメーター化ビューを展開するようになりました。#103263 (Jordi Villar).INSERT INTO FUNCTION hdfs(...)経由で HDFS に Parquet (および ORC や Arrow などの trailer を持つ他のフォーマット) を書き込む際に発生していたデータ破損を修正しました。26.1 以降、WriteBufferFromHDFSはfinalize()時に作業バッファを flush していなかったため、各ファイルの末尾最大DBMS_DEFAULT_BUFFER_SIZEバイトが黙って失われ、Parquet のPAR1footer もその対象になっていました。このようなファイルを読み込むと、Not a Parquet file (wrong magic bytes at the end of file)が返されていました。#103268 (Groene AI).- 相関サブクエリで、join サイズ制限 (
max_rows_in_join/max_bytes_in_join) をjoin_overflow_mode = 'break'と併用した場合に発生していた、誤った結果および論理エラーの可能性を修正しました。相関サブクエリを評価するために内部的に作成される join は、これらのユーザー制限を無視するようになったため、途中で早期停止して行を落とすことがなくなりました。#103322 (Groene AI). EmbeddedRocksDBテーブルに対するALTER TABLE ... MODIFY SETTINGで、server がクエリを拒否した場合でも、無効な設定値がテーブルのメタデータファイルに永続化されることがある bug を修正しました。次回の server 再起動時には、テーブルの attach がCANNOT_PARSE_BOOL(または同様のパース error) で失敗し、ロード失敗が致命的となる database では server の起動自体が拒否されていました。現在は、無効な設定値はメタデータが書き込まれる前に拒否されます。#103417 (Groene AI).- サポートされていない数の argument を指定して object storage engine (
AzureBlobStorage,DeltaLakeAzure,S3,HDFS) でテーブルを作成した際に、server が異常終了する問題を修正しました。debug/sanitizer ビルドでは異常終了する代わりに、NUMBER_OF_ARGUMENTS_DOESNT_MATCHerror を適切に返すようになりました。#103544 (Groene AI). - 抽象構文木 (AST) が構造的に不正な場合 (たとえば AST fuzzer によって生成された場合) の、
JSONおよびDynamicdata type の parameter パースにおける server crash を修正しました。equals(name, value)parameter expression の children が 2 つ未満のままになることがあり、その結果DataTypeObjectとDataTypeDynamicが境界チェックなしでそれを参照していました。#103545 (Groene AI). - PREWHERE で使われる lambda 内のカラム名の衝突により、アナライザで発生していた論理エラーを修正しました。Closes #103584. #103627 (Pavel Kruglov).
- 非同期メタデータ読み込み中に通常の database 内で
Icebergengine テーブルがロードされた際、DataLakeConfiguration::getCatalogから断続的に返されていたLogical error: 'Database <name> not found'を修正しました。#103775 (Groene AI). PREWHERE/WHERE/HAVING/QUALIFY内で projection aliases を参照するクエリ (例:SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c) や、カラム名が重複する self-join に対するSELECT *を、並列レプリカかつparallel_replicas_local_plan = 0で実行した際に remote replicas が投げていたMULTIPLE_EXPRESSIONS_FOR_ALIASerror を修正しました。Closes #74324. #103806 (Groene AI).- 複数の
minmaxスキップ索引を持つMergeTreeテーブルで、クエリがネストしたcoalesce/ifNull比較 (例:WHERE coalesce(a, b, coalesce(c, d), e) = const) を使用し、use_skip_indexes_for_disjunctions = 1が設定されている場合に server が異常終了する問題を修正しました。<op>(coalesce(...), const)のスキップ索引の書き換えは、内側の coalesce argument に対しても再帰的に適用されるようになり、各索引のKeyConditionRPN が template の RPN と一致するようになりました。これは、選言追跡コードがすでに前提としている動作です。#103929 (Groene AI). - 新しいアナライザで
GLOBAL INおよびGLOBAL JOINクエリに対してmax_rows_to_transferとmax_bytes_to_transferが黙って無視される問題を修正しました。これらの設定は、マテリアライズされた external table が設定上限を超えた場合、従来のアナライザの挙動と同様にSET_SIZE_LIMIT_EXCEEDEDを発生させるか (transfer_overflow_modeに応じて) 処理を中断するようになりました。#103333 をクローズしました。#104119 (Groene AI). show_data_lake_catalogs_in_system_tablesが有効な DataLake カタログ database で、INSERTまたは DDL ステートメントが存在しない table を参照した際に、catalog/S3 メタデータの読み取りが過剰に発生する問題を修正しました。タイプミス候補の提示処理でカタログ全体の table ごとの完全な Iceberg メタデータを読み込んでいたため、大規模なカタログではメモリを使い果たすおそれがありました。#104124 (DQ).- 最適化中に lookup plan がカラムを並べ替えた場合に、右側の
MergeTreetable に対してdirectjoin_algorithmを使用するクエリで発生し得たクラッシュ (デバッグビルドではLOGICAL_ERROR“Columns are assumed to be of identical types, but they are different in Nullable”、リリースビルドではColumnString::compareAtの null ポインタによる SIGSEGV) および誤った結果を修正しました。右側のカラムが誤った名前のスロットに入ることで、join key に対する filter や比較が誤った型のカラムを参照してしまう可能性がありました。この問題は AST fuzzer により STID 2139-5111 として検出され、#107272 で報告されました。#104174 (Groene AI). Dateに対して、範囲外の整数パーティション ID を、ALTER時に黙ってオーバーフローさせたりLOGICAL_ERRORにしたりするのではなく、拒否するようにしました。#104250 (Azat Khuzhin).- 並列レプリカ使用時かつ、クエリプランのシリアライゼーションなしでアナライザを使う場合は
additional_table_filtersを無効化しました。従来は、これにより不正な結果が返される可能性がありました。#104296 (Azat Khuzhin). - dictionary に値が存在しない
Nullableな Key column を指定してdictGetOrNullを呼び出した際、SELECTprojection 内の他のカラムが黙ってNULLで上書きされる問題を修正しました。この関数は入力にエイリアスされた null map をその場で変更していましたが、現在は変更前に結果カラムをディープコピーするようになりました。#73633 をクローズしました。#104327 (Groene AI). ALTER TABLE ... DROP PARTITION ID 'patch-...'の後にDETACH/ATTACH TABLEを実行した際、パッチパートが破損する問題を修正しました。以前は空の covering part がpartition.datとsource_parts.datなしで書き込まれていたため、次回の attach またはサーバー再起動後にsystem.detached_partsにbroken-on-start_patch-...エントリが現れていました。#93132 をクローズしました。#102103 をクローズしました。#104353 (Groene AI).HTTPインターフェイスおよびINSERT SELECT FROM inputで、input_format_max_block_wait_msを使用した streamingINSERTを修正し、リクエスト完了前に部分的な入力ブロックが flush されるようにしました。#104534 (Alexey Milovidov).JOINの後にORDER BY ... LIMITとarrayJoinを組み合わせたクエリが、気づかれないまま 0 行を返してしまうことがある不具合を修正しました。関数評価をSortingStepの上に持ち上げるクエリプラン最適化は、持ち上げ対象の式にarrayJoinが含まれる場合には適用されなくなりました。arrayJoinは行数を変化させる可能性があるためです。#82279 をクローズしました。#104558 (Groene AI)。MergeTreeファミリーのテーブル破棄中にまれに発生するサーバーの異常終了を修正しました。この異常終了は、バックグラウンドジョブスケジューラが完全に停止する前にshutdownが例外を送出した場合に発生することがありました。そのごく短い間にバックグラウンドタスクが実行されると、部分的に破棄されたストレージオブジェクト経由で仮想呼び出しがディスパッチされ、__cxa_pure_virtualに到達していました。#104561 (Groene AI)。- NULL 値を含む type hint と組み合わせた
JSONの複合サブカラムで、不整合な結果が返る問題を修正しました。#104584 (Pavel Kruglov)。 - 集約プロジェクションに異なる
IN (...)条件を持つ複数のsumIf集約が含まれている場合に、誤った結果が返ったり、projection が使われなかったりする問題を修正しました。#104765 (Jimmy Aguilar Mena)。 JOIN ON内で使用されたarrayJoin()により誤った行数が返る問題を修正しました。結果が配列長の分だけ余計に乗算されていました。#104785 (Shaohua Wang)。- ゼロをまたぐ符号付き整数型に対して
deltaSumTimestampが誤った結果を返す問題を修正しました。#104750 を解決しました。#104830 (Konstantin Bogdanov)。 - NULL 定数を使った filter push-down 後の UnionStep におけるブロック構造の不一致を修正しました。#104821 をクローズしました。#104853 (Pavel Kruglov)。
- アタッチ直後の
Iceberg、DeltaLake、またはHudiテーブルで、メタデータファイルが破損しているか読み込めない場合にDELETE FROMがLogical error: 'Metadata is not initialized'を発生させる問題を修正しました。代わりに通常のユーザー向け例外が返され、サーバーは動作を継続します。#104891 をクローズしました。#104917 (Groene AI)。 - 設定変更時に
max_memory_usage_soft_limitが on-the-fly で更新されない問題を修正しました。ソフトメモリ制限は起動時に一度だけ計算されてキャッシュされていたため、その後の設定再読み込みは反映されていませんでした。この修正後は、設定を再読み込みするたびに制限が再計算され、即座に適用されます。Keeper の再起動は不要です。#104940 (Kai Zhu)。 - macOS での JIT シンボル解決を修正し、ソート、式、集約の JIT コンパイルが
CANNOT_COMPILE_CODE: Could not find symbol _<name>で失敗しないようにしました。#104946 (Alexei Fedotov)。 - 新しいアナライザで
optimize_skip_unused_shards_rewrite_inが有効な場合に、SELECT ... FROM <分散テーブル> WHERE/HAVING/GROUP BY ... (sharding_key_column IN tuple())形式のクエリを実行すると発生する例外 (vector hardening におけるReceived signal 6 (abort)。空のベクタに対するTuple::back()として観測されます) を修正しました。#104966 (Alexey Milovidov)。 - デバッグ / サニタイザビルドで、
CREATE TABLE t (c0 Int CODEC(not((not(materialize(1), materialize(2)))), ZSTD)) ENGINE = Memoryのようなクエリにより発生していたLogical error: 'Inconsistent AST formatting'によるサーバー中断 (STID 1941-1bfa) を修正しました。フォーマッタは、CODEC/STATISTICS/BACKUP_NAMEの引数リスト内に現れる、複数引数のtuple(...)関数呼び出し (演算子形式(a, b)が無効な箇所) に対して、不要な外側の括弧を出力しなくなり、format-parse-format の往復変換の安定性が保たれるようになりました。#104991 (Groene AI). - 25.8 で作成され、別個の
ALTER TABLE ... ADD COLUMNで追加されたカラム上のスキップ索引を含む part に対してALTER TABLE ... MATERIALIZE INDEXを実行した際に発生していたNOT_FOUND_COLUMN_IN_BLOCKを修正しました。mutation は、強制再計算時に、その part 上の既存のすべてのスキップ索引と projection に必要なすべてのカラムを正しく読み取るようになりました。#104872 をクローズしました。#105039 (Groene AI). enable_materialized_cteを指定したクエリで発生していた、2 種類のLOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materializedを修正しました: (1) 別の マテリアライズド CTE に対するIN (subquery)でフィルタされた、再利用される マテリアライズド CTE、(2) 直接参照されると同時に、ネストした IN-サブクエリ を介して MergeTree の主キーに到達するWHERE ... IN (...)フィルタ内でも参照される マテリアライズド CTE。これらのバグはプラン最適化中に発生していたため、同じクエリに対するEXPLAINも影響を受けていました。#101940、#102320 をクローズしました。#105041 (Dmitry Novik).Float32カラムに対するcountminstatistics のPREWHERE選択性推定を修正しました。2 つのバグにより、countminstatistics はFloat32カラムに対して誤った推定値を黙って生成していました。ConditionSelectivityEstimatorは、カラム型 (Float32) がリテラル型 (Float64) より狭い場合に statistics を完全にスキップし、デフォルトの選択性にフォールバックして sketch を無視していました。また、StatisticsCountMinSketch::estimateEqualはFieldオブジェクトの先頭 N バイトをハッシュしていましたが、FieldはFloat32をFloat64として保存するため (NearestFieldType<Float32>=Float64) 、クエリ時に使用されるバイトパターンが、build 時に保存された実際のFloat32のバイト列と異なっていました。#105047 (Han Fei).ENGINEなしでストレージ clauses (ORDER BY、PARTITION BY、PRIMARY KEY、SAMPLE BY、TTL、UNIQUE KEY、または engineSETTINGS) を指定したATTACH TABLE name <clauses>;クエリは、保存済みの定義でテーブルを黙って再アタッチしてユーザー指定の clauses を破棄するのではなく、BAD_ARGUMENTSを返すようになりました。クエリレベルのセッションSETTINGS(log_commentなど) は引き続き適用されます。保存されたメタデータで再アタッチするにはATTACH TABLE t;を使用し、設定を変更するにはATTACHの後にALTER TABLE t MODIFY SETTING ...を使用してください。#105068 (Groene AI).- 集約関数が自身の state を返すカラム (例:
uniqStateOrDefaultState、sumStateOrDefaultState、uniqStateForEachState) に対してrunningAccumulateを呼び出した際の use-after-free を修正しました。#105085 (János Benjamin Antal). - Web UI (
play.html) のバグを修正しました。末尾に 1 つだけある;のさらに後ろにカーソルがある状態でクエリを実行すると、クエリが実行されず、代わりに “empty query” と表示されていました。#105107 (Alexey Milovidov). Replicatedデータベース内でCREATE TABLE ... AS SELECTがsystem.current_rolesまたはsystem.enabled_rolesを参照した際に、この内部 DDL worker コンテキストで発生していたLOGICAL_ERROR: 'No user in current context, it's a bug'を修正しました。これにより、クエリは正常に実行され、空の result set を返すようになりました。#105150 (Groene AI).quantileExactWeightedInterpolated、quantileDD、quantilePrometheusHistogramの aggregate state を、それぞれ対応する複数形のquantilesXxxMergeとマージする際 (およびその逆) に発生していたILLEGAL_TYPE_OF_ARGUMENTを修正しました。これら 3 つの quantile ファミリーでは、単数形と複数形の variants が同じ内部 aggregate state を共有していますが、内部の名前マッピングテーブルに登録されていなかったため、関数をまたぐ state の merge と、これらのファミリーに対する function-fusion optimization が拒否されていました。#105189 (Groene AI).Date32およびDateTime64の argument に対して、結果がDateの range 外になる場合のtoStartOfWeek、toLastDayOfWeek、toMonday、toStartOfMonth、toLastDayOfMonth、toStartOfQuarter、toStartOfYearの誤った結果を修正しました。従来は任意の日付に overflow していましたが、1970-01-01より前の結果は1970-01-01に clamped され、2149-06-06より後の結果は2149-06-06に clamped されるようになりました。これにより、このような関数を range 外の値を含むDate32またはDateTime64の key に対するWHERE句で使用した際に発生していた、誤った query result (パーツおよび granules の誤った pruning) も修正されます。#105244 (Yarik Briukhovetskyi).- 第 1 引数が
Variantの配列で、そのすべての代替型が第 2 引数の型と互換性がなく、かつvariant_throw_on_type_mismatchが無効な場合にarrayRemoveで発生していた論理エラーを修正しました。関数はこの比較を「決して等しくない」として扱い、server-side のassertTypeEqualityfailure を起こす代わりに、配列を変更せずそのまま返すようになりました。#105248 (Groene AI). FileCacheが Caching のためにディスク上の一部の directory を作成できなかった場合でも、クエリを正常に実行できるようになりました。#105250 (Den Kalantaevskii).extremes = 1を指定したクエリが、ExtremesTransformで最初の chunk から extremes のカラムを構築中に例外 (たとえばMEMORY_LIMIT_EXCEEDED) に遭遇した際、Assertion 'px != 0' failedにより server が異常終了していた問題を修正しました。これにより、server がクラッシュする代わりに、クライアントは元の例外を受け取れるようになりました。#105264 (Groene AI).LEFT ANTI JOINで、一致しない行に対して左側の join key の値を複製するのではなく、右側の join key カラムにデフォルト値を正しく返すようになりました。以前は、SELECT a.x AS l, b.x AS r FROM a LEFT ANTI JOIN b ON a.x = b.xにおいて、一致しない行に対し、本来はデフォルト値 (Int32なら0、Stringなら''、NullableならNULL) を返すべきところ、r = a.xが返ることがありました。影響を受けていたのは join key カラムのみで、key ではない右側カラムは従来から正しくデフォルト値が設定されていました。同じ bug は、optimizer が左右を入れ替えた場合のRIGHT ANTI JOINでも発生していました。#99959 をクローズしました。#105278 (Groene AI).- 非デフォルトの
--default_databaseを指定してclickhouse-localを繰り返し起動した際に発生していたデータ消失を修正しました (例:clickhouse-local --path X -- --default_database=mydb) 。永続化されたデータベース UUID の参照先がmetadata/defaultにハードコードされていたため、再起動のたびに新しい UUID が発行され、前回実行時のテーブルが見えなくなっていました。#101831 をクローズしました。#105284 (Groene AI). ALTER TABLE <memory_table> APPLY PATCHESまたはALTER TABLE <memory_table> APPLY DELETED MASKの実行時に発生していた論理エラーMutation ofMemorytable produced incomplete outputを修正しました。Memoryテーブルはパッチパートや削除マスクを保持しないため、現在は両方のコマンドが正しく no-op として扱われます。#105286 (Groene AI).- クエリリクエストに
table_idパラメーターを渡すようにし、Unity Catalog で長時間実行されるクエリの問題を修正しました。#105303 (Konstantin Vedernikov). distributed_group_by_no_merge=1の場合に、Distributed上のMerge上のMergeで発生するCANNOT_CONVERT_TYPEを修正しました。#105330 (Azat Khuzhin).- 位置指定のファイル引数も与えられているときに、
clickhouse localとclickhouse clientが--query/-qを黙って無視していた問題を修正しました。現在はどちらの場合も一貫してBAD_ARGUMENTSが返されます。#105334 (Raúl Marín). REPLACE TEMPORARY TABLEが対象テーブル不存在時に黙って新しいテーブルを作成していた問題を修正しました。現在はREPLACE TABLEの動作に合わせてUNKNOWN_TABLEを返します。create-or-replace の動作を維持したい場合はCREATE OR REPLACE TEMPORARY TABLEを使用してください。#105373 (Groene AI).catalog_type = 'glue'を持つDataLakeCatalogdatabase からの長時間の reads (例:INSERT ... SELECT) が、table-metadata load time に取得した STS session credentials の有効期限が切れるとExpiredTokenエラーで失敗していた問題を修正しました。現在は AWS STS credentials がクエリ実行中に更新されるため、そのような reads も token の有効期限をまたいで継続されます。#105381 (Pratima Patel).ARRAY JOINとともに使用した一部のケースで、負のLIMIT BYに論理エラーが発生していた問題を修正しました。#105403 (Nihal Z. Miaji).- Parquet files の読み取り時に
read_bytes(およびsystem.query_log、progress bar などに表示される派生 bytes/s) が過大計上される問題を修正しました。従来の実装では、chunk ごとに行グループ全体の圧縮サイズを報告していたため、N 個のカラムのうち K 個を読むとN / K倍に過大計上されていました。現在は、選択されたカラムについてのみ合計されます。あわせて Iceberg tables のファイル単位の進捗追跡も修正しており、従来はデータファイルサイズがまったく報告されていませんでした。#105413 (Groene AI). - planner が
recursive_withフラグ付きでWITHexpression のないSELECTを生成した場合に、cluster table functions (s3Cluster,urlCluster,fileCluster, …) で発生しうるサーバー segfault を修正しました。#105370 をクローズしました。#105433 (Groene AI). count_distinct_optimization = 1のとき、Nullableカラムに対するcountDistinct/uniqExactの結果が誤っていた問題を修正しました (NULL グループが誤ってカウントされていました) 。#105439 (Raúl Marín).- バイナリまたは文字列のカラムで、中間
offsetsが破損した Arrow または ArrowStream ファイルの読み取り時に発生する heap-buffer-overflow と、geo タグ付き Arrow カラムの読み取り時に発生する null ポインタ逆参照を修正しました。#105449 (Raúl Marín). - window
PARTITION BYにおけるDynamic/Variant型の検証漏れを修正しました。これまではallow_suspicious_types_in_group_byが無効な場合、この検証が行われていませんでした。#105028 をクローズします。#105450 (Pavel Kruglov). - JSONStrings* フォーマットで
input_format_json_empty_as_defaultが機能しない問題を修正しました。#104913 をクローズします。#105453 (Pavel Kruglov). - 式のパース中に
VALUESフォーマット経由でVariantカラムにNULLを insert できない問題を修正しました。#104909 をクローズします。#105455 (Pavel Kruglov). - デフォルト引数が
Nullable式で、見つかる辞書キーと見つからない辞書キーが混在しており、かつshort_circuit_function_evaluationが有効な場合に、dictGetOrDefaultがCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNを投げる問題を修正しました。#105461 (Raúl Marín). Quoted(Values) テキスト reader がMap(Array(Nothing), ...)のような不完全に推論された型に対してStringに fallback した際、Dynamicカラムで値が黙って切り詰められる問題を修正しました。従来の fallback では、生のフィールドを単純に'...'で連結して囲んでいたため、内側のシングルクォート (この種の fallback では常に含まれる) がクォート文字列を途中で終端し、残りの値が失われていました。#105463 (Groene AI).ALTER後、圧縮されたMemorytable からDynamicsubcolumns を読み取る際に発生する SIGSEGV を修正しました。#104901 をクローズします。#105464 (Pavel Kruglov).Dynamicに対するtoFloat64/toUInt32/toStringなどでcast_keep_nullableが無視される問題を修正しました。#104789 をクローズします。#105467 (Pavel Kruglov).WithNamesフォーマット用のスキーマ cache キーにskip_first_linesを含めるようにしました。#104527 をクローズします。#105469 (Pavel Kruglov).GROUP BY ... WITH ROLLUP、WITH CUBE、またはWITH TOTALSと Nullable 引数を組み合わせて使用した際に、uniqStateOrNull/uniqStateOrDefault/uniqOrNullState(およびuniqに対する類似の combinator chain) で発生する server segfault を修正しました。#105470 (Groene AI).- アナライザ有効時に
ORDER BY ... WITH FILL INTERPOLATEとLIMIT N BYを組み合わせるとNOT_FOUND_COLUMN_IN_BLOCKException が発生する問題を修正しました。#103474 をクローズします。#105481 (Yakov Olkhovskiy). - 負の (エポック以前の)
DateTime64値に対してtoStartOfMillisecondとtoStartOfMicrosecondがほぼ 1 秒ずれた結果を返していた問題を修正し、INT64_MIN近傍のDateTime64入力に対するtoStartOfSecond、toStartOfMillisecond、toStartOfMicrosecondにおけるUndefinedBehaviorSanitizerの signed-integer-overflow も修正しました。 #105482 (Groene AI). - 新しい互換性設定
analyzer_compatibility_prefer_alias_over_subcolumnを追加しました (デフォルトでは無効) 。有効にすると、新しいアナライザは複数要素の識別子に対して、Tuple-subcolumn / dotted-column の一致よりも alias-prefix としての解釈を優先し、以前の interpreter の動作を復元します。これにより、クエリが、join に対するSELECT *を使う CTE/サブクエリ内の内部テーブル名と同名の table を join した場合に、asterisk によって名前変更されたカラム (例:b.id) が内部テーブルの識別子を外側のスコープに漏らしてしまうことで発生するAMBIGUOUS_IDENTIFIER(および関連する) エラーを回避できます。 #105491 (Vladimir Cherkasov). - index only optimization を用いて実行されたベクトル検索クエリで、
SELECTリストにL2Distance()が含まれている場合に正しい値を返すようになりました。これまでは、この関数が誤って L2-squared 距離の値を返していました。ベクトル検索クエリ自体は正しく順位付けされた結果を返しており、二乗された値の影響を受けたのは、L2Distance()の値を明示的に取得して解釈していたアプリケーションのみである点に注意してください。 #105495 (Shankar Iyer). - 新しい Kafka table engine で、トピックのパーティション再割り当て中にメッセージが誤って処理され、offset rollback 後にメッセージが欠落する可能性があるまれな問題を修正しました。 #105500 (János Benjamin Antal).
- 本体が相関したサブクエリである
MATERIALIZEDCTE をINの右辺として使用したときに発生する例外 (Trying to execute PLACEHOLDER action論理エラー) を修正しました。このような CTE は、同じパターンが CTE をFROMで直接参照した場合にすでに拒否されているのと同様に、分析時点で拒否されるようになりました。 #105518 (Groene AI). - フォーマットが明示的に指定されている場合に、stdout/stdin の圧縮が適用されない問題を修正しました。 #104441 をクローズします。 #105528 (Pavel Kruglov).
JSON型のsingleValueOrNullのデシリアライゼーションにおける SEGFAULT を修正しました。 #103630 をクローズします。 #105535 (Pavel Kruglov).clickhouse-format --backslashがINSERTVALUESデータを黙って削除してしまう問題を修正しました。 #103533 をクローズします。 #105536 (Pavel Kruglov).variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=falseで、関数実行中の例外が捕捉されない問題を修正しました。 #103484 をクローズします。 #105543 (Pavel Kruglov).JSONの共有データへの insertion 時にinput_format_try_infer_datetimesが無視される問題を修正しました。 #103221 をクローズします。 #105544 (Pavel Kruglov).- 小さく未ソートな入力に対して
histogramが誤った結果を返す問題を修正しました。#103109 をクローズします。#105548 (Pavel Kruglov). JSONExtractおよびテキストのデシリアライゼーションにおいて、範囲外の値でDateTimeが折り返してしまう問題を修正しました。#103094 をクローズします。#105551 (Pavel Kruglov).optimize_trivial_insert_selectが有効な場合に、テーブル関数で insertion table の使用に問題があった不具合を修正しました。#103083 をクローズします。#105555 (Pavel Kruglov).- 式と
WHENの値の両方がNULLの場合に、CASE式が一致したTHENではなくELSE分岐を返していた問題を修正しました。#105556 (Raúl Marín). selectのFD_SETSIZE制限に達したことで発生していたreplxxのクラッシュを修正しました (現在はpollに置き換えられています) 。以前は、SSH またはウェブターミナルが有効な場合、この問題によりサーバーがクラッシュすることがありました。#105559 (Azat Khuzhin).executePartitionByExpressionで式を実行する前に、サブカラムをマテリアライズするようにしました。#103057 をクローズします。#105573 (Pavel Kruglov).TTL式がサブカラムを参照したときに発生するNOT_FOUND_COLUMN_IN_BLOCK例外を修正しました。#105578 (Pavel Kruglov).- HTTP またはネイティブプロトコル経由で、
ENGINE句のないCREATE TABLE ... TO INNER UUID '...'を送信した場合に、CREATE TABLE権限を持つ任意のユーザーが引き起こせたサーバークラッシュ (SIGSEGV) を修正しました。同じバグによりクライアントもクラッシュしていました。現在は、null ポインタを逆参照する代わりに、パーサーが適切なBAD_ARGUMENTSエラーを報告します。#105579 (Groene AI). estimateCompressionRatiowindow function で、行をまたいで保持されるべき累積データが失われる問題を修正しました。#101738 をクローズします。#105581 (Pavel Kruglov).- 同じ VALUES 句内でサイズの異なる tuple を
Stringカラムに挿入したときに発生するクラッシュを修正しました。#101727 をクローズします。#105582 (Pavel Kruglov). - Hive のパーティション値抽出で
cast_string_to_date_time_mode設定が反映されるようになり、デフォルトでパーティションキー内のタイムゾーン接尾辞付き ISO 8601 タイムスタンプ (例:+0000,+00:00,Z) を受け付けるようになりました。#105584 (Alexey Milovidov). NULL値を含む Timezone を持つDateTimeに対するtoStringで発生していたNOT_IMPLEMENTEDエラーを修正しました。#103712 をクローズします。#105587 (Yarik Briukhovetskyi).- flattened された
DynamicカラムのNativeデシリアライゼーションにおける OOB 読み取りを修正しました。#105666 (Pavel Kruglov). - 結果型が
Variantで、第 2 または第 3 分岐が、Int64に収まるUInt64リテラルに対する定数条件のifになっているif式について、クエリプランニング中に発生していたLOGICAL_ERROR(Unexpected return type from if) を修正しました。#105649 をクローズします。#105680 (Groene AI). - 別の writer (設定なしの
icebergLocal/icebergS3table function など) がテーブルを先に進めたあと、iceberg_use_version_hint = 1を指定して Iceberg table を読み取ると誤った結果になる問題を修正しました。version-hint.textは、ファイルが存在する場合、以後はすべての writer によって同期された状態に保たれるようになったため、hint を使う後続の reader でも最新の snapshot を参照できます。#105682 (Groene AI). use_query_condition_cache = 1(既定値) のときに、SELECTクエリで件数が実際より少なく数えられてしまう不具合を修正しました。bloom-filter スキップ索引を持つカラムに対するPREWHERE pk_prefix = X WHERE non_pk IN (...)という形のクエリによって、pk_prefix = Xpredicate 用のQueryConditionCacheが汚染され、その結果、後続の通常のSELECT count() ... WHERE pk_prefix = Xが誤って少ない件数を返していました。26.x のすべての releases が影響を受けます。#104781. #105686 (Groene AI).- すでに複数の異なる値を観測していた state を merge した際に、
singleValueOrNullMergeがNULLではなく具体的な値を返してしまう問題を修正しました。#105734 (Minh Vu). - 不正な行のあとにおける
Templateinput format の error 復旧を修正しました。#105735 (Yue Ni). - コレクション名が空、または NUL バイトを含む場合に、
mongodbtable function、MongoDB storage、MongoDB Dictionary ソースでクラッシュする問題を修正しました。#105776 (Raúl Marín). - 失敗した writes 後の
Keepersnapshots のクリーンアップを修正し、部分的な snapshots を安全にクリーンアップできるようにするとともに、失敗した writes をlatest_snapshot_metaを進めることなく再試行できるようにしました。#105779 (Antonio Andelic). - 明示的な
SummingMergeTreeおよびCoalescingMergeTreeのcolumns_to_sumカラムに対して、ALTER TABLE ... CLEAR COLUMNが拒否される問題を修正しました。#105785 (Antonio Andelic). - データベース名をクエリパラメータ経由で与えるパラメーター化ビューを作成する際、たとえば
CREATE VIEW {db:Identifier}.v AS SELECT {p:UInt64}のような場合に、DatabaseCatalog::tryGetDatabaseで assertion が発生し (release ビルドではUNKNOWN_DATABASEerror の原因にもなる) ていた問題を修正しました。CREATEステートメントの DDL 部分にある Parameters は作成時に置換されるようになり、一方で SELECT 本文中の Parameters は引き続きビュー呼び出し時に置換できます。#105799 (Groene AI). - aggregate state がシリアライズされる場合 (例: 並列レプリカ、バイナリ state フォーマッタ経由の
sumMapState、external aggregation) に、Nested(... Nullable(Decimal(P, S)))カラムに対するsumMapおよびsumMapWithOverflowでBad get: has Decimal32, requested Decimal128が発生する問題を修正しました。#105816 (Groene AI). 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 (Raúl Marín).- Iceberg への書き込みで、
Nullable(T)パーティションカラム内の NULL 値が保持されるようになりました。以前は、ClickHouse が書き込んだ NULL は、Spark や他の Iceberg reader で読み戻すと内部型のデフォルト値 (intの場合は0) として扱われていました。#105852 をクローズしました。#105862 (Groene AI). IN (subquery)predicates に対するParquetおよびORCの pushdown を修正し、file、url、s3、およびオブジェクトストレージの読み取りで row-group/page/bloom-filter pruning が機能するようにしました。#105863 (Arsen Muk).Mergeテーブルの read-in-order を修正しました (新しいアナライザ使用時) 。#105867 (Nikolai Kochetov).- 単一の delete file が複数の data file を参照し、さらにそのような delete file が同じ data file に複数適用される場合に、Iceberg v2 merge-on-read position deletes が誤った行を返す問題を修正しました。streaming reader (
use_roaring_bitmap_iceberg_positional_deletes = 0) は、Parquet の row-group pruning に依存するのではなく、C++ でfile_pathによって delete-file の行をフィルタするようになり、昇順 positions の invariant が復元されました。#105888 (Groene AI). - 新しいアナライザで、
IN Array(...)filter を含む distributed queries におけるCannot find columnエラーを修正しました。#105894 (Nikolai Kochetov). - 別の
ALTERによってSTATISTICSを持つカラムが同時に削除された際に、MergeTreeテーブルでALTER TABLE ... MODIFY COLUMN ... Nullable(...)実行時に発生する SIGSEGV を修正しました。#105912 をクローズしました。#105917 (Groene AI). - PostgreSQL から読み取るクエリ (postgresql table function、PostgreSQL table engine、または PostgreSQL ソースを持つ Dictionary 経由) がキャンセルされ (たとえば KILL QUERY) 、そのリモート PostgreSQL クエリのキャンセルに失敗した場合に発生しうるサーバークラッシュを修正しました。#105949 (Rory Shanks).
SYSTEM INSTRUMENT ADDのフォーマットを修正し、handler arguments が単一のスペースで区切られるようにしました。また、値が 3 つ以上ある無効なSLEEPインストルメンテーション引数リストや、最小値が最大値を上回る範囲を拒否するようにしました。#105984 (Pablo Marcos).- outer join と、その outer join の NULL を補う側を参照する後続の inner join を組み合わせたクエリで、誤った結果になる可能性がある問題を修正しました。join の並べ替えによって、inner join 条件が outer join の ON 句に引き込まれるプランが選ばれることがありました。#105992 (Vladimir Cherkasov).
- クエリ内で送信された大きすぎる文字列リテラルによりクラッシュする可能性がある問題を修正しました。#105996 (Nikita Taranov).
ORDER BYでソートプレフィックスを使用し、use_with_fill_by_sorting_prefixが有効な場合に、空のINTERPOLATE ()を使うとINVALID_WITH_FILL_EXPRESSION例外が発生する問題を修正しました。これにより、ソートプレフィックスのカラムは暗黙的な補完対象から正しく除外され、明示的にカラム名を指定したINTERPOLATE (col)と同じ動作になります。 #106001 (Yakov Olkhovskiy).Boolパーティションキーに対するALTER TABLEのパーティション操作が、エラーを出さずに失敗する問題を修正しました。#101722 をクローズします。 #106004 (Pavel Kruglov).- デフォルト値を持つ型付き
JSONパスに対するJSONExtractRawとJSONHasの問題を修正しました。#101721 をクローズします。 #106005 (Pavel Kruglov). - データレイク設定で、空の basepath に誤って ’/’ プレフィックスが付与される問題を修正しました。#105989 をクローズします。 #106013 (thewisenerd).
IcebergLocaltable engine がDETACH+ATTACHのサイクルや server の再起動後に read-only になり、その後のすべてのINSERTがLocal object storage Local is readonly. (READONLY)で失敗する問題を修正しました。 #106016 (Groene AI).- 新しい request dispatcher の response queue が response thread の開始前に埋まる可能性があり、その結果、follower の catch-up 中に
Keeperが失敗する問題を修正しました。 #106049 (Antonio Andelic). - 旧アナライザとの互換性を改善しました。テーブルに
x.a Array, x.b Array, x Stringのようなカラムがある場合、ARRAY JOIN xでは Array を優先するようになりました。 #106069 (Nikolai Kochetov). - オブジェクトのメタデータにブロブ ETag が含まれていなかったため、Azure Blob Storage (たとえば Azure 上の Delta Lake テーブル) でファイルシステムキャッシュが気付かれないまま無効化されていた問題を修正しました。 #106091 (thewisenerd).
SHOW DICTIONARIESの部分的な revoke がある場合に、system.dictionariesが 0 行を返す問題を修正しました。 #106105 (Pavel Kruglov).allow_experimental_delta_kernel_rsが有効な状態で Delta Lake テーブルをクエリし、無効なバイトを含む credential または option を使用した場合に、server がクラッシュする問題を修正しました (Rust FFI がextern "C"境界をまたいで panic していました) 。 #106109 (Raúl Marín).ORDER BYに(c0 / -42)やintDiv(c0, -42)のような単調減少関数を含むテーブルに対するクエリで、結果が誤る問題を修正しました。基になるカラムに対する predicates (たとえばc0 < 0) により、一致する行を含む granules が誤って刈り込まれ、結果が欠落することがありました。#106084 をクローズします。#106124 をクローズします。#106080 をクローズします。 #106136 (Nihal Z. Miaji).MATERIALIZED VIEW定義でWASMSQL UDF を使用できない問題を修正しました。 #106161 (Yue Ni).- Iceberg partition pruning で、アナライザが scalar subquery の結果を、ソース型と target 型が一致する内部的な
_CAST(Const, 'TargetType')でラップする場合でも、WHERE partition_col = (SELECT ... FROM ...)フィルターを正しく処理するようになりました。従来は、このようなフィルターではパーティションプルーニングが無効になり、full table scan がトリガーされていました。#106204 (Groene AI). - clickhouse local の
--query_idパラメータを修正し、カスタム query id を指定できるようにしました。#106205 (Yue Ni). S3ディスクおよび object storage で multipart upload によって書き込まれた object に対し、S3 storage class (s3_storage_class/s3_storage_class_name) が無視される問題を修正しました。この問題により、大きな object がデフォルトのSTANDARDclass で作成されていました。現在は、このオプション名をディスク、object storage、backups に対してs3_storage_classとs3_storage_class_nameの両方で受け付けます。#106214 (Alexey Milovidov).nuraft_max_log_gap_in_streamsetting が非 default 値に設定されている場合 (default は 0、つまりappend_entriesrequests のパイプライン化を無効化) 、起動時に Keeper が停止することがあった問題を修正しました。#106220 (Michael Kolupaev).- 不正なデータを受け入れる代わりに、corrupted
DDSketchaggregate-function state (bin keys) を INSERT 時に検証するようにしました。#106236 (Yarik Briukhovetskyi). - サブクエリが in-order settings を override した際に発生する、マージコーディネーターの mode 不一致を修正しました。#106243 (Nikita Taranov).
- predicate が上位で適用されている場合に、
Distributedtable がMergetable またはmergetable function 経由でクエリされると、optimize_skip_unused_shardsが適用されず (さらにforce_optimize_skip_unused_shardsが誤って失敗する) 問題を修正しました。#106250 (Nikolai Kochetov). - 旧アナライザで、
SELECTlist 内のORDER BYカラムに alias が付けられている場合に、INTERPOLATE ()がINVALID_WITH_FILL_EXPRESSIONをスローする問題を修正しました。#106248 をクローズします。#106252 (Yakov Olkhovskiy). RowBinaryinput またはクエリパラメータから不正なAggregateFunction(uniqTheta, ...)state を deserialising した際に abort する問題を修正しました。現在は、不正な input はstd::exceptionとして escaping してabortOnFailedAssertion経由でプロセスを abort するのではなく、CORRUPTED_DATAとして reject されます。#106260 (Groene AI).RowBinaryWithNamesAndTypesの type decoding (input_format_binary_decode_types_in_binary_format = 1) 中に、範囲外のIntervalKindbytes を、後続で hash paths における undefined behavior を引き起こし得る無効な kind を持つDataTypeIntervalを構築するのではなく、明確なINCORRECT_DATAerror で reject するようにしました。#106261 (Groene AI).26.1+におけるSLRUdowngrade failure rollback 問題を修正しました。また、keep_free_space_ratiofeature におけるSystem/Datacache split priority を修正しました。#106286 (Kseniia Sumarokova).Nullable(JSON)で、null マップではなくnullサブカラムをJSONパスとして読み取るようにしました。 #106085 をクローズしました。#106295 (Pavel Kruglov).- Iceberg REST カタログにテーブルが含まれている場合に、
RestCatalog::emptyが誤った結果を返す問題を修正しました。#106301 (Lefteris). enable_parallel_replicas、query_plan_use_new_logical_join_step、およびquery_plan_optimize_join_order_algorithm = 'greedy'が有効なときに、左側のMergeTreeテーブルが空のINNER JOINクエリで発生していた例外を修正しました。#106338 (Nikolai Kochetov).- 仮数部のシフトが 1 ビットずれていたことが原因で発生していた、非正規化
Float16値からFloat32への誤変換 (たとえば Numpy の.npyファイルから読み込む場合) を修正しました。#106343 (Joanna Hulboj). - 制約ベースの最適化 (
optimize_using_constraints) を相関サブクエリと組み合わせて使用した際に発生するクラッシュと、発生する可能性のあるNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#106349 (Raúl Marín). - 配列がすべて空で、かつキーが定数でないカラムをハッシュ化する際に、
sipHash64Keyed、sipHash128Keyed、sipHash128ReferenceKeyedで発生していた範囲外読み取りを修正しました。#106355 (Raúl Marín). SYSTEM RELOAD CONFIGがエンドポイントごとの Azure Blob Storage 設定 (use_native_copyなど) を破棄してしまい、その結果、サーバーを再起動するまでBACKUP/RESTOREでディスクに設定された内容が無視される問題を修正しました。#106357 (Julia Kartseva).regexpExtract(haystack, pattern)を修正し、キャプチャグループを含まないパターンではINDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGEを投げるのではなく、マッチ全体を返すようにしました。#106374 (Groene AI).- リモート S3 オブジェクトが一覧取得から読み取りまでの間に、より短い内容で上書きされた場合に、cache の事前ダウンロード中に
LOGICAL_ERROR例外が発生する問題を修正しました。#106375 (Nikita Fomichev). - ファイルシステムキャッシュでメモリ使用量が増加する問題を修正しました。#106387 (Kseniia Sumarokova).
- Arrow IPC フォーマットリーダー (
ArrowColumnToCHColumn) における複数のヒープ境界外読み取りを修正しました。不正な Arrow ファイルでは、バッファに含まれる数より多い行数を宣言したり、list/struct/map の child の長さを親と不整合な状態で宣言したり、単調増加でない list offsets を指定したり、child の validity bitmap を途中で切り詰めたりできるため、ヒープ割り当て領域の末尾を越えて読み取る可能性がありました。これはSELECT権限を持つ任意のユーザーがfile()、format()、テーブル関数、または ArrowFlight 入力を通じて到達可能です。現在は、生ポインタにアクセスする前にすべての data、offsets、view-struct、validity-bitmap バッファを検証し、list/struct/map の形状と offsets の整合性も確認するようになりました。#106395 (Raúl Marín). - リフレッシャブルmaterialized view の REPLACE ターゲットが、バックアップを開始したレプリカ上でその materialized view がまだ実体化されていない Replicated または Shared データベースで収集される場合に、バックアップが
FILE_DOESNT_EXISTで失敗する問題を修正しました。#106411 (Julia Kartseva). - mutation (
DELETE/UPDATE) の predicate に、別のサブクエリ内にネストされたデフォルトの table expression を参照するIN/EXISTSサブクエリが含まれている場合に発生する論理エラーColumn identifier ... is already registeredを修正しました。#106414 (Alexey Milovidov). - JOIN グラフ内の 2 つの relation が同じカラム名を持つ場合に、並列レプリカで実行される join で発生しうる join order optimizer の論理エラー (
Left and right columns have same names) を修正しました。#106418 (Alexey Milovidov). NaNまたは infinite な点座標を含むソースデータから Polygon 辞書を構築する際の論理エラーを修正しました。こうした座標は現在、明確なエラーを出して拒否されます。#106423 (Alexey Milovidov).system.query_logのused_privilegesおよびmissing_privilegesカラムに、別の user、database、または session の無関係な過去のクエリから漏れた privilege 文字列が含まれる可能性があったバグを修正しました。#106425 (Alexey Milovidov).- 関数
base58Encode、base58Decode、tryBase58Decodeが、大きな入力に対してmax_execution_timeとクエリのキャンセルを尊重するようになり、非常に長時間実行される代わりに 10 KB を超える入力を拒否するようになりました。この制限は新しい設定function_base58_max_input_sizeで設定できます (0で無効化) 。#106428 (Alexey Milovidov). read_in_order_use_virtual_row_per_block = 1かつmax_block_sizeが小さい状態で wide parts を逆順に読み取る際、ORDER BY ... DESCクエリで散発的に誤った結果が返る問題を修正しました。#106429 (Vladimir Cherkasov).- Parquet V3 native reader を使用し、
SELECTリストに含まれないカラムに対するIS NOT NULLを含む複合WHEREで Iceberg または S3 table をクエリした際に発生するNOT_FOUND_COLUMN_IN_BLOCKexception を修正しました。#106443 (Shaohua Wang). - named collections を使用して
HTTPDictionaryのヘッダーを指定できるようになりました。#106459 (Jan Rada). CurrentThread::attachToGroupが途中で失敗したあと、ワーカースレッドが古い thread group に attached のまま残り、その結果、同じ thread 上の後続タスクがThread is already attached to a groupで失敗するケースを修正しました。#106462 (Mikhail f. Shiryaev).- ベクトル検索クエリがベクトル索引を使用し、さらに
minmaxなどの別のスキップ索引とuse_skip_indexes_on_data_read = 1を使用している場合に発生する exception を修正しました。#106473 (Shankar Iyer). - 不正な形式の
Avroenum 値が検証されるようになり、破損したAvroデータのデシリアライズ時に範囲外読み取りや abort を引き起こす代わりに、エラーとして拒否されるようになりました。#106476 (Miсhael Stetsyuk). _fileまたは_pathfilter を使って Iceberg tables から読み取る際に、進捗報告が過大になる問題を修正しました。従来は、total_bytes_to_readの Progress に、filter に関係なく manifest 内のすべてのファイルが含まれていました。#106491 (Pedro Ferreira).STORAGE_TYPE 'simple'をcache/directレイアウトと単一の文字列から成る複合キーで使用する Redisディクショナリで発生していたBad cast exceptionを修正しました。これにより、このようなディクショナリは正しく動作するようになり、simpleストレージ上の複合キーについては明確なエラーが報告されるようになりました。#106501 (Vladimir Cherkasov).f(const)の評価結果が NaN になる場合、たとえば負の定数に対するORDER BY sqrt(c0)のようなケースで、ORDER BY f(c0)を持つテーブルに対するWHERE c0 = constが行を返さなくなる不具合を修正しました。プライマリキー解析がすべてのグラニュールを誤って刈り込み、後続のクエリに対するクエリ条件キャッシュも汚染していました。#106507 (Groene AI).- 同順位の判定時に
ORDER BY ... COLLATEの照合順序を考慮しないLIMIT WITH TIESおよび小数のLIMIT WITH TIESを修正しました。照合順序上で等しいと見なされる行 (たとえば numeric collation における'1'と'01') がバイト単位で比較されていたため、一部の同順位の行が結果から誤って除外されていました。#106539 (Nihal Z. Miaji). - 入力が照合順序付き (
ORDER BY ... COLLATE) でソートされている場合に誤った結果を返していた、順序ベースのDISTINCT最適化および順序ベースのLIMIT BY最適化 (負のLIMIT BYを含む) を修正しました。照合順序上で等しいと見なされる行 (たとえば case-insensitive な collation における'a'と'A') は collation key に従って並べられるため、値としては隣接しません。そのため、collator が使用されている場合はこの in order optimization をスキップするようになりました。#106564 (Nihal Z. Miaji). - 暗黙の
_minmax_count_projection、明示的な aggregate projection、または通常の projection を持つテーブルに対するSELECT c, count() FROM t WHERE c GROUP BY cの誤った結果を修正しました。以前は、すべてのグループが定数キーと総行数を持つ 1 行に潰れていました。#106590 (Groene AI). - 第 2 引数が非定数タプルである
INで、第 1 引数に scalar subqueries を使用できなかった不具合を修正しました。#106610 (Yarik Briukhovetskyi). Memoryengine に対して、行ごとのデータには影響しないALTER TABLE <memory_table>コマンド、すなわちAPPLY PATCHES、APPLY DELETED MASK、MATERIALIZE STATISTICS、MATERIALIZE INDEX、MATERIALIZE PROJECTION、REWRITE PARTSを実行した際に発生していた例外Mutation ofMemorytable produced incomplete outputを修正しました。Memoryテーブルはこれらの構造を持たないため、このようなコマンドは no-op として扱われるようになりました。#106621 (Groene AI).- テキストフォーマット (CSV、TSV、JSONEachRow など) に
LowCardinality(DateTime)カラムをシリアライズする際、session_timezoneが無視される問題を修正しました。以前は、server 上でLowCardinality(DateTime)カラムが一度書き込まれると、その後そのようなカラムを書き出すすべてのクエリで、session_timezoneに関係なく、最初に使われた timezone の時刻文字列が出力されていました。#106634 (Groene AI). multiIfの中でアスタリスクを table function argument に渡すクエリ、たとえばnumbers(multiIf(*, ...), 2)で発生していたLOGICAL_ERROR“Trying to get name of not a column:ExpressionList” を修正しました。現在は、このクエリは解決不能な matcher としてUNSUPPORTED_METHODを返して拒否されます。#106647 (Groene AI).MergeTreeテーブルに、granule が 0 のスキップインデックス part と、ディスク上に空でない marks ファイルがある場合、Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)によってサーバーの起動に失敗する問題を修正しました。 #106675 (Groene AI).- ディレクトリ一覧取得で無制限の再帰を引き起こすような病的な
fileglob パターンを拒否するようにしました。再帰の最大深さは 1000 に制限され、これを超えるクエリは、サーバーがスタックオーバーフローでクラッシュする代わりにTOO_DEEP_RECURSIONエラーになります。 #106676 (Groene AI). if/multiIf条件が定数畳み込みによりConst(Nullable(Nothing))になる場合 (たとえば、arraySort(x -> x, [])[toNullable(1)]のように空配列に対して範囲外の添字を指定した場合) に、FunctionIf::executeForConstAndNullableConditionでBad cast from type DB::ColumnNothing to DB::ColumnVector<char8_t>が発生してサーバーが異常終了する問題を修正しました。 #106678 (Groene AI).- table function
inputが、クエリ内の複数箇所から参照される非 MATERIALIZED CTE でラップされているときに発生する例外'Trying to read from input() twice.'を修正しました。現在は、クエリプランニング時に明確なINVALID_USAGE_OF_INPUTエラーでクエリが拒否されます。inputは一度限りの client ストリームであり、クエリプラン内の単一のログソースからしか消費できません。 #106682 (Groene AI). EXPLAIN ... INSERT ... SELECT ... FORMAT ...のEXPLAIN出力にもFORMATが適用されるようにしました。SETTINGSがFORMATより前にある場合や、出力フォーマットがValuesの場合でも適用されます。 #101772 のフォローアップです。 #106686 (Alexey Milovidov).- 実際には workload resource へのアクセスが許可されていたクエリに対して、まれに誤って
RESOURCE_ACCESS_DENIEDエラー (“Scheduler queue with resource request is about to be destructed”) が発生する問題を修正しました。原因は、再利用されたスレッドローカルの request object に前回のリクエスト失敗時の状態が残っていたことでした。 #106690 (Alexey Milovidov). - NATS ライブラリ内の callbacks 経由で
INATSConsumer::onMsgが呼び出される処理と、INATSConsumerobject の破棄との競合を修正しました。 #106692 (Miсhael Stetsyuk). - 16 進または 8 進エスケープを含む正規表現に対して、
match、extract、extractAll、countMatchesが誤った結果を返す問題を修正しました。 #106709 (ofeliacode). - Keeper の内部 Raft TLS が
openSSL.client.verificationMode設定を反映するようになりました。以前は、この設定に関係なく Keeper 間の Raft 通信で常に peer certificate verification が有効だったため、noneは暗黙的に無視されていました。現在は、noneを指定すると Raft の peer-certificate verification が明示的に無効になり、設定が存在しない場合は従来どおりデフォルトで安全な動作が維持されます。noneを明示的に設定している構成では、upgrade 後は設定どおり Raft peer certificates の検証が行われなくなります。 #106726 (Antonio Andelic). SYSTEM RELOAD CONFIGにおける startup scripts の論理エラーを修正しました。さらに、SYSTEM RELOAD CONFIGで startup scripts を読み込むようにしました (現時点では private-only の機能です) 。 #106727 (Miсhael Stetsyuk).sumMap/-Mapcombinator が、カスタム名の数値型 (SimpleAggregateFunction(sum, T)やBoolなど) をILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summedとして拒否し、それまで動作していた集計を壊していた変更を元に戻しました。 #106729 (Nikita Fomichev).- 信頼できない入力から到達可能なフォーマットリーダーにおける、複数のメモリ安全性およびリソース枯渇の問題を修正しました。具体的には、ネイティブの Parquet リーダー の
DataPageV2の definition/repetition level-length 処理におけるヒープ境界外読み取り、深くネストしたスキーマを持つ Parquet ファイルでのスタックオーバーフロー、ならびに GeoParquet の WKB/WKT geometry と Avro の strings/bytes のパース時にmax_memory_usageを無視していた割り当てです。 #106739 (Raúl Marín). decodeHTMLComponentで、展開される HTML entity≫⃒または≪⃒を含む文字列をデコードする際の heap buffer overflow (server crash) を修正しました。この問題は、任意のユーザーが 1 回のSELECTで到達可能でした。 #106741 (Raúl Marín).- skipping indexes に対して
GRANULARITY 0を指定したCREATE TABLE、ALTER TABLE ADD INDEX、CREATE INDEXを、明確なBAD_ARGUMENTSerror で拒否するようにしました。以前は、これによりデバッグビルドでInconsistent AST formattingexception が発生していました。 #106783 (Groene AI). - 旧形式の
azure_blob_storagedisk で、Azure BACKUP/RESTORE が endpoint 設定を無視していた問題を修正しました。 #106784 (Julia Kartseva). - キーカラムが
LowCardinalityで、predicate 定数がLowCardinality(Nullable(...))の場合に、MinMaxstatistics による part の刈り込み中に発生していたBad castexception を修正しました。 #106793 (Groene AI). - パース中に exception (たとえば
MEMORY_LIMIT_EXCEEDED) が発生した際、カラムの不整合 (後でLOGICAL_ERRORにつながる) が起きる問題を修正しました。 #106802 (Azat Khuzhin). keeper_server.http_control.secure_portを設定した後、HTTPS client からのリクエストに対して server が HTTP response を返していた問題を修正しました。 #106822 (linjiayu1025-collab).- 非 ASCII の入力 byte を含む
parseDateTimeの論理エラーを修正しました。 #106856 (Pavel Kruglov). SHOW CREATE ROW POLICYが、他の keyword と一貫せずrestrictive/permissiveを大文字ではなく小文字で出力していた問題を修正しました。 #106865 (Valery Petrov).UNION内の空 table が原因で、UNIONを含む view に並列レプリカが適用されていなかったケースを修正しました。 #106900 (Igor Nikonov).input_format_allow_errors_num > 0のときに、切り詰められたProtobufdata を読み込むと server crash (SIGSEGV) する問題を修正しました。 #106905 (Andrey Tsarevskiy | Андрей Царевский ).- 集計 function argument に
Nullable型への cast が必要な場合、optimize_rewrite_aggregate_function_with_ifoptimization を伴う distributed queries で発生していたTHERE_IS_NO_COLUMNexception を修正しました。 #106908 (Yakov Olkhovskiy). - join キーに
Tuple、Array、またはMap内にネストされたVariantまたはDynamic型が含まれ、join の右辺に異なる値が 1 つしかない場合に、join ランタイムフィルタで発生する例外 (LOGICAL_ERROR) を修正しました。#106931 (Groene AI). - 重み配列に大きな整数値が含まれる場合に、
arrayLevenshteinDistanceWeightedおよびarraySimilarityで発生していた符号付き整数オーバーフロー (未定義動作) を修正しました。重み付き距離は、整数の重みに対してはより広い整数型で累積されるようになったため、大きな整数の重みでもオーバーフローせず、正確に保持されます。#106934 (Groene AI). - RocksDB ハンドルが解放された
EmbeddedRocksDBテーブルに対してTRUNCATEまたはDROPを実行した際に発生するサーバークラッシュ (null ポインタ参照) を修正しました。たとえば、以前のTRUNCATEによってデータディレクトリが空になったread_onlyテーブルで発生していました。#106940 (Groene AI). urlClusterなどの*Clusterテーブル関数から読み取る際、max_streams_for_files_processing_in_cluster_functions設定が非常に大きいと発生する例外 (LOGICAL_ERRORとして報告されるstd::length_error) を修正しました。ストリーム数は妥当な値に制限されるようになりました。#106946 (Groene AI).- 分散クエリがシャードに送信される直前にキャンセルされた場合に、
RemoteQueryExecutorで発生するサーバークラッシュ (DB::IConnectionsの null ポインタ参照) を修正しました。#106950 (Groene AI). - 非同期挿入のフラッシュ (
AsyncInsertFlush) クエリについて、system.processors_profile_logおよびsystem.query_logでelapsed_usが常にゼロになり、read_rows/read_bytesが過少計上されていた問題を修正しました。#106982 (Christoph Wurm). Mapバリアントを持つVariantカラムを含むソート済みブロックのマージ時に、そのローカルな格納順序がグローバル順序と異なる場合に発生するクラッシュ (Source column is not Map/SIGSEGV) を修正しました。#107011 (Groene AI).ReplicatedMergeTreeテーブルへの同期 insert 中に、挿入ブロックが完全に重複排除され、競合する part の重複排除ノードがすでに削除されていた場合 (たとえば同時実行のDROP PARTITIONによる場合) に発生する論理エラーconflicted_part_name.has_value()を修正しました。#107026 (Groene AI).- 同じソーステーブル上の 2 つの materialized view が同じターゲットテーブルに書き込み、依存 view がそのターゲットテーブルを読み取る場合に、
materialized_views_squash_parallel_insertsを有効にしているとINSERTで発生していた例外 (論理エラーthis->visited_views == right->visited_views) を修正しました。#107027 (Groene AI). UNION/INTERSECT/EXCEPTの一方のブランチがSparseシリアライズされたカラムを読み取り、もう一方のブランチが同じカラムをフル形式として読み取った場合 (たとえば materialized view へのプッシュ時) に発生していたBlock structure mismatch in UnionStep stream論理エラー (debug/sanitizer ビルドではサーバー abort、リリースビルドではCode: 49) を修正しました。#107041 (Groene AI).- 書き込みスキーマと一致しないカラムを持つ Delta Lake テーブルへの insert 時に
LOGICAL_ERROR例外が発生していた問題を修正しました (たとえば、subcolumns にフラット化されるNestedカラムや、明示的にカラムの一部だけを指定した table function の場合) 。このような insert は、今後は代わりにユーザー向けのINCOMPATIBLE_COLUMNSエラーで失敗します。#87402 をクローズしました。#107058 (Groene AI). - 遅延マテリアライゼーションによってソート対象のカラムより前に別のカラムが配置された場合に、
ORDER BY <numeric column> ... LIMIT nクエリで発生していたTYPE_MISMATCHエラー (“Cannot convert string … to type …”) を修正しました。top-K のしきい値は、今後は正しいソートカラムから読み取られます。#107060 (Groene AI). SHOW ROW POLICIESまたはSHOW MASKING POLICIESの後にFORMAT、SETTINGS、またはINTO OUTFILE句が続く場合に発生していた構文エラーを修正しました (例:SHOW ROW POLICIES FORMAT TabSeparated) 。#107061 (Groene AI).- 異なる型のカラム間で、解放済みのカラム名 (いわゆる「入れ替え」) を再利用する複合
ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO aの問題を修正しました。materialized part に誤った column type が記録されていたため、後続のSELECTがConversion between numeric types and IPv6 is not supportedで失敗していました (または debug builds では part の読み込み時に中断していました) 。#107064 (Groene AI). - 境界配列に
NaNが含まれている場合のroundDown関数の非決定論的な結果を修正しました。同じ入力値でも、バッチ内の周囲の行に応じて有限の境界またはNaNが返ることがありました。今後はNaNの境界は無視されるため、結果は有限の境界だけに依存します。#107065 (Groene AI). - 補間された分位点が小数を含むものの範囲内である場合に、
DateおよびDateTime引数に対してquantileTDigestとquantileTDigestWeightedがDECIMAL_OVERFLOWを投げていた問題を修正しました (たとえば、すべての値がその型に収まる場合のquantileTDigestWeighted(date, weight)) 。小数を含む結果は、今後はquantilesTDigestWeightedと同様に結果型に切り捨てられます。実際に範囲外の値については、引き続きエラーが発生します。#106722 をクローズしました。#107066 (Groene AI). - カスタムのトリム用文字セットが 16 文字を超える場合に、
trimLeft、trimRight、trimBoth(および別名のltrim、rtrim、trim) がTOO_LARGE_STRING_SIZEを投げていた問題を修正しました。今後は長さに関係なくトリムセットが再びサポートされます。#107071 (Nikita Fomichev). Enum8/Enum16型定義において、範囲外の整数値が黙って切り詰められていた問題を修正しました。Enum8('a' = 200)は、黙ってEnum8('a' = -56)を作成する代わりに、今後はARGUMENT_OUT_OF_BOUNDを投げます。#107081 (Groene AI).- 複数の行が先頭のカラムで同値になった場合に、
Nullableカラムでソートする複数カラムのORDER BY ... LIMITクエリで誤った行順序になっていた問題 (および debug builds でのLOGICAL_ERROR“Rows are not sorted with permutation”) を修正しました。#107094 (Groene AI). Dynamic上の JOIN によって構築されたDynamicカラムに対して関数を実行した際に発生するLOGICAL_ERROR(Expected the argument N to have X rows, but it has Y) を修正しました (たとえば、RIGHT/FULL JOINの非結合行や、JOIN にデコリレートされた相関EXISTSサブクエリの場合) 。 #107095 (Groene AI).- 設定の再読み込み時に ZooKeeper セッションが不必要に再作成される問題を修正しました。 #107096 (Azat Khuzhin).
- アクセス エンティティ の更新時に、ZooKeeper の読み取り中に mutex を保持し続けないようにしました。 #107097 (Azat Khuzhin).
adaptive_write_buffer_initial_sizeが極端に大きい値に設定されている場合に、MergeTreeテーブルへのINSERTで発生するLogical error: Too large size passed to allocator例外を修正しました。adaptive write buffer の初期サイズは、現在では buffer の最大値に制限されます。 #107104 (Groene AI).LowCardinalityメンバーを含むVariant定数を、非単調な決定論的関数である key expression を持つ key column と比較した際に発生するLOGICAL ERROR(Bad cast from type DB::ColumnString to DB::ColumnLowCardinality) を修正しました (たとえば、sipHash64(col)に対するminmaxスキップ索引) 。 #107111 (Groene AI).JOIN ... USINGの key に対する修飾付き asterisk (t.*) が aggregate function に渡され、outer JOIN の反対側がNullablekey を持つ場合 (join_use_nulls = 0) に発生する、Bad cast from type DB::IColumn const* to DB::ColumnNullable const*という論理エラーを修正しました。 #107129 (Groene AI).- コメント変更を
MODIFY SETTING/RESET SETTINGと混在させたALTER TABLE ... ON CLUSTERバッチ (たとえばMODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123) が leader レプリカ にのみ適用され、他の レプリカ との不整合が生じる問題を修正しました。あわせて、位置指定またはカラムごとのSETTINGSを伴うMODIFY COLUMN ... COMMENTが、ローカルのコメントのみの メタデータ 変更として誤分類される問題も修正しました。これにより、カラムの並べ替えが replicated metadata に反映されず、レプリカ の再起動時にINCOMPATIBLE_COLUMNSを引き起こす可能性がありました。 #107142 (Groene AI). - 再帰項の内部で修飾付き asterisk matcher (たとえば
x.*) が名前で recursive CTE を参照した場合に発生するLOGICAL_ERROR(“Table expression … data must be initialized”) を修正しました。こうした matcher は、その位置で修飾付きカラム (x.a) や無修飾 matcher (*) と同様に、再帰 table のカラムへ展開されるようになりました。 #107144 (Groene AI). PREWHEREより前に on-fly mutations (apply_mutations_on_fly) または patch parts が行を filter した場合に、query condition cache によって誤った query results が返される問題を修正しました。apply_mutations_on_fly = 1で読み取るクエリが cache を汚染し、その結果、後続のapply_mutations_on_fly = 0かつ同じ predicate を使うクエリが、本来読み取るべき mark をスキップして、返される行数が少なすぎることがありました。同じ修正は、PREWHEREの前に filter として追加される row-level security policies にも適用されます。制限の厳しい row policy の下で実行されたクエリが、その policy なしで同じ predicate を使用する後続クエリ向けの cache を汚染する可能性がありました。 #107145 (Groene AI).BACKUPからAzureBlobStorageへの修正: バックアップ内でデータファイルをコピーすると、宛先オブジェクトがバックアップディレクトリの外に書き込まれていました。S3宛先での Backup オブジェクトの存在確認は、プレフィックス一覧ではなく正確なHeadObjectリクエストを使うようになり、類似したプレフィックスを持つキーの誤一致を防ぐようになりました。#107153 (Pablo Marcos).quantileExactExclusive、quantilesExactExclusive、quantileExactInclusive、quantilesExactInclusiveにおける符号付き整数オーバーフローを修正しました。これにより、広い値域にまたがるInt64入力で誤った結果が返される可能性がありました。#107154 (Groene AI).- リフレッシャブルmaterialized view に、修飾なしの名前が一時テーブルまたは CTE 名と一致する
REFRESH ... DEPENDS ON <name>依存関係がある場合、再起動時に server がクラッシュループに陥る可能性があったLOGICAL_ERROR(“Unexpected exception in refresh scheduling”) を修正しました。#107156 (Groene AI). - config の再読み込み時に起動スクリプトが実行されないようにしました。これは意味的に誤っており、ユーザーの想定にも反するうえ、エラーを起こしやすいことが分かっていたためです。#107187 (Miсhael Stetsyuk).
- 事前予約における
queue_sizeの最大値に上限を設定しました。#107205 (Elian Gidoni). group_by_use_nulls設定を有効にした状態でgrouping関数を使用するクエリで発生していたArgument ... of GROUPING function is not a part of GROUP BY clauseエラーを修正しました。#107206 (Nikolai Kochetov).max_streams_for_union_step設定によってユニオンパイプラインが縮小された場合に、optimize_read_in_orderを有効にしたUNION ALLに対するORDER BYで結果順序が不正になる問題を修正しました。プランがソート済みの UNION 出力ストリームに依存している場合は、この縮小をスキップするようになりました。#106880 をクローズしました。#107208 (Vladimir Cherkasov).- server の終了処理の後半でプロキシ設定を解決する際に、null ポインタ参照が発生する可能性があった問題を修正しました。#107231 (Pedro Ferreira).
- non-replicated
MergeTreeテーブルで、従来の並列レプリカを有効にした lightweightUPDATEクエリの問題を修正しました。#107246 (Groene AI). Icebergテーブルへの insert 時に、書き込み block のカラム名が最新スキーマのフィールド ID と一致しない場合に発生していた server の異常終了 (std::out_of_range論理エラー) を修正しました (たとえば、iceberg_metadata_staleness_msのウィンドウ内で同時実行のライターがカラム名を変更した後など) 。これにより、insert は server をクラッシュさせる代わりに、通常のクエリエラーで失敗するようになりました。#107279 (Groene AI).max_*_thread_pool_free_size > 0の場合に、静的 thread pools が idle threads を無期限に保持し続けることで、server および local のシャットダウンが停止する不具合を修正しました。#107291 (Miсhael Stetsyuk).s3table function が、小文字の位置指定partition_strategy(例:hive) を暗黙に無視していた問題を修正しました。#107297 (Julia Kartseva).- 並列 block マーシャリングにおける
low_cardinality_allow_in_native_format=0の処理を修正しました。#107319 (Azat Khuzhin). use_skip_indexes_for_top_k最適化が有効で、ソートカラムにminmaxスキップ索引を持つパーツから論理削除DELETEによって行が削除されている場合に、ORDER BY <col> LIMIT nが誤った結果 (しばしば空) を返す問題を修正しました。これにより、論理削除されたパーツの古いminmaxが、実際の上位行を保持しているパーツより優先して評価されることはなくなりました。#107320 (Groene AI).- ClickHouse Keeper で、
last_snapshot(およびmntrのzk_latest_snapshot_size) で報告されるスナップショットのメタデータが、古いスナップショットや重複したスナップショットをインストールした後に巻き戻ることがある不具合を修正しました。これにより、同じ index を持つローカルのスナップショットが、ピアにストリーミング中または S3 にアップロード中の登録済みスナップショットファイルをその場で上書きしてしまう可能性もありました。#107321 (Antonio Andelic). MsgPack、BSON、ORC、Parquet、JSON、DeltaLake、Iceberg、Paimonフォーマットで、深くネストしたスキーマまたは値を読み取る際に発生しうるサーバーのスタック overflow (crash) を修正しました。このような深くネストした入力は、現在では例外として拒否されます。#107341 (Raúl Marín).SYSTEM SYNC DATABASE REPLICA ... STRICTにおける発生しうる論理エラーを修正し、データベースレプリカに対してSTRICTmodifier が実際に有効になるようにしました。#107344 (Pedro Ferreira).DeltaLaketable の読み取り時に、ClickHouse のスキーマで指定されたカラムが Delta の column mapping に存在しない場合 (たとえば Delta log でカラム名が変更または削除された後) に、debug/sanitizer builds でサーバーが abort する問題を修正しました。代わりに、query は捕捉可能なINCORRECT_DATAerror で失敗するようになりました。#107347 (Groene AI).- 補完対象カラムより前の
ORDER BYカラムでCOLLATE照合順序が使われている場合に、ORDER BY ... WITH FILLが余分な行を生成する問題を修正しました。現在は、その照合順序を用いたソートプレフィックスで行がグループ化され、sort order と一致するようになりました。#107365 (Groene AI). - metadata versions をまたいで既存の
schema-idが別のスキーマに再割り当てされている Iceberg table を読み取る際に発生する crash (debug builds ではLOGICAL_ERROR) と、誤った結果を黙って返す不具合 (release builds) を修正しました。このような metadata は現在ICEBERG_SPECIFICATION_VIOLATIONで拒否されます。#107370 (Groene AI). VariantまたはDynamicカラムに、空でない単一の variant と NULL が格納されており、かつ関数が入力カラムをそのまま返す場合に、toStringやconcatなどの関数を適用すると発生するLOGICAL_ERROR(Variant N (T) has size X, but expected Y) を修正しました。#107374 (Groene AI).- scalar subquery に同じ table を読み取るネストした subqueries が含まれている場合に、並列レプリカで発生しうる
Logical error: 'Duplicate announcement received for replica number N'を修正しました。#107381 (Groene AI). - 実行時に変更可能な server settings (
max_server_memory_usage、mark_cache_size、max_concurrent_queries、thread pool sizes など) について、getServerSettingがsystem.server_settingsの報告内容と一致する、現在有効な実際の値を返すように修正しました。#107388 (Alexey Milovidov). Decimalのサイズ引数を持つarrayResizeを修正しました。サイズは、生の未スケーリング表現ではなく実際の値として解釈されるようになりました (例:arrayResize([1, 2, 3], 1.5::Decimal(2, 1))は 1 要素を返します) 。 #107389 (Alexey Milovidov).use_strict_insert_block_limitsが有効な場合に、Aliasテーブルへの非同期INSERTで発生していたLOGICAL_ERROR(block.rows() == getRows()) を修正しました。 #107400 (Groene AI).- 論理エラー (
Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8) を修正しました。これは、論理和 (部分述語) のプッシュダウン最適化で、JOIN によって型が拡張されたUSINGキーに条件がプッシュダウンされた場合に発生していました。あわせて、未知の識別子を参照する定数畳み込み可能なif/multiIf分岐を含むJOIN ... USINGクエリで識別子を解決する際に、analyzer で発生していたサーバークラッシュ (segmentation fault) も修正しました。 #107407 (Groene AI). - 範囲外のイベント型を持つ細工された集約関数の状態を finalize する際に
windowFunnelで発生していた heap buffer overflow (サーバークラッシュ) を修正しました。この問題は、任意のユーザーが単一のSELECTで到達可能でした。 #107412 (uwezkhan). - 非有限の浮動小数点値 (
nanやinfなど) がprometheusQuery/prometheusQueryRangeテーブル関数の timestamp/duration 引数として渡された場合の未定義動作を修正しました。このような引数は、無効な timestamp を生成する代わりにBAD_ARGUMENTSを返すようになりました。 #107417 (Groene AI). - PostgreSQL のデータベース名またはテーブル名に大文字が含まれている場合に、
MaterializedPostgreSQLが変更のレプリケーションを黙って停止してしまう問題を修正しました (pgoutputコンシューマーが、大小文字を保持する publication と一致しない、引用符なしの小文字の publication 名を要求していました) 。 #107423 (Alexey Milovidov). - キー式 (
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 (Groene AI). 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形式に rewrite しないようになりました。 #107430 (Groene AI).- ローカルディスク上のオブジェクトストレージのディレクトリ (例:
localディスク上の Iceberg table) を一覧表示している間にファイルが同時に置き換えられると、誤ってfilesystem error: in last_write_time: No such file or directory例外が発生する問題を修正しました。同時に削除されたエントリは、一覧表示を中断する代わりに省略されるようになりました。 #107432 (Groene AI). optimize_if_transform_strings_to_enum = 1のとき、最適化された文字列リテラル上のif/transform式が、分散テーブルまたは並列レプリカ上のGROUP BYまたはORDER BYキーである場合に発生していたTHERE_IS_NO_COLUMNエラーを修正しました。 #107455 (Groene AI).- distinct キーの集合を初期化している最中に割り当てが失敗した場合 (たとえばメモリ制限に達した場合) に発生し得た、
DISTINCT処理中のまれなサーバークラッシュを修正しました。#107467 (Groene AI). - 保留中の on-fly
UPDATEがあるテーブルでapply_mutations_on_fly = 1を使用し、その対象カラムが、ALTER MODIFY COLUMN ... LowCardinality(...)mutation より前の on-flyUPDATEで関数入力としても参照されている場合に発生していたLOGICAL_ERROR: Unexpected return type from materialize(および同様の型不一致エラー) を修正しました。#107475 (Groene AI). S3経由でDeltaLakeテーブルを読み取る際に、AWS STS credentials が古いままになる問題を修正しました。エンジンはスナップショットの refresh 時に、更新済み credentials を持つS3クライアントを保持するようになり、長時間実行される読み取りが STS トークンの TTL 失効後に失敗しなくなりました。また、STS assume-role credentials provider は、STS を使用するあらゆるS3アクセスでの credential refresh にも対応するようになりました。#107480 (Elmi Ahmadov).CREATE TABLE ... CLONE AS、ATTACH PARTITION ... FROM、またはMOVE PARTITION ... TO TABLEによって通常のMergeTreeからReplacingMergeTree、SummingMergeTree、AggregatingMergeTreeに part を取り込んだあと、SELECT ... FINALおよびOPTIMIZE TABLE ... FINALが重複行を返していた問題を修正しました。ソースと宛先の engine が異なる場合、取り込まれた part の merge level は 0 にリセットされるようになり、宛先側で次回の merge 時に重複排除されます。#107481 (Groene AI).- PostgreSQL ワイヤプロトコルのパーサーにおける整数 underflow を修正しました。長さフィールドが 4 未満のメッセージにより
size - 4のラップアラウンドが発生し、過大なresize/ignoreにつながっていました。#107485 (uwezkhan). - ReplicatedMergeTree で quorum を待機している間のクエリキャンセルが、より適切に追跡されるようになりました。#107513 (Nikita Taranov).
PARTITION BYキーを持つテーブルに対して、より大きな expression 内に含まれたIN/NOT INサブクエリ (たとえばWHERE (c0 IN (SELECT ...)) != 0) を含むクエリを実行した際に発生していたNot-ready Set is passed as the second argument for function 'in'(LOGICAL_ERROR) を修正しました。#107515 (Groene AI).- 非同期挿入の flush 経路 (
async_insert = 1の場合) で、currentUser(),user(),SESSION_USER,authenticatedUser()が空文字列に評価されていた問題を修正しました。これにより、これらの関数を参照するDEFAULT/MATERIALIZEDカラム expression や materialized view で、挿入ユーザーではなく空文字列が警告なしに保存されていました。#107541 (Groene AI). enable_analyzer = 1(デフォルト) では、別のデータベースにしか存在しないテーブルを修飾なしの名前でクエリした場合に、右テーブルが提案されるようになりました。たとえばSELECT * FROM functionsはMaybe you meant system.functions?と表示します。以前は新しいアナライザはヒントのないUnknown table expression identifierエラーを返していましたが、古いアナライザはすでにこの有用な提案を出していました。#107550 (Groene AI).- rapidjson ライブラリ (
prettyPrintJSON、JSONMergePatch、および rapidjson JSON パーサー) が使用するメモリを memory tracker に計上するようにし、病的な入力が無制限に割り当てを行う代わりにMEMORY_LIMIT_EXCEEDEDで拒否されるようにしました。#107555 (Raúl Marín). optimize_prewhere_after_pushdownが有効な状態で、明示的なPREWHEREとWHEREの両方を指定してfile()、url()、またはオブジェクトストレージソースをクエリした際に発生していたLOGICAL_ERROR(updateFormatPrewhereInfo called more than once) を修正しました。#107568 (Groene AI).- 分散クエリプランをローカルで実行した場合 (
make_distributed_plan+distributed_plan_execute_locally) に、log_formatted_queries = 1で発生し得たクラッシュ (null pointer dereference) を修正しました。#107570 (Groene AI). - 分散プランクエリ (
make_distributed_plan = 1) の終了処理中に、ワーカーのステータスチェックが次回のチェックを再スケジュールできなかった場合 (たとえば、シャットダウン時のCANNOT_SCHEDULE_TASKやMEMORY_LIMIT_EXCEEDED) に発生していたサーバー異常終了 (std::terminate, signal 6) を修正しました。これにより、クエリは正常に失敗し、サーバーはそのまま稼働し続けます。#107575 (Groene AI). - Elf および DWARF のパースに、不足していた bounds チェックを追加しました。#107579 (Michael Kolupaev).
- ORC リーダーに不足していた bounds チェックを追加しました。#107580 (Michael Kolupaev).
Replicateddatabase 内のTimeSeriestable を含むRENAME TABLE、RENAME DATABASE、またはCREATE OR REPLACE TABLEで発生し得た例外 (Digest does not match論理エラー) を修正しました。TimeSeriestable のリネームがサポートされるようになりました。#107583 (Groene AI).- MySQL プロトコルのポートにおける、未認証でメモリ枯渇を引き起こせるサービス拒否攻撃を修正しました。#107599 (Shaohua Wang).
Replicateddatabase 内のTimeSeriestable に対するDROP TABLEを修正しました。従来は内部 table が残存し、バックグラウンドの drop task が無期限に再試行され続けていました (DROP TABLE ... SYNCはハングしていました) 。#107604 (Groene AI).- replicated part fetch プロトコルにおける 2 件のパストラバーサル問題を修正しました。これにより、悪意のあるレプリカが part directory の外にファイルを書き込める可能性がありました。#107606 (Antonio Andelic).
- Azure 経由で Delta Lake table を読み取る際の ‘Account must be specified error’ を修正しました。#107620 (Smita Kulkarni).
- プレーンな
MergeTreetable に対するALTER TABLE ... REPLACE PARTITIONで、サーバー再起動後に置き換え済みの part が復活し、table が置換後の行と古い置換済みの行の両方を返してしまっていた問題を修正しました。#107623 (Groene AI). - クエリを
enable_analyzer = 0で実行している際に、ターゲットがDistributedtable の materialized view を読み取るとサーバーがクラッシュする問題を修正しました。#107653 (Groene AI). - 複数の quotas が同じ user または role に割り当てられている場合、これまでは 1 つの quota のみが適用され、しかも非決定論的に選ばれていましたが、今後はそれらすべてが同時に適用されます (いずれか 1 つでも超過するとクエリは拒否されます) 。
SHOW QUOTAとsystem.quota_usageには、current user に対して適用されているすべての quotas が表示されるようになりました。#107664 (Alexey Milovidov). s3およびその他のオブジェクトストレージのテーブル関数で、キー・バリュー引数が重複した場合にBAD_ARGUMENTSではなくLOGICAL_ERRORが送出される問題を修正しました。例:s3('http://...', format = 'CSV', format = 'TSV')。 #107670 (Groene AI).MySQL Connector/J8.2.0 以降 (9.x を含む) で MySQL インターフェイスを使用できなかった問題を修正しました。OKパケットのinfoフィールドは、MySQL server と同様に長さエンコードされるようになり、JDBC driver が接続できるようになりました。 #107693 (Alexey Milovidov).make_distributed_plan = 1を指定したクエリで、関数でラップしたキー同士を結合する際、両辺に共通の型がない場合 (たとえば右側のキーがUInt64のON intDiv(-1, t1.key) = t2.key) にLOGICAL_ERROR(“Input nodes size mismatch in dag”) が発生する問題を修正しました。 #107701 (Groene AI).- Apache Arrow Java < 19.0.0 (Apache Spark を含む) が生成した、空の
String/Binaryカラムを含む Arrow/ArrowStream データの読み取り時に、INCORRECT_DATAが送出される問題を修正しました。 #107764 (Raúl Marín). - クエリが、事前に型変換されていない別型のリテラルとカラムを比較した場合 (例:
numeric_col IN (SELECT '5')またはstring_col IN (SELECT 5)) に、countminカラム STATISTICS の推定でBAD_GET例外 (“Bad get: has String, requested UInt64”) が発生する問題を修正しました。 #107793 (Groene AI). - リモートのテーブル構造を推定している間にブリッジが応答しなくなると、
odbcおよびjdbcテーブル関数が数分間ハングし、クエリのキャンセル (KILL QUERY,max_execution_time) を無視する問題を修正しました。 #107809 (Alexey Milovidov). s3/gcsテーブル関数の secret 引数で、位置指定形式と名前付き形式を混在させた不正なクエリ (例:s3('url', 'a', 'b', secret_access_key = 'c')) をフォーマットする際に、例外 (Logical error: 'index >= result.start') が発生する問題を修正しました。 #107818 (Groene AI).LowCardinalityカラムに対して set スキップ索引 が granule をプルーニングしない問題を修正しました。 #107868 (Konstantin Bogdanov).- サーバー設定
insert_deduplication_version = new_unified_hash使用時に、挿入の重複排除がStringおよびArrayカラムに対して誤ったハッシュを計算する問題を修正しました。重複排除ハッシュが挿入された block 内での行の位置に依存していたため、同一の insert でも重複排除に失敗することがありました。 #107915 (Sema Checherinda). - JIT-compiled なソートコンパレータで符号拡張が欠けていたことにより、macOS (Apple Silicon) で複数のソートキーを持つ
Nullableカラムに対するORDER BYの結果が不正になる問題を修正しました。 #107973 (Raúl Marín). - 複数スレッドで
Dynamicカラムを読み取る際の性能低下を修正しました。原因は #100730 です。#107942 をクローズします。 #107997 (Pavel Kruglov). - 非推奨のデータレイク設定
storage_catalog_urlが、catalog guard によって正しく拒否されるようになりました (従来はstorage_catalog_typeとstorage_aws_access_key_idのみがチェック対象でした) 。また、エラーメッセージにすべての非推奨設定が表示されるようになりました。#108040 (Alexey Milovidov). LIKEクエリが、スパースに格納されたカラムに対して direct-read fallback path 経由でtext索引を読み取る際に発生していたBad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>論理エラーを修正しました。#108068 (Groene AI).- 空の batch であっても、アクセスキャッシュの batch-finished handlers が常に実行されるようにしました。#108124 (Azat Khuzhin).
UNION ALLを含む一部のクエリで発生していたLOGICAL_ERROR(Column identifier is already registered) を修正しました。#100770 (Shaohua Wang).- server のシャットダウン中に workload storage mutex で発生していた use-after-free を修正しました。#101447 (Tuan Pham Anh).
SharedカタログでのALTER DATABASE MODIFY COMMENTにおけるデッドロックを修正しました。#103683 (Nikolay Degterinsky).- 空の Unicode 引用識別子では、
CANNOT_PARSE_QUOTED_STRINGではなくSYNTAX_ERRORが発生するようになりました。#104173 (leonard9893). timeSeries*aggregate functions の元の parameter 型を保持することで、AggregateFunctiontype がテーブルの再 Attach や 並列レプリカをまたいでも正しく往復変換されるようにしました。#104812 (Vitaly Baranov).- 並列レプリカ使用時に
serialize_query_plan下のマテリアライズド CTE で発生していたLOGICAL_ERRORを修正しました。#104896 (Igor Nikonov). - staleness (window) parameter が
INT64_MAXに近い場合にtimeSeries*ToGridfunctions で発生していた、符号付き整数の overflow を修正しました。#105319 (Groene AI). compatibilitysetting の値によってapply_row_policy_after_finalがfalseに戻されることがなくなり、row policies がFINALとともに常に正しく適用されるようになりました。#105637 (Yarik Briukhovetskyi).posix_spawnstub でSETPGROUP/RESETIDS/SETSIGDEFを尊重するようにし、clickhouse chdig clientを修正しました。#105858 (Azat Khuzhin).- merge/mutate executor が初期化されていない場合に、projections に対する merge-tree の整合性チェック中に発生していた例外を修正しました。#105919 (Mikhail Artemenko).
- projections に対する索引解析中、
minmax索引が親 part ではなく projection 自体から読み込まれるようになり、正しい結果が得られるようになりました。#105940 (Mikhail Artemenko). materialize(monotonic_chain(...))に対するaddMonotonicChainで発生していた例外を修正しました。#106050 (Nikolai Kochetov).MASKING POLICYの依存オブジェクトを含むバックアップでRESTOREが失敗する問題を修正しました。#106086 (Julia Kartseva).prefer_column_name_to_aliasが有効な場合に、SQL user-defined functions の展開中に発生する可能性があるメモリ破損を修正しました。#106121 (Nikolai Kochetov).- bridge connection を使用する Dictionary は、server の再起動後に接続を再確立して再ロードされるようになりました。#106151 をクローズしました。#106152 (Pedro Ferreira).
LocalObjectStorageのファイルシステムキャッシュを修正しました。#106239 (Kseniia Sumarokova).use_delayed_remote_sourceを使用する table function の遅延リモートログソースを修正しました。#106470 (Nikolay Degterinsky).- グリッド開始前の timestamp および window 外の timestamp に対する
timeSeriesLastToGridを修正しました。#106504 (Vitaly Baranov). #106577 (Vitaly Baranov). - クエリパラメータを含む関数名で発生する
LOGICAL_ERROR(Inconsistent AST formatting) を修正しました。#106635 (Vitaly Baranov). - distributed plan task の deserialization 前に table が削除された場合に発生する論理エラーを修正しました。#106944 (Alexander Gololobov).
NullableのGROUP BYキーで厳密比較を使用するようにしました。#107050 (Nikolai Kochetov).- table function の argument がカラム expression ではない場合 (たとえば
multiIf/CASEの未解決の*matcher) に発生するLOGICAL_ERROR(Trying to get name of not a column) を修正しました。#107411 (Alexey Milovidov). - 多数の異なる無効な time-zone 名が処理された際に、time-zone cache (
DateLUT) が無制限に増大する問題を修正しました。#107464 (Alexey Milovidov). - 通常の
MergeTreemutation を完了として報告する前に、part_logエントリを書き込むようにしました。#107741 (Azat Khuzhin). arrayFoldが、不正な入力に対して array argument の妥当性をチェックするようになりました。#107932 (Michael Kolupaev).MergeTreepart の cached skip-index archive reader における、まれに発生する data race と use-after-free の可能性を修正しました。これは、part の移動またはリネーム中にクエリが skip indices を読み取った場合に発生することがありました。#107995 (Raúl Marín).PREWHERE使用時のMapsubcolumns のパフォーマンス低下を修正しました。#107988 (Pavel Kruglov).- タイムゾーン付きの
parseDateTimeBestEffortが、toString(Nullable(DateTime64))の NULL 行でCANNOT_PARSE_DATETIMEを投げる問題を修正しました。#108310 (Yarik Briukhovetskyi). ArrowFlightの table function と engine で、オプションのdatasetキーを省略した named collection がNo such key 'dataset'エラーで拒否される問題を修正しました。#108041 (Alexey Milovidov).CODECまたは engine 宣言内で、引数を取らない window function に対して発生するInconsistent AST formatting論理エラー (例:CODEC(cume_dist() OVER (...))) を修正しました。これにより、この種の関数は括弧を保持するようになり、クエリがフォーマット/parse の往復変換を通過できるようになりました。#107806 (Alexey Milovidov).- 区切り文字を含む needle を指定した
hasTokenが、BAD_ARGUMENTSを返さずにテキスト索引経由で結果を黙って返してしまう問題を修正しました。#108189 (Jimmy Aguilar Mena). - 設定
use_skip_indexes_on_data_readは、compatibility設定を通じて 26.1 より前の既定値 (false) に戻せるようになりました。これにより、on-data-read パスによってminmax/set/bloom_filterのスキップ索引における mark-range pruning が機能しなくなる性能劣化への回避策が提供されます。#108330 (egor romanov). remote/remoteSecureに渡した named collection のdatabase/db上書きが定数の database 名でない場合 (例:remote(nc, database = (SELECT 1))) に発生しうるクラッシュ (null pointer dereference) を修正しました。これにより、クエリはクラッシュするのではなく、明確なエラーで失敗するようになりました。#108271 (Groene AI).- ZooKeeper connection が不適切なタイミングで失われた場合に、リフレッシャブルmaterialized view が停止したままになる問題を修正しました。#108234 (Michael Kolupaev).
- 既定値で埋められた
Array(Tuple(...))カラムの読み取り時に発生するBad cast from type DB::ColumnVector<...> to DB::ColumnTupleを修正しました。これは、たとえばALTER TABLE ... ADD COLUMNの後や、その場で適用された未完了のALTER TABLE ... CLEAR COLUMNmutation の後に起こることがありました。#107232 (Groene AI). - 共通スーパータイプが
DynamicのJOIN ... USINGキーへの明示的な参照を aggregate function に渡したときに発生するBad cast from type DB::ColumnDynamic to DB::ColumnNullable論理エラーを修正しました。たとえばcount(t.key) IGNORE NULLSのようなケースです。#107289 (Groene AI). - 未適用の論理更新
UPDATEパッチが残っているパーティションに対してREPLACE PARTITION、MOVE PARTITION、DETACH PARTITION、またはDETACH PARTを実行した際、通常の (non-replicated)MergeTreeでデータが黙って失われる問題を修正しました。これらの操作は、ReplicatedMergeTreeと同様にコマンドを拒否するようになりました。#107386 (Groene AI). Dynamicな key を持つMapに対するhasで、lookup 引数がLowCardinalityの場合に発生するクラッシュ (リリース build では SIGSEGV、デバッグ build では型不一致 assertion) を修正しました。例:has(map('a'::Dynamic, ...), toLowCardinality('b'))。#107956 (Groene AI).TOターゲットテーブルで、ビューのSELECTが生成するものよりも広いEnumを持つカラムが宣言されている materialized view への insert 時に発生していたLOGICAL_ERROR(“Block structure mismatch … betweenConvertingTransformandRemovingReplicatedColumnsTransform”) を修正しました。これにより、有効なEnumの拡張が正しく適用されるようになりました。#107648 (Groene AI).- 同じ式に展開される複数の
ALIASカラムを持つDistributedテーブルにクエリする場合 (または並列レプリカを使用する場合) に、それらをORDER BY/GROUP BY/HAVINGとあわせて参照すると発生していたNUMBER_OF_COLUMNS_DOESNT_MATCHエラーを修正しました。#107913 (Yakov Olkhovskiy). - 入力文字列が 32768 バイトを超え、文字セットを検出できない場合に、
detectCharsetおよびdetectLanguageUnknown関数で発生していた未定義動作 (null ポインタがmemcpyに渡される) を修正しました。#108250 (Groene AI). Int64の範囲限界に近い極端なDateTime64値に対して、hourおよびminute単位でdateDiffを使用した際に発生していたsigned integer overflow(未定義動作) を修正しました。#108229 (Groene AI).- 空のマージ済みパーツに対するテキスト索引で発生していた
Too many marksを修正しました。#106867 (Azat Khuzhin). ALTER UPDATE col = ... WHERE <cond>で条件が非定数または false で、その後にALTER MODIFY COLUMN col <new type>を実行した場合に、apply_mutations_on_fly = 1のもとでカラムを読み取る際に発生していたLOGICAL_ERROR(“Unexpected return type from if”) を修正しました。#108128 (Groene AI).Array(Dynamic)またはArray(Variant)をaccurateCastOrNullでQBitに CAST した際に発生していたサーバー abort (IColumn::insertFromにおけるLogical error) を修正しました。例:accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')。#108288 (Groene AI).DESCRIBE TABLE (...) AS ...でサブクエリの後にエイリアスが続く場合に発生していた構文エラーを修正しました。#100205 (Yarik Briukhovetskyi).getClientHTTPHeaderは非決定論的として正しく扱われるようになり、その結果がクエリ結果キャッシュで誤って再利用されなくなりました。#108029 (Alexey Milovidov).
ビルド/テスト/パッケージングの改善
delta-kernel-rsをdefault-engine-native-tlsfeature 付きでビルドし、その HTTP client (reqwest) が ClickHouse にすでにリンクされている OpenSSL を再利用できるようにしました。これはnative-tlsの有効化としては一部にとどまります。object_storeは引き続きreqwest/rustls-tls-native-rootsを強制するため、reqwestは結果としてnative-tlsとrustlsの両方の backend を持つことになります。さらに、ringは依然としてobject_store経由でコンパイルされるため (rustls経由の推移的依存関係と、AWS リクエストの HMAC 署名向けの直接利用の両方) 、delta-kernel-rsは現時点では MSan では無効のままです。また、ringの手書きアセンブリは MSan が必要とするシンボルを生成しません (arrow-rs-object-store#585 でアップストリーム追跡中) 。 #96856 (Austin Bonander).clickhousebinary に対し、PGO (Profile-Guided Optimization) と BOLT (Binary Optimization and Layout Tool) によるリンク後最適化を追加しました。profiles は CI workloads から収集され、release ビルド時にベストエフォートで適用されます。どちらの stage でも、profile が stale であるか互換性がない場合は、非最適化の出力に fall back します。現時点では、PGO による効果は確認されていません。 #100938 (Alexey Milovidov).clickhouse keeper-benchに--storagemode を追加し、KeeperStorageを in-process (network、raft、ステートマシンなし) で benchmark できるようにしました。設定には、network mode と同じsetup/generatorconfig セクションを使用します。 #103081 (Michael Kolupaev).ENABLE_AWS_S3=OFFでのビルドを修正しました。 #105390 (Yue Ni).mongo-cxx-driverを r4.3.0 に更新しました。 #105522 (Konstantin Bogdanov).- RapidJSON に対するビルドを修正しました。 #105674 (Ilya Golshtein).
- 広く使われている base/ ヘッダーから推移的 include を削除し、vendor 提供の
Poco/Logger.hから未使用コードを除去することで、ビルドを高速化しました。 #105702 (Raúl Marín). libxml2を 2.15.1 から 2.15.3 に更新しました。 #105985 (Konstantin Bogdanov).- Poco 内で
expat2.8.1 を使用するようにしました。 #105988 (Konstantin Bogdanov). thriftをv0.23.0に更新しました。 #105993 (Konstantin Bogdanov).postgrestagREL_18_4を使用するようにしました。 #105994 (Konstantin Bogdanov).krb5を 1.22.2 にアップグレードしました。 #106076 (Konstantin Bogdanov).- 同梱の
curlを 8.20.0 に更新しました。 #106077 (Konstantin Bogdanov). mariadb-connector-cを 3.1.29 に更新しました。ClickHouse 関連のすべてのパッチは維持されています。#106287 (Nikita Mikhaylov).- libssl3t64 の CVE 修正のため、distroless ベースイメージのダイジェストを更新しました。#106360 (Rahul Nair).
wasmtimev45.0.1 を使用するようにしました。#106836 (Konstantin Bogdanov).opensslを 3.5.7 に更新しました。#106844 (Konstantin Bogdanov).- Distroless Docker build で、完全なバージョンタグだけでなく、
:X.Y-distrolessおよび:X.Y.Z-distrolessのフローティングタグも更新されるようになりました。#106932 (Rahul Nair). - NTLM 認証、cookies、alt-svc、HSTS、DNS-over-HTTPS、netrc、MIME、AWS SigV4 など、未使用の
curl機能を無効化しました。#107226 (Konstantin Bogdanov). - snapshot の I/O がバックグラウンドスレッド上で実行された際に発生していた snapshot-install の livelock を修正した
NuRaftを反映しました。nuraft_use_bg_thread_for_snapshot_ioKeeper 設定は引き続きデフォルトで無効です。CI では現在、両方のモードをカバーするため、この設定をランダム化しています。#107338 (Antonio Andelic). - ClickHouse の checkout path にヘッダ拡張子に一致する substring が含まれている場合に、
abseilを build できない問題を修正しました。#107349 (zhiqiang). - x86_64 では、musl libc で利用できない glibc 固有の
sysconf(_SC_LEVEL2_CACHE_SIZE)ではなく、CPUIDから L2 キャッシュサイズを判定するようにしました。#107469 (Konstantin Bogdanov). - 深くネストしたクエリをサポートするため、musl build の stack サイズを 8 MiB に増やしました。#107470 (Konstantin Bogdanov).
- Rust の静的ライブラリ内でローカライズされる C ライブラリシンボルの集合を、手動管理の allowlist ではなく実際の reference libraries から導出するようにし、これによりすべての compiler-rt builtins とプラットフォームの libm 関数をカバーできるようにしました。#107571 (Raúl Marín).
- distroless の server および Keeper イメージを
gcr.io/distroless/base-nossl-debian13に切り替え、ClickHouse が実際にリンクしているライブラリだけを含め、自前で静的リンクしているライブラリを取り込まないようにしました。#107837 (Rahul Nair). - stale-skipped されていた macOS (
arm_darwin) 上の stateless tests 50 件を再び有効化し、macOS での directory 同期にはF_FULLFSYNCではなくfsyncを使うようにしました。#107887 (Raúl Marín).
後方互換性を持たない変更
date_time_input_formatとcast_string_to_date_time_modeのデフォルトをbasicからbest_effortに変更しました。これまで basic 以外の datetime 文字列 (例:2024 April 4,Apr 15, 2020 10:30:00) をパースできず失敗していたクエリも、今後はデフォルトで成功する可能性があります。従来の厳格なパース動作を維持するには、これらの設定をbasicに設定してください (またはcompatibilityを使用してください) 。 #89334 (Alexey Milovidov).- Nullable の null map で使われるサブカラム名と競合し、サブカラムの解決が曖昧になるため、Tuple 要素名
nullは使用禁止になりました。 #98377 (Alexey Milovidov). - 動的ディスクで
from_env、from_zk、includeを使用できないようにするため、設定dynamic_disk_allow_from_env、dynamic_disk_allow_from_zk、dynamic_disk_allow_includeを追加しました。以前はデフォルトで許可されていた動作が、今後はデフォルトで禁止されるため、後方互換性を持たない変更です。 #99138 (Kseniia Sumarokova). - 廃止された Arrow ベースの Parquet リーダーおよびライターは、今後使用できなくなりました。代わりにネイティブ実装が使用されます。 #100949 (Alexey Milovidov).
SHOW CREATE TABLE tは、永続 table と一時テーブルの両方にtという名前が存在し、database が指定されていない場合、DESCRIBE TABLEの既存の動作に合わせて一時テーブルを優先するようになりました。さらに、DESCRIBE TEMPORARY TABLE構文もサポートされました。 #100966 (Alexey Milovidov).- HTTP connections による認証前の memory usage を制限するため、デフォルトの
http_max_fieldsを 1,000,000 から 1,000 に、http_max_field_name_sizeを 128 KB から 4 KB に引き下げました。また、http_max_request_header_sizeとhttp_headers_read_timeout設定を追加しました。以前のより高い上限に依存している Users は、設定でそれらを復元できます。 #103285 (Sema Checherinda). system.metric_logに、登録されているすべての histogram metric を行ごとにスナップショットするhistogramsnested カラムを追加しました。あわせて、ゼロ値を出力するかどうかを制御する新しい設定system_metric_log_show_zero_values_in_histogramsも追加しました。これによりsystem.histogram_metric_logtable は非推奨になります。 #103770 (Miсhael Stetsyuk).- 明示的な time zone を指定しない
DateTimeまたはDateTime64へのCASTは、ソース argument の time zone (ソースが明示的な time zone を持つDateTime/DateTime64の場合) を保持するようになり、toDateTime/toDateTime64関数の動作と一致するようになりました。#55072 をクローズします。 #104433 (Alexey Milovidov). kqltable function を削除しました。KQL ダイアレクトで queries を実行するには、SET dialect = 'kusto'を使用してください。 #105101 (Alexey Milovidov).- window functions の
RANKとDENSE_RANKは、SQL 標準に従い、arguments を受け付けず、指定するとNUMBER_OF_ARGUMENTS_DOESNT_MATCHを throw するようになりました。以前は、RANK(x) OVER (ORDER BY id)のようなクエリも、argument を無視したまま暗黙に受け入れられていました。以前の緩やかな動作に戻すには、allow_rank_dense_rank_arguments = 1を設定してください。 #49526 をクローズします。 #104324 (Groene AI).
新機能
max_bytes_ratio_before_external_group_byおよびmax_bytes_ratio_before_external_sortに対応する新しい設定max_bytes_ratio_before_external_joinを追加しました。これは、ハッシュ結合におけるディスクへの spill のしきい値を、利用可能なメモリに対する比率で表すものです。絶対値のmax_bytes_before_external_joinと組み合わせた場合は、より小さい方のしきい値が適用されます。#103862 (Alexey Milovidov). 新しいmax_bytes_ratio_before_external_join設定は、max_bytes_ratio_before_external_group_byおよびmax_bytes_ratio_before_external_sortと同様に、デフォルトで 0.5 に設定され有効になります。右側のデータが利用可能なシステムメモリの半分を超えると (メモリ制限が設定されている場合) 、ハッシュ結合は自動的に Grace Hash Join に spill します。#104285 (Alexey Milovidov).- table function
filesystemを追加しました。これにより、ディレクトリ構造をテーブルとして表現し、ファイルのメタデータや内容を SQL でクエリできるようになります。元の実装は #42039 の @perst20 によるものです。#42039 を参照してください。#50208 を参照してください。#53610 (Alexey Milovidov). arrayMap、arrayFilterなどの高階関数に、関数名だけをそのまま渡せるようにしました。たとえば、arrayMap(negate, [1, 2, 3])はarrayMap(x -> negate(x), [1, 2, 3])と等価になりました。#101033 (Alexey Milovidov).- 設定
send_table_structure_on_insert_with_inline_dataと client オプション--inline-insert-dataを追加し、ネイティブプロトコル経由で server 自身がインライン INSERT データをパースできるようにしました。これにより、テーブル構造を受け取るためのラウンドトリップを回避し、多数の小さな insert のパフォーマンスを向上させます。#101034 (Alexey Milovidov). - SQL クエリのトークン化と構文ハイライトのための関数
tokenizeQueryとhighlightQueryを追加しました。tokenizeQueryは、lexer の token をバイト offset および token type とともに返します。highlightQueryは、ハイライトカテゴリ (keyword、identifier、function、number、string など) 付きの、パーサーに基づく構文ハイライト範囲を返します。#101054 (Alexey Milovidov). - RFC 3986 のセマンティクスに従って、
urltable function およびURLtable engine で relative URL を解決するための設定url_baseを追加しました。#101113 (Alexey Milovidov). LIMIT BYclause で負の値をサポートし、各グループの先頭ではなく 末尾 から行を選択できるようにしました。たとえば、LIMIT -2 BY idはidごとの最後の 2 行を返します。負の OFFSET (LIMIT -1 OFFSET -1 BY id) および符号が混在する指定 (LIMIT -2 OFFSET 1 BY id) もサポートされます。#103222 (Nihal Z. Miaji).- 複数の json クエリのパフォーマンス向上のため、
json_value関数でtupleおよびarrayへの出力をサポートしました。#78362 (kevinyhzou). @KevinyhZou により、JSON_VALUE、JSON_EXISTS、JSON_QUERYで複数パスのTuple/ArrayJSONPath argument をサポートしました。#101102 (Alexey Milovidov). - 新しい
kafka_autodetect_client_rackパラメータが導入されました。設定すると、クラウド環境の機能を利用して Availability Zone を検出し、それをlibrdkafkaのclient.rackパラメータとして伝播することで、ゾーン間通信を回避します。#81323 (Ilya Golshtein). - オブジェクトストレージの読み取り操作を追跡するため、
system.blob_storage_logにReadイベントタイプを追加しました。これは新しい設定enable_blob_storage_log_for_read_operationsで制御されます。#96867 (Alexey Milovidov). - ユーザーは、新しい
system.zookeeper_watchesテーブルを使用して、clickhouse-serverが発行した ZooKeeper のウォッチを確認できるようになりました。#99277 (Den Kalantaevskii). - すべてのテーブルをまたいで合算した、分散クエリに関与する分片数をカウントする
Shardsプロファイルイベントを追加しました。#99470 (Alexey Milovidov). WASMUDF をDETERMINISTICとして宣言できるようになり、定数畳み込みの対象になります。#100005 (Vasily Chekalkin).parallel_replicas_prefer_local_replica設定を追加しました。無効にすると、並列レプリカはロードバランシングアルゴリズムのみに基づいて選択されるため、max_parallel_replicas = 1のクエリであっても別のホストに送られる可能性があります。#100139 (Alexey Milovidov).- 送信 HTTP 接続の TCP ソケットバッファサイズを制御するための
{disk,storage,http}_connections_rcvbufおよび{disk,storage,http}_connections_sndbufサーバー設定を追加しました。これにより、運用者はカーネルの自動調整を上書きし、接続ごとのメモリ使用量に上限を設定できます。#100478 (Sema Checherinda). CREATE OR REPLACE TABLEと同じアトミックスワップのセマンティクスでCREATE OR REPLACE MATERIALIZED VIEWをサポートしました。内部テーブル、TOテーブル、POPULATE、REFRESH、ON CLUSTERで動作します。#100539 (DQ).- S3 GET リクエストの接続ライフタイムと消費バイト数を観測するため、
s3_read_request_duration_microsecondsおよびs3_read_request_bytesヒストグラムメトリクスを追加しました。これらはsystem.histogram_metricsと Prometheus エンドポイントで確認できます。#102058 (Sema Checherinda). - Keeper の snapshot 進捗追跡を基盤として、インクリメンタル読み取りをサポートする
Paimon、PaimonS3、PaimonAzure、PaimonHDFS、PaimonLocalの table engine を追加しました。インクリメンタルモードでは、最後に commit 済みの snapshot 以降の新しい行のみを返します。特定 snapshot の delta 読み取りはpaimon_target_snapshot_idで利用でき、クエリごとの snapshot 上限はmax_consume_snapshotsで設定できます。バックグラウンドのメタデータのリフレッシュはpaimon_metadata_refresh_interval_secで構成可能です。allow_experimental_paimon_storage_engineで制御されます。#102343 (XiaoBinMu). - 新しい Kafka table 設定
kafka_map_virtual_columns_on_writeを追加しました。有効にすると、Kafka table スキーマ内の_key、_timestamp、_headers.name、_headers.valueという名前のカラムは、INSERT時に対応する Kafka メッセージの key、timestamp、headers として生成され、メッセージペイロードからは除外されます。#103243 (Alexey Milovidov). - リフレッシュ可能なマテリアライズドビュー向けに、
SYSTEM PAUSE VIEW [db.]nameおよびSYSTEM PAUSE VIEWSクエリを追加しました。SYSTEM STOP VIEWとは異なり、SYSTEM PAUSE VIEWは現在実行中のリフレッシュを中断しません。進行中のリフレッシュは完了まで継続され、以降のリフレッシュのみが抑止されます。解除にはSYSTEM START VIEWまたはSYSTEM START VIEWSを使用し、これらは停止状態と一時停止状態の両方を一律にクリアするようになりました。#103252 (Nikita Mikhaylov). - 文字列内で N 番目に一致した正規表現のバイト位置を返す関数
regexpPosition(PostgreSQL 互換の別名regexpInstrおよびregexp_instrを含む) を追加しました。開始オフセット、一致後の位置を返すモード、正規表現フラグ、キャプチャグループの選択をサポートします。#104172 (Abhinav Agarwal). - 素数判定のための新しい関数
isPrimeとisProbablePrimeを追加しました。isPrimeはUInt64までの符号なし整数に対して正確な結果を返します。isProbablePrimeはUInt128とUInt256にも対応しており、これらのより広い型では、0は確実に合成数、1はおそらく素数であることを意味します。isProbablePrimeの省略可能な第 2 引数roundsは信頼度を制御し (上限は256) 、デフォルトの25ラウンドでは、ランダムな合成数に対する偽陽性率は10^-15未満に抑えられます。また、isProbablePrimeはキャンセル可能です。#104234 (Nihal Z. Miaji). #104639 (Alexey Milovidov). #104806 (Nihal Z. Miaji). clearと/clearは、誤ってクエリとして実行されるのではなく、clickhouse のコマンドラインツールでターミナルをクリアするようになりました。#104318 (Tyler Hannan).SELECTクエリで、fileテーブル関数がArray(String)のパスを受け取れるようになりました。#104442 (Yue).system.functionsテーブルにdeterministicおよびhigher_orderカラムを追加しました。#104479 (Pedro Ferreira).- 非 SegWit アドレスのエンコード (例: Cosmos SDK、Injective、Osmosis) 向けに、
bech32Encodeに省略可能なエンコーディングのバリアントパラメーター (bech32/bech32m) を、bech32Decodeに生デコードモードを追加しました。#98986 (Yash ). - これまで入力専用だった
AvroConfluentフォーマットで、データを書き込めるようになりました。これにより、たとえば Kafka への書き込み時に、Confluent スキーマレジストリ形式の Avro メッセージを ClickHouse から直接生成できます。スキーマは自動的にスキーマレジストリへ登録されます。subject 名を指定するには、新しいoutput_format_avro_confluent_subject設定を使用してください。#101935 (János Benjamin Antal). - JSON 文字列を人が読みやすい形式に整形する
prettyPrintJSON関数を追加しました。これまで整形にクライアント側で追加の手順が必要だったダッシュボードやレポートで便利です。#62523 をクローズします。#102594 (Dmitry Prokofyev). - PostgreSQL / SQL 標準との互換性のため、
groupConcatの大文字と小文字を区別しないエイリアスとしてSTRING_AGGを追加しました。#105125 (Alexey Milovidov). - 特定のサブクエリに
SETTINGS use_query_cache = trueを指定することで、外側のクエリ全体をキャッシュせずに、各サブクエリの結果を個別にキャッシュできるようになりました。新しい設定query_cache_for_subqueries = trueを使用すると、use_query_cacheをすべてのサブクエリに一括で伝播できます。注: 外側のクエリに指定したuse_query_cacheは、サブクエリに自動伝播されなくなりました。#99804 (Vincent Voyer). - Web UI (
play.html) のクエリエディタに、clickhouse-clientの配色を参考にしたレキサーベースのシンタックスハイライトを追加しました。#105105 (Alexey Milovidov).
実験的機能
- WebSocket 経由でブラウザ内に対話型の
clickhouse-clientセッションを提供する、実験的なウェブターミナル インターフェイスを/webterminalに追加しました。デフォルトでは無効で、allow_experimental_webterminalサーバー設定で有効にできます。 こちら で確認できます。 #100277 (Alexey Milovidov). #105191 (Alexey Milovidov). #105059 (Alexey Milovidov). Kafka2エンジン (実験的機能で、Keeper ベースのオフセット保存を使用) が、直接SELECTクエリとkafka_commit_on_select設定をサポートするようになりました。 #100276 (Alexey Milovidov).WASMUDFs は、より多くの数値型の型強制に対応しました。たとえば、より小さい整数型からより広い整数型へ (Int8からUInt64など) 、および任意の整数型から浮動小数点型へ (Int32からFloat32など) 変換できます。 #100435 (Vasily Chekalkin).DELETE FROM system.webassembly_modulesクエリでLIKE関数をサポートしました。 #104397 (Vladimir Cherkasov).Icebergで Geo 型をサポートしました。 #103113 (Konstantin Vedernikov).- ArrowFlight SQL server にプリペアドステートメント機能を追加しました。 #103047 (Yakov Olkhovskiy).
- KQL パーサー (Kusto 言語サポート用) の堅牢性を改善しました。KQL パーサーの各段階でパーサーの深さとバックトラックのカウンターを維持することで、複雑な KQL クエリでもパーサーの制限を一貫して追跡できるようになりました。 #103528 (Yakov Olkhovskiy).
パフォーマンス改善
filetable function またはFiletable engine 経由でローカルの Parquet files を読み込む際に、Parquet フッターのメタデータキャッシュを再利用するようにしました。従来は、このメタデータキャッシュは object storage の backend でしか参照されていませんでした。#104260 (Alexey Milovidov).- ソートキーが join によって保持される側のカラムのみを参照している場合、
LEFT/RIGHTjoins に対してORDER BY ... LIMIT nを push down し、join 前に保持側の入力が生成する必要のある行数を制限します。これは新しい設定query_plan_top_k_through_join(デフォルトで有効) で制御されます。#104268 (Alexey Milovidov). ORDER BY ... LIMIT Nクエリのパフォーマンスを向上させるため、use_top_k_dynamic_filteringおよびuse_skip_indexes_for_top_k設定をデフォルトで有効にしました。#99537 (Alexey Milovidov). また、use_top_k_dynamic_filteringはデフォルトで固定長のソートカラムに限定されるようになり、行ごとのしきい値比較コストが I/O 削減の効果を上回るORDER BY <var-length-column> LIMIT Nクエリでの性能低下を回避します。従来の動作は、新しいuse_top_k_dynamic_filtering_for_variable_length_types設定で利用できます。#104216 (Alexey Milovidov).jemallocの oversize-arena 機能を使用してページフォールトを削減します。#103958 (Nikita Taranov).- Peak memory usage を抑えるため、
UNION ALLで同時にアクティブになる streams を制限します。#100176 (Alexey Milovidov). - ユーザー空間 page cache をわずかに最適化しました。#100300 (Alexey Milovidov). これにより、ユーザー空間 page cache は常に OS page cache より優れたものになりました。
- ユーザー空間 page cache (
use_page_cache_for_object_storage = 1) 経由で object storage をコールド read する場合の速度が大幅に向上しました。これは、連続する cache miss がpage_cache_block_sizeblock ごとに 1 件の HTTP request になるのではなく、1 件の HTTP request にまとめられるようになったためです。#104230 (Alexey Milovidov). - 型変換や function の適用を伴う索引解析を高速化しました。#55653 をクローズします。#100366 (Alexey Milovidov).
- 非常に多くの基になるテーブルを持つ
Mergetables に対する大規模クエリを高速化しました。#32465 をクローズします。#100369 (Alexey Milovidov). - 設定のフィールド型から vtable を削除し、
Settingsのコピーサイズを約 28 分の 1 に削減するとともに、すべての設定型で typed-array layout による cache locality の改善を実現しました。#102269 (Raúl Marín). - サーバーの空きメモリが少ない場合にクエリの並列度を自動的に下げるため、
max_threads_min_free_memory_per_threadおよびmax_insert_threads_min_free_memory_per_thread設定を追加しました。#100383 (Alexey Milovidov). - 低メモリシステム (< 4 GiB) での memory usage を削減しました。#100389 (Alexey Milovidov).
OptimizeTrivialGroupByLimitPassを追加しました。単純なSELECT ... FROM t GROUP BY k LIMIT nクエリ (HAVING、ORDER BY、window functions なし) では、アナライザがmax_rows_to_group_by = n + offsetとgroup_by_overflow_mode = 'any'を設定するようになり、入力全体をグループ化する代わりに、n個の異なるキーが生成された時点で aggregation を停止します。これは新しい設定optimize_trivial_group_by_limit_queryで制御されます (デフォルトで有効) 。#104473 (Amos Bird) (Alexey Milovidov)._part_offsetおよび_block_numberの仮想カラムに対して、granule レベルの暗黙的な min-max 索引を追加しました。projections にも対応しています。これにより、仮想カラムの predicates に基づく granules の高速な pruning が可能になります。#103952 (Mikhail Artemenko). #104746 (Mikhail Artemenko). #105137 (Mikhail Artemenko).- aggregation methods の
prealloc_serializedファミリーについて、batch-serialization パス中に各行の hash を事前計算し、それを使って (a)emplaceKey/findKeyでの再ハッシュを省き、(b) 次の行の bucket を software-prefetch するようにしました。これにより、ハッシュテーブルの cache-miss latency を隠蔽し、複数キーの string/serialized aggregation を高速化します。#104475 (Amos Bird) (Alexey Milovidov). Icebergtable 向けの query condition cache。#102115 (Konstantin Vedernikov).cramersV、cramersVBiasCorrected、theilsU、contingencyを window functions とともに使用する場合を最適化しました。#83521 をクローズします。#93384 (Nihal Z. Miaji).tupleElement(dictGet('dict', ('a', 'b', 'c'), key), N)をdictGet('dict', 'a', key)に書き換えるクエリ最適化を追加し、不要な Dictionary 属性の fetch を回避します。これはoptimize_dictget_tuple_element設定で制御されます (デフォルトで有効) 。#100186 (Alexey Milovidov).- ソートを伴う distributed queries について、イニシエーター上のソート処理で buffering を有効にしました。#100661 (Nikita Taranov).
partial_mergeJOIN のパフォーマンス改善。#100945 (Artem Zuikov).partial_mergeJOIN における memory の過剰割り当てをわずかに削減しました。#100963 (Artem Zuikov).- memory-tracker 階層全体を走査する代わりに sampling 設定を cache することで、割り当て/deallocations を最適化しました。#101267 (Azat Khuzhin).
- 内部追跡用コンテナーを事前割り当てすることで、S3 multipart upload 時のメモリ割り当て overhead を削減しました。#101799 (Gagan Dhakrey).
- 大規模な hash table に対するメモリアクセス latency を低減するため、hash join の probe phase に software prefetch を追加しました。設定
enable_software_prefetch_in_joinで制御されます。#102444 (Xiaozhe Yu). MemoryTrackerのレイアウトを最適化し、パフォーマンスを約 25% 向上させました。#103464 (Azat Khuzhin).coalesce(a, b, ...) <op> constおよびifNull(a, b) <op> constの predicate を索引解析の前に Rewrite し、各 argument に対するカラムごとの主キーおよびスキップ索引で granule を刈り込めるようにしました。これは新しい設定allow_key_condition_coalesce_rewriteで制御されます (既定で有効) 。#103468 (Manuel).- エスケープされたスラッシュの処理を最適化することで、大きな JSON メタデータファイルを持つ Iceberg カタログの読み取り時のクエリパフォーマンスを大幅に改善しました。#103998 (Mohaidoss).
- cache が無効な場合の非圧縮キャッシュのオーバーヘッドを回避するようにしました (server setting
index_uncompressed_cache_size = 0。これは既定値です) 。#104063 (Michael Kolupaev). - 非選択的な
WHEREfilter と組み合わせたときに、小さな limit を持つORDER BY ... LIMITクエリで過剰な granule を読み込んでしまう問題を修正しました。従来は、順序付き読み取りの上に filter があると、マーク範囲ごとのタスク分割が無効になり、その結果 pipeline が granule 間でキャンセルできず、各 stream ごとに part 全体を読み込んでいました。#104112 (Vladimir Cherkasov). - JOIN の左右を並べ替えた後に、hash table サイズの cache 再利用が行われていなかった問題を修正しました。#104131 (Nikita Taranov).
fsync_after_insertが有効な場合、part file の fsync が I/O スレッドプールを使って並列に実行されるようになり、列数の多いテーブルでの insert 完了処理が高速化されました。ClickBench のhitsのフルロードは約 22% 高速化されています。#104137 (Alexey Milovidov).- AArch64 で NEON を使って
find_first_symbols、find_first_not_symbols、find_last_symbols_or_null、find_last_not_symbols_or_null、splitIntoをベクトル化しました。従来、これらの helpers は x86 (SSE2 / SSE4.2) でのみ SIMD パスを持ち、ARM では scalar ループにフォールバックしていました。これにより、ClickBench のhitsdataset では TSV のパースが約 2 倍、URL 関数とsplitByCharが約 1.3 倍高速化されます。一方、非常に高密度な JSON のパース (16 バイト未満間隔の field cadence) は、既存の SSE2 のトレードオフと同様にわずかに低下します。#104228 (Alexey Milovidov). - 単純な
ALIASカラム (例:some_alias ALIAS mのsome_alias['key']) を介したデータ読み取りが、基になるカラムを直接参照する場合と同じ subcolumn ごとの読み取りパスを通るようになり、Map、Array、Tuple、Nullableのエイリアス化されたカラムで大きな I/O 削減効果が復元されました。#104245 (Raúl Marín). - クエリごとの
AsyncReadCountersを lockless にすることで、非同期 remote-FS 読み取りパスでのロック競合を軽減しました。#104374 (Nikita Mikhaylov). - projections の順序付きスキャンに対するクエリプランをわずかに改善しました。#103723 (Mikhail Artemenko).
optimizeUseNormalProjectionsを拡張し、何も filter されていない場合でも、projection の sorting key によってクエリプランからソート処理を除去できる特定のケースに対応しました。#104680 (Mikhail Artemenko).- 型付き
JSONパスで、json.path[]のシンタックスシュガーと明示的な型ヒントが正しく機能するようにしました。#99179 (Pavel Kruglov). json.path[N].nested.path(tupleElement(tupleElement(json.path[N], 'nested'), 'path')に展開される) をjson.path[].nested.path[N]に最適化し、読み取るデータ量を大幅に削減しました。#99802 (Pavel Kruglov).system.partsにおけるSHOW TABLESのアクセスチェックを最適化し、データベースレベルの grant チェックをテーブルごとのループの外に移しました。#100860 (Shaohua Wang).system.tablesのSELECT name/SELECT database, name高速パスにある、テーブルごとの冗長なSHOW TABLESアクセスチェックを削除しました。#100881 (Shaohua Wang).- macOS で JIT コンパイルを有効にしました。#100947 (Alexey Milovidov).
- 行ポリシーがソートキーのキーカラムのみに依存し、かつ決定論的である場合は、
FINAL後に行ポリシーを遅延させないようにしました。また、その場合に行ポリシーによって強制されていた対応するPREWHEREの遅延も省略するようにしました。#102884 (Yarik Briukhovetskyi). - テキスト索引のフィルタ述語として
hasAnyとhasAllのサポートを追加しました。#103266 (Anton Popov). - 長寿命の MergeTree ヒープ状態 (パーツごとおよびテーブルごとのメタデータ) を専用の jemalloc アリーナに割り当て、
jemalloc.mergetree_arena.*非同期メトリクスとして公開するようにしました。これにより、定常状態でのデフォルトアリーナの断片化を減らし、パーツ単位で残存するオブジェクトが本来減衰可能なページを保持し続けるのを防ぎます。#104136 (Raúl Marín). - 多数のリクエストを単一セッションでパイプライン化した高負荷時に、ZooKeeper クライアントのタイムアウト処理を改善しました。ZooKeeper クライアントは進捗ベースのタイムアウトを使用するようになり、
session_timeout_ms以内にサーバーから何らかのデータを受信している限り、待機時間が延長されます。各リクエストには引き続き3 * session_timeout_msの上限が適用され、呼び出し側のレイテンシを抑えます。#100466 をクローズしました。#104351 (Antonio Andelic). - イベントごとのトレースフラグを別配列に移し、必要になるまで割り当てないようにすることで、
ProfileEventsトレーシングのオーバーヘッドを削減しました。#105030 (Azat Khuzhin). ColumnDecimalにcompareTrackAtを追加し、Decimalカラムの比較性能を改善しました。#105110 (Artem Zuikov).- 複数の入力を並列にハッシュ化する
MD5(AVX2/AVX512) の SIMD 実装を追加し、スループットを改善しました。#105161 (Joanna Hulboj).
改善
- すべての ClickHouse アプリケーションでヘルプ出力を改善しました。
--helpは常に終了コード0を返し、stdoutに出力されるようになり、最上位のclickhouse --helpではすべてのサブコマンドが一覧表示されます。さらに、clickhouse start/restartに--no-sudoオプション (Docker で便利) を追加し、clickhouse helpサブコマンドも追加しました。@qoega による #58244 の続きです。#98148 (Alexey Milovidov)。 input_format_column_name_matching_modeの既定値がmatch_caseからautoに変更されました。入力カラム名をテーブルのスキーマと照合する入力フォーマット (JSONEachRow,CSVWithNames,JSONColumns,BSONEachRow,RowBinaryWithNamesなど) は、まず大文字小文字を区別して照合し、一致しない場合は大文字小文字を区別しない照合にフォールバックするようになりました。従来の厳密な動作はcompatibilityで維持されます。#104320 (Alexey Milovidov)。- PostgreSQL/SQL 標準との互換性のため、
STDDEVをstddevSampの大文字小文字を区別しない別名として追加しました。#105120 (Alexey Milovidov)。 - PostgreSQL 互換性のため、
array_to_stringをarrayStringConcatの大文字小文字を区別しない別名として追加しました。#105121 (Alexey Milovidov)。 - PostgreSQL 互換性のため、
unnestをarrayJoinの大文字小文字を区別しない別名として追加しました (関数呼び出し形式) 。#105124 (Alexey Milovidov)。 clickhouse-clientのプログレスバーに、RAM の横へ一時データのディスク使用量 (たとえば外部ソート、aggregation、または JOIN 用) が表示されるようになり、distributed queries ではホストごとの内訳も確認できるようになりました。#105190 (Alexey Milovidov)。system.predicate_statistics_logを追加しました。これは、predicate filter の selectivity と、クエリごとの MergeTree の index-granule pruning を記録する新しいサンプリングログです。既定では無効で、predicate_statistics_sample_rateserver setting で有効化できます。自動的な索引および projection の推奨に必要です。#98727 (Yarik Briukhovetskyi)。skip_unavailable_shardsが有効な場合、テーブルが存在しないローカル分片をスキップできるようにしました。#100141 (Alexey Milovidov)。- Linux の mdraid アレイが再同期中、または劣化状態にある場合に、起動時警告 (
system.warningsに表示) を出すようにしました。いずれもディスク I/O 性能に影響する可能性があり、ディスク障害の兆候でもあるためです。#100941 (Alexey Milovidov)。 - WASM UDFs が
system.functionsに正しいorigin(WasmUserDefined) で表示され、syntax、arguments、returned_valueカラムに ClickHouse の型メタデータから値が設定されるようになりました。従来は表示されないか、誤った origin の重複項目として表示されていました。#101053 (Vasily Chekalkin)。 generate_seriestable function が負の step 値をサポートし、降順の数列を生成できるようになりました。たとえばSELECT * FROM generate_series(99, 0, -1)です。#101056 (Alexey Milovidov)。- 必要に応じてこれらの関数が強い Context を保持するようにし、
DEFAULT/MATERIALIZED式や table engine の設定などの遅延実行パスで使用した際に、一部の関数 (dotProduct、formatRow、structureToCapnProtoSchema/structureToProtobufSchema、user-defined functions) で発生していたContext has expired例外を修正しました。#101109 (Alexey Milovidov). - ゼロ制限で作成された優先度において、誤って
Cache limits violated論理エラーが発生する問題を修正しました (たとえば、enable_filesystem_query_cache_limitが有効な場合に使用されるクエリ単位のファイルシステムキャッシュ優先度) 。#101428 (Alexey Milovidov). s3expressendpoints の Region を自動検出するようにしました。#101520 (Pradeep Chhetri).Icebergへの書き込みで、data files のフィールド ID をサポートしました。#102322 をクローズしました。#102362 (Konstantin Vedernikov).- web UI (
play.html) の左パネルが独立してスクロールするようになり、ページをスクロールしても表示されたままになり、table をクリックするとクエリ領域までスクロールするようになりました。#102498 (Alexey Milovidov). - 左パネルの ClickHouse ロゴを Ctrl/Cmd/Shift+クリックまたは中クリックすると、Play UI を新しい tab で開けるようにしました。#102501 (Alexey Milovidov).
- すべての table を対象に、projection 主キーおよび projection index granularity が使用するメモリを追跡するための新しいメトリクスを追加しました。#102587 (Narasimha Pakeer).
max_network_bandwidth_for_userとmax_network_bandwidth_for_all_usersを、リモートファイルシステムの reads/writes にも適用するようにしました。#103080 (Azat Khuzhin).- グローバルな状態ではなく、スナップショットされた table の状態に基づいて判断するようにすることで、リフレッシュ可能なマテリアライズドビュー が継続的に refresh される場合の backups の耐障害性を向上させました。#103384 (Nikita Mikhaylov).
SELECT * FROM system.databasesは、show_data_lake_catalogs_in_system_tablessetting にかかわらず、data lake catalog database を常に一覧表示するようになりました。以前はデフォルトで非表示でしたが、常に表示していたSHOW DATABASESと整合していませんでした。#103444 (Alsu Giliazova).- code 内の server setting
concurrent_threads_soft_limit_ratio_to_coresのデフォルト値を、同梱のconfig.xmlの値 (2) に合わせました。これにより、同梱のconfig.xmlを使用しない場合でも、デフォルトのmax_min_fairconcurrent threads scheduler は、初期状態で query processing threads をコア数の 2 倍までに制限します。#103446 (Alexey Milovidov). getURLSchemeで空入力を処理し、Lexer::nextTokenのmax_query_sizeチェックで null ポインタ演算を回避し、空の haystack に対する UTF-8 subsequence evaluation をデコード前に短絡評価することで、パーサーおよび文字列関数のエッジケースにおける sanitizer の堅牢性を向上させました。#103489 (Yakov Olkhovskiy).divide(0, x)とintDiv(0, x)の単調性推論の正確性を改善しました。従来、これらの関数は無条件に単調と判定されていましたが、0 / xは 0 を含む任意の範囲では非単調です。これは0 / 0が未定義であるためです (divideではNaN/Inf、intDivではゼロ除算例外) 。この誤判定により、KeyCondition::applyMonotonicFunctionsChainToRangeがleft > rightとなる範囲を生成し、主キーに対するIN/NOT IN式でキーがdivide(0, key)またはintDiv(0, key)で包まれている場合、デバッグビルドでLOGICAL_ERRORInvalid binary search result in MergeTreeSetIndexが発生していました。リリースビルドには影響ありません。これは、このアサーションが#ifndef NDEBUGによって有効化されるためです。#103621 (Groene AI).HTTPConnectionPool*TCP{Rcv,Snd}BufBytes_{p50,p75,p90,p95}非同期メトリクスを、system.histogram_metrics内のバケットベースのヒストグラムhttp_pool_tcp_buf_bytes(ラベルはgroup、direction) に置き換えました。グループごとの合計非同期メトリクスは引き続き維持されます。#103704 (Sema Checherinda).- サーバー設定
{disk,storage,http}_connections_{rcvbuf,sndbuf}が、system.server_settingsで再起動なしで変更可能として表示されるようになりました。これらの値はSYSTEM RELOAD CONFIGで更新できます。実行時に適用する仕組み自体は、すでに #100478 の時点で実装されていました。#103772 (Sema Checherinda). flameGraphで解決済みシンボル (Array(String)) をサポートしました。#103816 (Azat Khuzhin).- CLI クライアントで、端末の色表示が括弧と干渉する環境向けに、設定で
<rainbow_parentheses>false</rainbow_parentheses>を指定できるようになりました (同様に、clickhouse formatでも--no_rainbow_parenthesesが使えるようになりました) 。#103851 (Larry Snizek). - 失敗時に部分的な
putNGramの挿入をロールバックし、失敗した検索パターンをフォールバック検索に切り替えることで、不整合な状態を回避し、MultiVolnitskyの UTF-8 大文字小文字を区別しない検索を修正しました。#103864 (Yakov Olkhovskiy). - glibc 互換 musl で、
rseqTLS を介したsched_getcpuを実装しました。#104016 (Azat Khuzhin). - APPEND モードの Replicated なリフレッシャブルmaterialized view は、refresh 中に ZooKeeper への接続が一時的に失われても、2 回 refresh されなくなりました。#104051 (Michael Kolupaev).
- 明示的なカラム一覧のない分散テーブルで、推論されたリモートテーブル構造に対して sharding key を検証できるようにしました。#104111 (Yue).
Azureのabfsspath での REST カタログの不具合を修正しました。#104120 (Konstantin Vedernikov).- Keeper S3 snapshot client で
role_arnおよびrole_session_nameの認証設定が尊重されるようになり、snapshot のアップロードで STSAssumeRoleベースの認証を使用できるようになりました。#104140 (Alexey Milovidov). MATERIALIZEDCTE を使用するクエリ実行時に発生するメモリリークを修正しました。#104153 (Alexey Milovidov).- 大規模な非 ASCII データセットの処理時 (たとえばテキスト索引のビルド中) に、累積した出力バッファが 2 GiB を超える場合に発生していた
lowerUTF8/upperUTF8の例外を修正しました。また、過度に長い単一の行は、明確なエラーを返して拒否するようにしました。#104229 (Shaohua Wang). - 一時的な I/O 障害が発生しても MergeTree のカラム統計情報の読み込みが堅牢に動作するようにし、影響を受けたパーツで統計ベースの最適化が恒久的に無効化されるのを防ぐようにしました。#104372 (zoomxi).
INSERT INTO ... SELECT FROM input(...)で、CREATE TEMPORARY TABLEの grant が不要になりました。#104470 (Alexey Milovidov).- 新しい MergeTree setting
concurrent_part_removal_threshold_for_remote_disk(デフォルト16) を追加しました。削除対象のパーツのうち少なくとも 1 つがリモートディスク上に保存されている場合は、concurrent_part_removal_thresholdの代わりにこの設定が使用されます。従来のしきい値100では、各削除が個別のネットワーク往復を伴うにもかかわらず逐次実行されていたため、object storage バックエンド上のDROP TABLEやその他のパーツ削除操作が数十秒にわたって停止することがありました。この新しい設定により、リモートストレージでは並列削除パスにより早く入るようになり、ローカルディスクでの動作は変わりません。#104676 (Groene AI). - 新しい設定
defer_partition_pruning_after_final(デフォルト1) により、26.3 で導入された、FINALの下ではパーティション pruning をスキップする動作をオプトアウトできるようになりました。これを0に設定すると、26.3 より前のパーティション pruning が復元されます。これは、同一 PK の行がパーティションをまたがない event-log workload で大幅な高速化につながります。compatibility = '26.2'を指定すると、自動的に0になります。#104705 (Nikita Fomichev). - 範囲外の入力に対して
intExp2が誤った結果を返す問題を修正しました (JIT では shifts>= 64、両方のコードパスでは絶対値がINT_MAXを超える整数) 。#105054 (Raúl Marín). clickhouse installおよびclickhouse git-importで、CLI オプションとパース済みの入力から構築されるシェル引数をクォートするようにし、空白やシェルのメタ文字を含む path、user/group 名、commit hash も正しく扱えるようにしました。#105232 (Raúl Marín).Aliastable engine は Experimental ではなくなり、allow_experimental_alias_table_engine設定なしで利用できるようになりました。#103488 (Alexey Milovidov).clickhouse-benchmarkに--queries-formatオプションを追加し、デフォルトのタブエスケープ済み・1 行 1 クエリ形式の入力 (tsv) と、;で区切られた複数クエリのスクリプトとして標準入力をパースする形式 (script) を選べるようにしました。#99972 (Aleksandr Musorin).- 要素ごとの tuple 演算子
tuplePlus、tupleMinus、tupleMultiply、tupleDivide、tupleModulo、tupleIntDiv、tupleIntDivOrZeroが可変長引数に対応し、同じサイズの 2 つ以上の tuple を受け取れるようになりました。要素ごとに左畳み込みとして適用されます。以前は引数をちょうど 2 つしか受け付けませんでした。#104659 (Aruj Bansal). /processors-profileに、system.query_logとsystem.processors_profile_logをもとに、過去の任意のSELECTクエリのパイプラインをヒートマップとして可視化する新しい組み込み web UI を追加しました。各プロセッサはelapsed_usに応じて色分けされ、ホバーするとプロセッサごとの統計情報 (行数、バイト数、待機時間) が表示されます。#104614 (Nikita Mikhaylov).- Setting
query_plan_use_logical_join_step(およびそのエイリアスquery_plan_use_new_logical_join_step) は廃止され、現在は効果がありません。logical join step は常に使用されます。#104017 (Vladimir Cherkasov). play.htmlと他の組み込み web ページ (dashboard.html,jemalloc.html,merges.html,binary.html,webterminal.html) のuser入力欄は、文字列defaultが事前入力されなくなりました。代わりにuserのプレースホルダーが表示され、デフォルトで空になります。空のままにすると、ページはuser=URL パラメータを送信せず (WebTerminal の認証 JSON でもuserフィールドは省略されます) 、server は通常どおりdefaultユーザーへのフォールバックを適用します。これにより、他の経路 (X-ClickHouse-User、HTTP Basic、ハンドラー単位の<handler><user>設定) で指定された HTTP 認証情報が上書きされることもなくなりました。#105254 (Alexey Milovidov).ORCreader: オフセットベースの読み取り (readBigAt) をuse_prefetchから切り離し、HDFS上の EC エンコードされたデータをuse_prefetch = falseの場合でも (たとえば Gluten によって) 正しく読み取れるようにしました。#103348 (zhanglistar).play.htmlからCSVWithNamesフォーマットでダウンロードしたファイルで、.csvファイル拡張子が使われるようになりました。#103737 (JackFielding).- BigLake カタログの入力検証を強化しました。#105117 (Konstantin Vedernikov).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 式が括弧で囲まれていたかどうかを保持することで、フォーマットの不整合を修正しました。#92340 (Alexey Milovidov).
- Decimal 型と Float 型の比較が正しく行われない問題を修正しました。#94293 (zoomxi).
- 分散クエリで位置引数を使用できるようにしました。#94359 (simonmichal).
- 同名の materialized view を削除して再作成した際に
DatabaseCatalog::updateDependenciesで発生していたアサーション失敗を修正しました。また、参照依存関係が空の場合にRENAME TABLEまたはEXCHANGE TABLESの実行中に view の依存関係が黙って失われる問題も修正しました。#98779 (Alexey Milovidov). - 既存の database と同じ UUID を使って
ON CLUSTER経由で table を作成した際に発生していた server の abort (DatabaseCatalog::getTableImplでのアサーション失敗) を修正しました。#98861 (xiaohuanlin). - データ読み取り時 (setting
use_skip_indexes_on_data_readが有効な場合) のスキップ索引の使用と、論理更新で作成された既存の patch parts の扱いを修正しました。#99543 (Alexey Milovidov). - クエリオプティマイザーによって
IN (subquery)を含む filter が PREWHERE に移動されたときに発生する “Not-ready Set” 例外を修正しました。#100375 (Alexey Milovidov). - 1 つの
ALTER TABLEステートメント内でADD COLUMNとRENAME COLUMNを組み合わせた際に発生する “Cannot find column” エラーを修正しました。#100387 (Alexey Milovidov). DETACH/ATTACHまたは server の再起動後に、UNIONとINTERSECT/EXCEPT演算子が混在する view が誤った結果を返す問題を修正しました。#100390 (Alexey Milovidov).- IN clause に correlated subquery が現れた場合に、AST fuzzer によるストレステスト中に発生しうる “Trying to execute PLACEHOLDER action” 例外を修正しました。#100398 (Alexey Milovidov).
year、month、day変換でパーティション分割されたDateカラムを持つ Iceberg table への insert 時に発生する論理エラー例外を修正しました。#100404 (Alexey Milovidov).ALTER TABLE MODIFY COLUMNでカラム型が変更された後に、互換性のないデータに対してスキップ索引が使用される問題を修正しました。この問題により、sanitizer builds での server クラッシュや誤ったクエリ結果が発生する可能性がありました。#100526 (Alexey Milovidov).paimonCluster、paimonS3Cluster、paimonAzureCluster、およびdeltaLakeS3table functions で、query_logに認証情報が漏えいする問題を修正しました。#100529 (JIaQi Tang).- Kafka エンジン table に対する
DROP TABLEが、rd_kafka_consumer_closeでのデッドロックにより無期限にハングする可能性がある問題を修正しました。#100604 (Alexey Milovidov). - ハードコードされていた
source_table_enginesリストを、StorageFactoryとDatabaseFactoryを使った runtime ルックアップに置き換えました。あわせて、ソースエンジン (PostgreSQL、MySQL、S3 など) を使用するCREATE DATABASEで、CREATE TABLEと同じ source grants が必要になるよう、source_access_typeをDatabaseFactory::EngineFeaturesに追加しました。これにより、table_engines_require_grant=falseのときにGRANT TABLE ENGINE ON *が失敗する問題を修正しました。#71544 をクローズしました。#100746 (pufit). ALIASカラムに、関数呼び出し内にネストされた相関サブクエリ (例:ALIAS toString(intDivOrZero(x, (SELECT ...)))) を含むテーブルの読み取り時に発生する server crash を修正しました。CREATE TABLEとALTER TABLEは現在、DEFAULT/ALIAS/MATERIALIZEDカラム式内の任意の深さにあるサブクエリを、THERE_IS_NO_DEFAULT_VALUEで拒否します。以前は浅い検証のためネストされたサブクエリが通ってしまい、相関ありのケースでは読み取り時に crash が発生し、相関なしのネストされたケースでは一見動作しているように見えても、予期しない挙動につながる可能性がありました。現在はどちらも DDL 時に拒否されます。#100753 (Groene AI).optimize_substitute_columnsとconvert_query_to_cnfsettings が有効な場合に、CONSTRAINT ... ASSUME定義を持つテーブルに対して相関サブクエリを含むクエリを使用すると発生し得た server crash (Logical error: Bad cast from type DB::FunctionNode to DB::ColumnNode) を修正しました。#100756 (Groene AI).- JSON column に行を insert した際、その行によって互換性のない値を持つ型付きフィールドと並んで新しい動的フィールドが導入され、その後そのカラムが
GROUP BYキーとして使用されると発生し得た例外を修正しました。#100758 (Jimmy Aguilar Mena). DiskObjectStorageTransactionパス (s3_with_keeperdisks で使われ、use_fake_transaction=falseの場合には明示的にも使用) を経由する S3 / object storage への書き込みで、workload I/O scheduling が暗黙のうちにバイパスされていた問題を修正しました。以前は、そのようなディスク上の MergeTree テーブルへの INSERT 書き込みで、トランザクション書き込みパスのWriteSettingsに resource link が注入されていなかったため、CREATE RESOURCE/CREATE WORKLOADによる throttling が無視されていました。#100777 (JIaQi Tang).ProtobufとProtobufListの間で共有される schema-cache の競合を修正しました。最初にFORMAT Protobufとしてメッセージを読み取り、その後FORMAT ProtobufListとして読み取ると、ProtobufListが cache 済みスキーマを envelope 形式に強制していたため、失敗することがありました。現在は、envelope スキーマが利用できない場合、ProtobufListは cache 済みのメッセージ型にフォールバックします。#100849 (Callum Cooper).std::exceptionABI の不一致による Rust CXX bridge の heap-buffer-overflow を修正しました。#100931 (Azat Khuzhin).FunctionVariantAdaptorは、すべてのVariantの代替型が関数と非互換な場合、黙ってNullable(Nothing)を返すのではなく、ILLEGAL_TYPE_OF_ARGUMENTを throw するようになりました。以前は、どの代替型も互換性がないWHERE function(variant_col)predicate は、エラーなしで 0 行を返していましたが、同等のSELECTコンテキストではすでに正しく throw されていました。#100939 (Vasily Chekalkin).- データベースにビューが含まれていても、
TRUNCATE ALL TABLESは失敗しなくなりました。#100943 (Alexey Milovidov). optimize_rewrite_array_exists_to_hasの最適化を修正し、型互換性のないケース (例: Date と String) を正しく処理できるようにしたうえで、デフォルトで再有効化しました。 #100944 (Alexey Milovidov).- S3 設定の優先順位を修正し、
storage_configurationのディスク設定がグローバルな<s3>セクションより優先され、さらにユーザー/プロファイル/クエリレベルの設定がその両方より優先されるようにしました。 #100975 (Alexey Milovidov). - BFloat16、Float32、Float64 のカラムで、スパースなシリアライゼーションにより負のゼロ (-0.0) の符号が失われる問題を修正しました。 #100983 (Takumi Hara).
- WKT エンコードされた GeoParquet および Arrow ファイルの読み取り時に使用される WKT ジオメトリパーサーの 2 つのバグを修正しました。
MULTILINESTRINGジオメトリが誤ってPolygonとして解析されていた問題 (型付きカラムでは例外を引き起こし、混在したGeometryカラムではデータ破損が黙って発生していました) と、型キーワードのない不正な WKT 文字列が、明確なエラーではなく未定義動作をトリガーしていた問題です。 #100997 (Vasily Chekalkin). - 単一の分片を持つ分散テーブル上の
grouping/GROUPING SETSクエリで、“Method executeImpl is not supported for ‘grouping’ function” というエラーにより失敗していた問題を修正しました。 #101030 (Alexey Milovidov). - 同じテーブル式が複数回処理された際に planner で発生することがあった
LOGICAL_ERROR“Column identifier is already registered” を修正しました。 #101048 (Alexey Milovidov). additional_result_filter設定を UNION または EXCEPT クエリと併用した際に発生していた、LOGICAL_ERROR 例外 “Column identifier is already registered” を修正しました。 #101051 (Alexey Milovidov).- GROUPING SETS、ROLLUP、または CUBE とともに
group_by_use_nulls=1を使用し、さらに集約関数と* APPLYを併用した際に発生していたサーバークラッシュ (Logical error: Bad cast from ColumnVector to ColumnNullable) を修正しました。 #101062 (Groene AI). input_format_csv_skip_first_linesまたはinput_format_tsv_skip_first_linesがファイル内の行数を超えた場合に発生する無限ループを修正しました。 #101111 (Alexey Milovidov).- 遅延マテリアライゼーションの最適化における範囲外アクセスを修正しました。これにより、デバッグビルドで例外が発生する可能性がありました。 #101144 (Alexey Milovidov).
- 再帰 CTE における型推論を修正しました。非再帰側と再帰側の
UNION ALL全体で、カラム型は収束するまでgetLeastSupertypeによって反復的に拡張されるようになり、x + 1のような式で整数オーバーフローが発生するのを防ぎます。 #101155 (Alexey Milovidov). - MergeTree の圧縮ブロックサイズ設定 (max_compress_block_size、min_compress_block_size、marks_compress_block_size、primary_key_compress_block_size) の上限を 256 MiB に制限し、極端な値が CREATE TABLE SETTINGS で設定された際のサーバークラッシュを防ぐようにしました。 #101159 (Groene AI).
- ROW POLICY が
USING句でスカラサブクエリ (例:USING (SELECT 1)) を使用している場合に、QueryAnalyzer::resolve()で発生する LOGICAL_ERROR によるクラッシュを修正しました。#100695 をクローズしました。#101263 (Groene AI). - ストリームの割り当てに失敗した際に
MergeTreeDataPartWriterCompact::cancelで発生する未定義動作を修正しました。#101292 (Alexey Milovidov). - ALTER ステートメントでの代入時にタイムゾーンが含まれないことがある問題を修正しました。#101328 をクローズしました。関連: https://github.com/ClickHouse/ClickHouse/pull/100647. #101403 (Yarik Briukhovetskyi).
- SELECT パイプラインが複数のストリームを生成する場合に、ORDER BY ALL を含む INSERT SELECT クエリで発生するサーバークラッシュ (LOGICAL_ERROR) を修正しました。#101443 (Groene AI).
- join の並べ替えによって、INNER JOIN フィルター (outer join の保持側のみを参照するもの) が outer join の ON 句に押し込まれ、誤ったクエリ結果になる問題を修正しました。#101504 (Vladimir Cherkasov).
- arrayJoin を含む実行プランでは遅延マテリアライゼーションを適用しないようにし、limit が守られなくなる可能性がある問題を修正しました。#101608 をクローズしました。#101644 (Vladimir Cherkasov).
mergeFilterIntoJoinCondition最適化によって、型が一致しない WHERE の等価条件が暗黙に破棄され、不正な JOIN クエリ結果になる問題を修正しました。#101652 (Xiaozhe Yu).- 構文エラー/パースエラーに対して
errorテストヒントが機能しない問題を修正しました。従来は、不正なクエリに対する-- { error SYNTAX_ERROR }がクライアント側のパースエラーに一致せず、“Expected server error” で失敗していました。#101675 (Groene AI). INTO OUTFILE ... TRUNCATEが実際には atomic なリネームを使用していなかった問題を修正しました。書き込みは一時ファイルではなく元のファイルに直接行われていたため、クエリ失敗時に元の内容が失われていました。現在は一時ファイルにデータを書き込み、成功時にのみリネームするようになりました。#101884 (Pablo Marcos).- スキーマに varchar(n) または char(n) のカラム型が含まれる Delta Lake テーブルの読み取り時に発生していた例外
Unsupported DeltaLake type: varchar(n)を修正しました。これらの型は、Delta Lake プロトコルが Parquet では単なるバイト配列として保存する仕様に合わせて、String にマッピングされるようになりました。#101973 (Flavio Malavazi). schema_inference_mode=unionと異種の Parquet スキーマを使用して S3 から tar アーカイブを読み取る際に、データが静かに失われる問題を修正しました。Parquet メタデータキャッシュが、アーカイブ内の後続ファイルすべてに対して最初のファイルのメタデータを誤って再利用していました。#101990 (Ahaan Limaye).- 同じサーバー lifetime 内でそのテーブルに対する SELECT または INSERT がそれまで一度も実行されていない場合に、Iceberg テーブルで ALTER TABLE UPDATE/DELETE を実行すると発生するサーバークラッシュ (LOGICAL_ERROR) を修正しました。#102113 (Alexey Milovidov).
- インメモリデータベース上のテーブル (例: 一時テーブル) に対して
ALTERクエリを実行した際に発生する可能性があるクラッシュを修正しました。 #102360 (Den Kalantaevskii). - 同じログソースに対する後方互換の READ/WRITE grants をフォーマットする際に、
formatQueryがGRANT FILE ON *.*, FILE ON *.* TO xのような重複した grants を生成し、本来のGRANT FILE ON *.* TO xにならない問題を修正しました。 #102411 (Groene AI). max_streams_to_max_threads_ratioが 1 より大きい場合に、read-in-order クエリ後の aggregation で並列度が失われる問題を修正しました。 #102467 (Alexey Milovidov).- Buffer テーブルエンジンからサブカラム (Nullable の
.null、Array の.size0、Tuple の要素、map の keys/values など) を選択した際に発生するクラッシュ (LOGICAL_ERROR: Unknown virtual column) を修正しました。 #102470 (Groene AI). join_use_nullsを伴う LEFT/RIGHT JOIN が、3 テーブル以上を含む他の joins と組み合わされた場合に、join reorder optimization で発生する “Cannot fold actions for projection” 例外を修正しました。 #102516 (Alexey Milovidov).- スカラーが範囲外の場合に、numericIndexedVector 上の要素ごとのスカラー演算 (例:
numericIndexedVectorPointwiseAdd) で発生していた検出されない overflow を修正しました。今後は、このような入力に対して破損した値を返す代わりにINCORRECT_DATAを返します。 #102546 (FriendLey). - SAMPLE とクエリレベルの OFFSET を伴う INSERT で、AST のフォーマットが一貫しない問題を修正しました。 Closes #102523. #102547 (zoomxi).
- 不正な aggregate function state のデシリアライズ時に
groupConcatで発生するLOGICAL_ERROR例外を修正しました。 #102558 (Christoph Wurm). input_format_csv_use_default_on_bad_values=0の場合、Time64 の CSV 値の末尾にある不正な文字列を受け付けないようにしました。 Closes #102490. #102596 (Yarik Briukhovetskyi).- Enum 型のパスを持つ JSON column にデフォルト値を insert する際に発生する UNKNOWN_ELEMENT_OF_ENUM 例外を修正しました。 Closes #102359. #102687 (Pavel Kruglov).
- 一部のケースで、カラムのリネーム時に
columns_substreams.txtが破損する問題を修正しました。 Closes #102259. #102689 (Pavel Kruglov). - JSON のパース中に Time data type への insert に失敗する問題を修正しました。 Closes #102016. #102690 (Pavel Kruglov).
- キャッシュされたスキーマのファイル名に含まれる content サンプルの 16 進エンコードを修正しました。 Closes #101904. #102703 (Pavel Kruglov).
Float32カラムに signaling NaN 値が含まれている場合に、ORDER BYキーがハッシュ式になっているSummingMergeTreeのマージ中に発生するソート順序違反 (debug ではクラッシュ、release ではサイレントなデータ破損) を修正しました。 #102791 (Groene AI).waitDetachedTableNotInUseを呼び出すDETACH DATABASE ... SYNCなどの操作を、KILL QUERYでキャンセルできるようにし、サーバーのシャットダウンにも応答するようにしました。これにより、同時実行中のクエリがテーブル参照を保持している場合に無期限にハングするのを防ぎます。 #102804 (Antonio Andelic).ANY RIGHT JOINが誤った結果を返す可能性がある不具合を修正しました。 #102893 (Nikita Taranov).- socket 層からの short write を Poco の
BufferedStreamBuf::flushBufferが処理できないことが原因で、S3 リクエストがリトライされず、ios_base::clear: unspecified iostream_category errorで失敗する不具合を修正しました。 #102894 (Sema Checherinda). - INSERT SELECT クエリで、
input('auto')テーブル関数が HTTP interface 経由で失敗する不具合を修正しました。 #102902 (Miсhael Stetsyuk). - row policies/additional_table_filters 使用時の trivial LIMIT 最適化を無効化しました (並列な索引解析を可能にするため) 。 #102921 (Azat Khuzhin).
HMACSQL function でシークレットキーを隠すようにしました。#102927 を修正しました。 #102997 (Mikhail f. Shiryaev).optimize_syntax_fuse_functionsが有効な場合に、同じquantile呼び出しを複数回参照する分散クエリ (たとえばSELECT、HAVING、ORDER BY内) で発生するMULTIPLE_EXPRESSIONS_FOR_ALIAS例外を修正しました。 #103014 (tanner-bruce).- フィルターが左側のカラムに依存しているときに、未準備の set が渡されるケースを CI で発見し、これを修正しました。#102966 をクローズしました。 #103029 (Yarik Briukhovetskyi).
- 一部のケースで JSON への castOrNull を修正しました。#101818 をクローズしました。 #103036 (Pavel Kruglov).
- aggregate projection がクエリに一致し、かつテーブルの一部のパーツに projection データが存在しない場合 (たとえば、すでにデータが入っているテーブルに projection を追加し、
MATERIALIZE PROJECTIONを実行していない場合) に、SELECT DISTINCTが不完全な結果をサイレントに返す不具合を修正しました。#102951 をクローズしました。 #103052 (Nihal Z. Miaji). - アナライザでの共通式抽出中に、
AND(OR(A, A), A)のようなWHERE条件式が単一の最上位引数に畳み込まれた際に発生するTOO_FEW_ARGUMENTS_FOR_FUNCTION例外を修正しました。 #103072 (Peng). - タプル、マップ、または
QBit要素を含む配列に対してif/ifNullを評価する際に発生していた論理エラーFunction writeSlice expects same column types for GenericArraySlice and GenericArraySinkを修正しました。ColumnQBit::structureEqualsが、一方のQBitカラムの内部タプルを他方の外側ラッパーと誤って比較していたため、構造的に同一のQBitカラムが異なるものとして扱われていました。#103084 (Groene AI). - テーブル参照が保持されている場合に無期限にハングするのではなく、
database_atomic_wait_for_drop_and_detach_synchronouslyを指定したDETACH DATABASEがKILL QUERYに従うよう修正しました。#103095 (Alexey Milovidov). - 非識別子の predicate (例:
WHERE 1=1) を使って WASM モジュールを削除した際に発生する segfault を修正しました。#103101 (Joe Redfern). processInsertQueryの末尾でsendProgressを無条件に呼び出していたことが原因で、古いクライアントがremote()または分散テーブル経由で新しいサーバーに insert した際にUNEXPECTED_PACKET_FROM_SERVERで失敗していた後方互換性の問題を修正しました。#103148 (Sema Checherinda).- 定数でないタプルを第 2 引数に取る IN では、タプル要素を左辺の型に CAST で縮小してはなりません。これはオーバーフローを引き起こす可能性があります。#103055 をクローズしました。#103169 (Yarik Briukhovetskyi).
- プロトコル関数での未初期化値の使用を修正しました。#103187 (Pavel Kruglov).
WHEREclause がLowCardinalityのキー column を、ネストされたLowCardinalityを含む型 (たとえばVariant(LowCardinality(Date), String)) にキャストした定数と比較する場合に、MergeTree の索引解析中に発生するLOGICAL_ERROR(Bad cast … to ColumnLowCardinality) を修正しました。#103211 (Groene AI).timeSeries*ToGridaggregate function ファミリー (例:timeSeriesResampleToGridWithStaleness、timeSeriesChangesToGrid、timeSeriesResetsToGrid、timeSeriesRateToGrid) を、bucket 数の計算で符号付き 64 ビット整数演算がオーバーフローするような極端な timestamp パラメータで呼び出した際に発生するLogical error: 'index < bucket_count'を修正しました。あわせて、悪意ある入力による意図しない大規模メモリ割り当てを防ぐため、グリッド bucket の総数を 1,600 万に制限しました。#103223 (Groene AI).ReplacingMergeTreeの遅延FINALパスでのパイプライン展開中に発生するLogical error: 'Port is already connected'例外を修正しました。この不具合は、ReadFromMergeTree::initializePipelineが内部変換 (例:Resize) を挿入してサブパイプラインのプロセッサ同士を接続した結果、LazyUnorderedReadFromMergeTreeSource::expandPipelineがすでに接続済みの出力ポートを再接続しようとしていたため、query_plan_optimize_lazy_final = 1のクエリに影響していました。#103230 (Groene AI).- 入力がソート済みの subqueries からなる
UNION ALLの場合に、LIMIT BYとDISTINCTが誤った結果を返す問題を修正しました。クエリプラン オプティマイザーがそのようなユニオン全体をグローバルにソート済みと誤って扱い、余分な行を返していました。#103231 (Nihal Z. Miaji). - 遅延レプリケーションを伴う Map type での統計計算中に発生しうるクラッシュを修正しました。#102390 をクローズしました。#103273 (Pavel Kruglov).
clone() constがinvalidate_query_response文字列を読み取り、isModified() constが同じ文字列に書き込むことで発生していた、ClickHouse、MySQL、PostgreSQL、XDBC の Dictionary ソースにおける data race を修正しました。#103277 (Miсhael Stetsyuk).Date32の単調性検出の誤りを修正しました。#101265 をクローズします。#103283 (Yarik Briukhovetskyi).- 認証前の TCP Hello パケット内の文字列を 64 KB に制限し、ハンドシェイク全体の時間を制限する
handshake_timeout_millisecondsserver setting を追加しました。これにより、未認証の client が過剰なメモリを消費したり、threads を無期限に占有したりすることを防ぎます。#103284 (Sema Checherinda). - String カラムにおける Parquet ColumnIndex stats の
min_value > max_valueを修正しました。#103334 (Saurabh Kumar Ojha). flattenTupleおよびtupleToNameValuePairsにおいて、Nullable(Tuple(...))入力の NULL 行が誤って処理される問題を修正しました。flattenTupleは外側の null map を保持するようになり、NULL 行が NULL のまま維持されます。tupleToNameValuePairsは、入力がNullable(Tuple(...))の場合、可能であれば結果の値の型をNullable(T)に変更するようになり、NULL 行は[('a', 0), ('b', 0)]ではなく[('a', NULL), ('b', NULL)]を生成します。要素型をNullableでラップできない場合 (例:Array) は、NULL の代わりにデフォルト値が使用されます。#103312 をクローズします。#103383 (Nihal Z. Miaji).- Native format 内の不正な flattened Dynamic data を検出するようにしました。#103392 (Pavel Kruglov).
- snapshot 同期後に stale RPC が原因でレプリケーションが停止する問題を修正しました。#103406 (Seva Potapov).
- BSON 型が
Nullable(T)またはArray(Nullable(T))カラム内の対象カラム型と互換性のない値を含む不正な BSON document を読み取る際に、LOGICAL_ERROR“Cannot pop N rows from X” によって server が異常終了していた問題 (debug / sanitizer builds で発生) を修正しました。今後は、不正な行に対して意図どおりILLEGAL_COLUMNexception が正常に生成されます。#103418 (Groene AI). - 先頭の行が空で、かつ常に false を返すラムダとともに適用された
Array(String)カラムに対するarrayFillおよびarrayReverseFillでの server 異常終了を修正しました。aggregate / sub-array ループでsize_t索引 が underflow してSIZE_MAXとなり、その結果ColumnString::doInsertManyFrom内で範囲外読み取りが発生していました。同じ bug family の事例として #12263 があります。#103424 (Groene AI). - 上流の REPLACE RMV の EXCHANGE によって解決途中で対象ストレージの identity が切り替わる際、SQL SECURITY DEFINER を使用する下流の APPEND RMV で発生していた ACCESS_DENIED / UNKNOWN_TABLE を修正しました。#103427 (Alexander Gololobov).
urltable function から_timeカラムを設定するようにしました。#103437 (Nikita Taranov).- 無効なビット幅を持つ不正な入力の処理時に、
ALPコーデックの伸長処理経路で発生しうる範囲外読み取りを修正しました。#103457 (Raufs Dunamalijevs). SYSTEM SYNC FILESYSTEM CACHE '<name>' ON CLUSTER ...で、クエリのフォーマット時に cache 名が失われ、指定した cache のみではなくリモートノード上のすべてのファイルシステムキャッシュが同期されてしまう不具合を修正しました。#103469 (Asish Kumar).deltaLakeAzureにおける URL エンコードされたパスの処理を修正しました。#103509 をクローズしました。#103525 (Smita Kulkarni).AggregateFunctionの state に整数を掛ける処理 (例:quantilesExactState(...) * N) で発生する heap-use-after-free を修正しました。二乗法によるべき乗ループで state を自身と merge しており、集約関数のmergeが内部ストレージを再割り当てする場合、これは未定義動作になります。STID 0988-40af をクローズしました。#103536 (Groene AI).- ディスク上にある 2 つの空の unexpected パーツのブロック範囲が重複しているものの、一方が他方を包含していない場合に、
ReplicatedMergeTreeテーブルの起動時にまれに発生していたLOGICAL_ERROR“Part X intersects previous part Y” を修正しました。この例外により table-attach スレッドが中断され、テーブルを起動できなくなっていました。#103537 (Groene AI). - 非アダプティブインデックス粒度 (
index_granularity_bytes = 0) を使用するMergeTreeテーブルで、最後の data mark が不完全な場合に mutation によって引き起こされていたLogical error: Incorrect mark rows for part ...(デバッグ時のみのアサーション) を修正しました (DETACH/ATTACHの後に論理削除を行うと最も確実に再現できます) 。#103538 (Groene AI). file()テーブル関数経由で/procおよび/sysの疑似ファイルを読み取る際に、clickhouse-localが 0 行を何も警告せず返してしまう不具合を修正しました (例:SELECT * FROM file('/proc/cpuinfo', 'RawBLOB')) 。#103548 (Ashrith Bandla).GenerateRandomtable engine におけるmax_string_length引数の処理を修正しました。#103550 (Alex Kuleshov).- ログ内でネストされた認証情報のマスキングを修正しました。#103552 (Vitaly Baranov).
- 利用できない場合でも SVE 命令を使用してしまう SVE 検出を修正しました。#103568 (Raúl Marín).
GenerateRandomのストレージ引数のパースを修正しました。#103574 (Konstantin Bogdanov).- ±inf で始まるデータに対して
WITH FILLで無限ループが発生する問題を修正しました。#103580 (Konstantin Bogdanov). Variant型へのJSONExtractで JSON の小数が暗黙に切り捨てられていた問題を修正しました。以前は、JSONExtract('{"x": 3.14}', 'x', 'Variant(Int64, Float64)')はInt64=3を返し、JSONExtract('{"x": 3.14}', 'x', 'Variant(String, Int64)')はInt64=3を返して、小数部分が失われていました。現在は小数値が損失なく保持されます。Float64/Decimalのメンバーが存在する場合はそれが値を保持し、存在しない場合はStringのメンバーが元の JSON をそのまま取り込みます。整数メンバーのみを含むVariant型 (例:Variant(Int64, Int32)) および整数への直接抽出 (JSONExtract(json, 'Int64')、JSONExtractIntなど) の挙動は変わりません。 #103620 (Groene AI).- 引数なしの
SYSTEM INSTRUMENT REMOVEが、SYNTAX_ERROR(エラーコード 62) ではなくstd::bad_optional_access(エラーコード 1001) を発生させる問題を修正しました。 #103622 (Pablo Marcos). - 3 番目の argument に timezone 文字列を指定して呼び出した際の、
windowIDおよびtumblewindow view における論理エラー / 未定義動作を修正しました。 #103641 (Alexey Milovidov). - S3 client のログで、空でない x-amz-bucket-region header を含む HTTP 400 レスポンス (SigV4 の署名 Region が誤っている場合) を、汎用的なエラー扱いではなく、より明確なログ行を伴う wrong-region の情報メッセージとして扱うようになりました。また、STS web identity credentials provider は、web identity が設定されている場合にのみ S3 credentials chain に追加されるようになり、これを使わないデプロイメントで不要な警告が減ります。 #99140 をクローズします。 #103673 (MeltonSmith).
SYSTEM SYNC REPLICA <db>.<tbl> IF EXISTSを、database が存在しない場合でも黙って成功するよう修正しました。これにより、存在しない table に対する既存の挙動とDROP TABLE IF EXISTSの先例に一致します。以前は、IF EXISTSがあるにもかかわらず、このクエリはUNKNOWN_DATABASEを返していました。 #103629 をクローズします。 #103689 (Groene AI).MergeTreetable のソートキーにArray(LowCardinality(...))があり、WHEREclause でそのカラムと element type が異なるArray定数との間でplus/minusを使用した場合に、FunctionBinaryArithmetic::executeImpl2が論理エラーArguments of 'plus' have incorrect data typesを投げる問題を修正しました。KeyCondition::getMonotonicityForRangeは、内部の数値ディスパッチを呼び出す前にLowCardinalityを再帰的に取り除くようになりました。 #103701 (Groene AI).- 26.1+ における動的な cache リサイズ競合を修正しました。 #103702 (Kseniia Sumarokova).
- 式にキャプチャされた定数を持つラムダ (例:
arrayMap((k, v) -> concat(k, '=', v), mapKeys(m), mapValues(m)))) が含まれるALIASカラムで、text および bloom_filter のスキップインデックスが暗黙に無視されていた問題を修正しました。 #103708 (Anton Popov). start_posがUINT64_MAXに近い場合のpositionおよびpositionCaseInsensitiveで、ポインタ演算のオーバーフローにより処理が停止したり segmentation fault を引き起こしたりする問題を修正しました。 #103766 (Raúl Marín).- 小数部が二重になった dateTime のパース中に発生する未定義動作を修正しました。 #103773 (Yarik Briukhovetskyi).
- 26.x で、JIT コンパイルされた
ifおよびmultiIfにおいて、結果型がDecimalで、いずれかの分岐に非Decimal(整数または浮動小数点) のリテラルがある場合、実際より10^scale倍小さい値がそのまま返されるデータ正確性のリグレッションを修正しました。低速な (非 JIT の) 経路は影響を受けていませんでした。影響を受けるバージョンでの回避策:SET compile_expressions = 0。#103809 (Groene AI). - テキスト索引から対応する関数へトークナイザーが正しく受け渡されない問題を修正しました。#103826 (Elmi Ahmadov).
WHERE句で、要素が単一のキーカラムに重複排除されるタプルに対してINまたはNOT INを使用したとき、numbers、generate_series、および同様の範囲対応ソースが誤った結果を返す問題を修正しました (例:WHERE tuple(number, number) NOT IN (tuple(1, 2))) 。#103660 をクローズします。#103835 (Groene AI).- 自動スピリングを行うハッシュ結合の実際のメモリ使用量ピークが
max_bytes_before_external_joinを超えないようにしました。従来は、統計に基づく事前割り当て、インプレースでのハッシュテーブルの倍増、制限のないGraceHashJoinのインメモリバケットのいずれでも、クエリが設定された上限を超えてMEMORY_LIMIT_EXCEEDEDが発生する可能性がありました。#103838 (Alexey Milovidov). clickhouse-localの終了時に、system logs (text_logやfilesystem_cache_logなど) が設定されているとハングする問題を修正しました。SystemLogs::flushImplがBaseDaemon::instance().flushTextLogs()を呼び出していましたが、これはclickhouse-serverの外ではstd::bad_castを送出するため、保存スレッドが動作し続け、最終的にpthread_cond_destroyが system log queue の破棄をブロックしていました。#103874 (Alexey Milovidov).MATERIALIZEDCTE クエリで、ボディが参照ごとに異なる推論カラム型に解決される場合、サーバーをBad castLOGICAL_ERRORでクラッシュさせるのではなく、明確なTYPE_MISMATCHerror を返して拒否するようにしました。これは以前、CTE のボディが外側のスコープの識別子 (たとえば呼び出し元のサブクエリの projection 内の alias) を参照し、それらが参照ごとに異なる定数としてインライン展開される場合に発生していました。#103879 (Groene AI).ANYOUTERJOINの上にある filter にrand、now、rowNumberInAllBlocksなどの非決定論的関数が含まれる場合、JOIN 変換クエリプラン optimizer (tryConvertAnyOuterJoinToInnerJoin,tryConvertAnyJoinToSemiOrAntiJoin) で未初期化値が使用される問題を修正しました。optimizer はこのような filter を定数畳み込みしなくなり、JOIN を変更しないままにします。これにより、行が気付かないうちに欠落するおそれのあるINNER/SEMI/ANTI JOINへの誤変換も防止されます。#103880 (Groene AI).- consumer が一時的な topic-partition lock を保持している間に Keeper session が置き換えられた場合、サーバーがクラッシュする可能性のあった
StorageKafka2の use-after-free を修正しました。#103890 (Groene AI). EmbeddedRocksDBテーブルをJOIN ... USING (key)で、キーカラムの型がストレージの主キーと異なるサブクエリ (例:Nullable(UInt64)、Int64、Decimal) と JOIN した際に、LOGICAL_ERROR“Primary key type mismatch” が送出される問題を修正しました。planner は型不一致時にDirectKeyValueJoinを選択せず、型変換を処理できるHashJoinにフォールバックするようになりました。#103928 (Groene AI).SET max_threads = DEFAULT(max_final_threadsとmax_parsing_threadsも同様) を実行しても、auto 状態が失われなくなりました。以前は、これらの設定のいずれかをリセットすると、system.settingsには'auto(32)'ではなく解決後のコア数 (例:32) が表示され、サーバーもその値が明示的に固定されたかのように動作していました。#103991 (Groene AI).- 永続化された
alpha_sizeが 25.12 より前の deserialize+serialize サイクルで拡張されていたAggregateFunction(topK(N), String)カラムの読み取り時に発生するSIZES_OF_ARRAYS_DONT_MATCHを修正しました。#104002 (Raúl Marín). - PostgreSQL、Cassandra、XDBC の Dictionary ソースにおける SQL インジェクション脆弱性を修正しました。単一引用符を含む文字列キーが
\'(バックスラッシュ) でエスケープされていましたが、これらのバックエンドではこれがエスケープシーケンスではなくリテラルのバックスラッシュとして扱われるため、Dictionary ルックアップクエリに任意の SQL を注入できていました。ExternalQueryBuilderは、これらのバックエンド向けに SQL 標準の''エスケープを出力するようになりました。ClickHouse と MySQL の Dictionary ソースは、引き続きバックスラッシュエスケープを使用します。#104009 (Shaohua Wang). - カラム型を LowCardinality に変更、または LowCardinality から変更した際に、min-max projection が再構築されていなかった場合に発生しうる集約時の型不一致を修正しました。#104013 (Nikita Taranov).
- 式のマージ時に未使用カラム削除の抑止が伝播されないことで発生していた、クエリ最適化の無限ループを修正しました。#104083 (János Benjamin Antal).
- 名前ベースではなく UUID ベースの追跡を使用することで、ストリーミングテーブル (S3Queue、Kafka、RabbitMQ) の一括リネーム時に
StreamingStorageRegistry::renameTableで発生するLOGICAL_ERRORを修正しました。#104101 (Nikita Taranov). UNION ALLで構築された CTE にSELECT DISTINCTの分岐が含まれ、外側のクエリが CTE のカラムの一部だけを射影している場合に、誤った結果が返る問題を修正しました。新しいアナライザのRemoveUnusedProjectionColumnsPassが、内側のDISTINCT射影から未参照カラムを誤って削除していたため、本来は DISTINCT のままであるべき行 (射影されたカラムの値は同じでも、削除されたカラムの値が異なる行) が 1 行に潰れていました。#104114 (Groene AI).- 設定
optimize_inverse_dictionary_lookupにおける複数のエッジケースでの正しさの問題を修正しました。この最適化により、行が気付かないうちに欠落したり、例外が抑制されたりする可能性がありました。Closes #103270. Close #103085. #104133 (Nihal Z. Miaji). quantileTimingstate のデシリアライズ中に境界外書き込みが発生する問題を修正しました。#104141 (Alexey Milovidov).- 範囲外の
Float64値を広い整数型 (UInt64、Int64、Int128、UInt128、Int256、UInt256) に変換した際の未定義動作を修正しました。以前は、Float64(numeric_limits<T>::max())と等しい値 (実際の最大値を上回る値に丸められる) が境界チェックをすり抜け、その後の cast で UB を引き起こしていました。これは、集約関数パラメータのパース (topK、histogram、uniqUpTo、groupArrayInsertAtなど) や、SET <setting> = <Float64>による整数型設定に影響していました。Closes #103817. #104154 (Groene AI). - ネストした
Tuple(Tuple(Nullable(...)))(またはそれ以上に深くネストしたもの) をStringリテラルと比較した際に発生していたLOGICAL_ERROR例外 “Unexpected return type from comparison. ExpectedUInt8. GotConst(Nullable(UInt8))” を修正しました。比較の戻り値型は、実行時の挙動に一致するNullable(UInt8)として正しく推論されるようになりました。#104171 (Groene AI). query_plan_optimize_lazy_final = 1のとき、SELECT ... FROM <ReplacingMergeTree(version, is_deleted)> FINAL PREWHERE is_deleted = <expr> AND <other column expr>で発生していた server abort (UndefinedBehaviorSanitizer: reference binding to null pointer、release build での segfault) を修正しました。lazy-FINAL の非交差読み取り step では、prewhere がis_deletedカラムを入力として消費したにもかかわらず、それを出力として再公開していなかったため、出力 header からis_deletedカラムが失われていました。その結果、下流のaddIsDeletedFilterstep で null のActionsDAG::Nodepointer が逆参照されていました。#104177 (Groene AI).- system.failpoints table の呼び出し時に failpoint が使われ、その結果無効化される可能性があった問題を修正しました。#104237 (Pedro Ferreira).
- 入力に UTF-8 文字がちょうど buffer 境界で終わる場合に、
detectLanguage*関数で発生していたMemorySanitizer: use-of-uninitialized-valueを修正しました。#104257 (Raúl Marín). - 基盤の object storage がファイルシステムキャッシュのような decorator でラップされたディスクに対して
SETTINGS disk = '...'を指定して呼び出した際に、data-lake の table function やエンジン (icebergS3、deltaLakeS3など) で argument のパースが中断されていた論理エラー (Bad cast from type DB::CachedObjectStorage to DB::S3ObjectStorage) を修正しました。#89300 をクローズします。#104258 (Groene AI). valuesという名前のカラムに対する括弧付き添字式 (例:(values['a'])) のパースを修正し、SQL 標準のVALUEStable 式として解釈されないようにしました。#104312 (Desel72).- ファイルシステムキャッシュの background エビクション thread (
SLRUFileCachePriority::collectEvictionInfo) で発生しうる server abort/LOGICAL_ERRORを修正しました。これは、keep_free_space_size_ratioまたはkeep_free_space_elements_ratioが、すべての cache entries がすでに SLRU protected queue に昇格済み (probationary は空) である状況でもエビクションがトリガーされるほど高い場合に発生する可能性がありました。#104313 (Groene AI). - UNION ALL views、window functions、または alias-column 名の衝突と組み合わせて projections を使用した際に発生する例外 (
NOT_FOUND_COLUMN_IN_BLOCK、LOGICAL_ERROR、AMBIGUOUS_COLUMN_NAME) を修正しました。#88798 からのリグレッションです。#104317 (Amos Bird). - postgres arrays のパースにおける underflow の可能性を修正しました。#104322 (Grant Holly).
- 非
Nullable型 (Array、Tuple、Mapなど) を返す関数で、Nullableな引数を受け付けるようになりました。対象の関数はextractAll、extractAllGroups、extractAllGroupsHorizontal、extractAllGroupsVertical、extractGroups、splitByChar、splitByString、splitByRegexp、splitByWhitespace、splitByNonAlpha、alphaTokensです。NULL入力行では、“Nested type is not allowed inside Nullable type” を発生させる代わりに、結果型のデフォルト値 (たとえば空の配列) を返すようになりました。#104326 (Alexey Milovidov). - パーティション化されたテーブルにおける Iceberg の統計情報の不具合を修正しました。これにより #104321 はクローズされます。#104329 (Konstantin Vedernikov).
- macOS (および同様の jemalloc ビルド) で、オプションの
background_thread/max_background_threadsmallctl が存在しないにもかかわらず、Jemalloc::verifySetupがjemalloc_enable_background_threadsの不一致を誤って報告していたことにより、server 起動時に発生していた致命的な論理エラーを修正しました。これらの mallctl が利用できない場合は検証をスキップし、getValueも失敗時に出力を未初期化のまま残さなくなりました。#102183 をクローズします。#104330 (SAYON DEEP). max_rows_to_read_leafとread_overflow_mode_leaf = 'throw'を指定したSELECTクエリで、スキップ索引によって読み取り行数が leaf 上限未満まで減る場合でも、誤ってTOO_MANY_ROWSをthrowしてしまうことがあった不具合を修正しました。対になる非 leaf 側の設定 (max_rows_to_read/read_overflow_mode) については、すでに処理済みでした。#104331 (Groene AI).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 (Groene AI).- THEN のみの supertype と、(THEN 群 + ELSE) の supertype が異なる
ColumnDecimalストレージに配置される場合に、caseWithExpression(および SQL のCASE expr WHEN ... THEN ... ELSE ...) で発生するBad castLOGICAL_ERRORを修正しました。たとえば、THEN の値が(UInt16, Int8)で、ELSE がDecimal(9, 2)の場合です。#104335 をクローズします。#104378 (Groene AI). logExceptionBeforeStart(非同期挿入の flushes、マテリアライズドビューの refreshes、内部クエリ中に発生した parse エラー) 経由で報告される内部障害で、ユーザー可視のFailedQuery、FailedSelectQuery、FailedInsertQueryの counters に加えて、FailedInternalQuery、FailedInternalSelectQuery、FailedInternalInsertQueryの ProfileEvents も正しく増加するようになりました。従来は、クエリ実行開始前に発生した障害ではこれらの内部カウンターが 0 のままで、主要な種類の内部障害が過少計上されていました。#104399 (Groene AI).BACKUPまたはRESTOREステートメントのbase_backup設定内でクエリパラメータを使用した際に発生するCode: 36. BAD_ARGUMENTS Expected literal, got {name:Type}を修正しました (例:BACKUP ... SETTINGS base_backup = S3({backup_name:String}, ...)) 。このリグレッションは PR #99205 により26.1.5で導入されたものです。#103324 をクローズしました。#104413 (Groene AI).ALTER TABLE ... DROP COLUMNの後、iceberg_metadata_staleness_msが 0 より大きい状態でINSERTを実行すると発生していた、IcebergLocal/IcebergS3への書き込み時の server abort を修正しました。ALTER実行時にローカルの Iceberg metadata files cache が無効化されるようになり、以後の読み取りと書き込みで新しいスキーマが参照されます。#104419 (Groene AI).DROP ROLE、DROP USER、DROP SETTINGS PROFILE、DROP ROW POLICY、DROP QUOTA、DROP MASKING POLICYについて、削除された entity を参照していた他の access entity からその参照 (例: ユーザーのDEFAULT ROLEリスト、settings profile のTOリスト、row policy の grantee) を削除し、そのクリーンアップ結果をディスクに永続化するよう修正しました。従来は、SHOW CREATEが不明な UUID を filter するため in-memory state は正しく見えていましたが、ディスク上の.sqlファイルには不正なID('<dropped-uuid>')エントリが残っており、次回 server を再起動すると参照が復活し、distributed query execution 中にACCESS_ENTITY_NOT_FOUNDerror として表面化していました。#104427 (Groene AI).BlobEndpointURL に空、非数値、または範囲外のポートを含む接続文字列 (例:BlobEndpoint=http://host:abc/) を使ったazureBlobStorage、AzureBlobStorage-engine、および Azure 上の Delta Lake で発生する server abort を修正しました。debug/sanitizer builds でも server が abort する代わりに、適切なBAD_ARGUMENTSerror を返すようになりました。#104460 (Groene AI).remoteおよびremoteSecuretable functions で、ユーザー名としてクォートなしの識別子を使えるようにしました。これは database 引数や table 引数がクォートなし識別子を受け付ける動作に合わせたものです。従来、このようなクエリはdefaultユーザーを参照する誤解を招く authentication error で失敗していました。#104465 (Alexey Milovidov).- SQL user-defined function の本体に、括弧で囲まれた内側の
UNION ALLが含まれている場合に発生するLogical error: Incorrect ASTSelectWithUnionQuery (modes: M, selects: N)を修正しました (例:CREATE FUNCTION f AS x -> (SELECT 1 UNION ALL (SELECT 1 UNION ALL SELECT 1))) 。#104477 (Groene AI). - 第 2 引数が空の
uniqThetastate である場合に、uniqThetaIntersectが0ではなく第 1 引数のカーディナリティを返していた不具合を修正しました。たとえば、predicate によってすべての行が除外された場合のuniqThetaMergeStateIf(s, predicate)の結果で発生していました。#104529 (Groene AI). - Iceberg REST カタログ (
iceberg-rest、onelake、biglake) をバックエンドとするDataLakeCatalogdatabase で、SHOW TABLESとsystem.tablesの一覧が途中で黙って切り捨てられる問題を修正しました。カタログ server が list-tables または list-namespaces のレスポンスをページ分割している場合 (たとえば Microsoft Fabric / OneLake で 1 ネームスペースあたり約 50 テーブルを超える場合) 、後続ページの table は直接SELECTではクエリできるにもかかわらず、SHOW TABLESとsystem.tablesでは表示されなくなっていました。RestCatalogは現在、Iceberg REST OpenAPI spec で定義された継続トークンnext-page-tokenをたどるようになり、既存のPaimonRestCatalogおよびUnityCatalogの動作と一致します。#104531 (Groene AI). inputtable function は、固定スキーマを持つフォーマット (LineAsString、RawBLOB、JSONAsStringなど) の場合、周囲のINSERTクエリのFORMATclause から structure を推論するようになりました。これにより、これらのフォーマットでinput('line String')のように structure を繰り返し指定する必要がなくなります。#104532. #104533 (Groene AI).- Iceberg history 内のフィールドの datatype を
Int32からInt64に更新しました。#94176 をクローズします。#104579 (Smita Kulkarni). - カンマの後に lambda が続く関数呼び出しをパースする際に発生していた
Inconsistent AST formattingLOGICAL_ERRORを修正しました。例:SELECT substring(x, `x` -> `x`)。従来、パーサーは直前の argument を lambda の左辺に黙ってマージしてしまい、その結果、同じ AST に再パースできない単一 argument の呼び出しを生成していました。現在は関数本来の arity を保持します。#104626 (Groene AI). CHECK TABLE tは、database 修飾子が指定されていない場合、同名の永続 table よりもTEMPORARYtable を優先するようになりました。これはSHOW CREATE TABLE、DESCRIBE TABLE、OPTIMIZE TABLE、ALTER TABLEですでに使われている優先順位と一致します。従来のCHECK TABLE tは一時 table を完全に無視していたため、これらのエンジンがCHECKをサポートしているにもかかわらず、一時LogまたはFiletable に対してUNKNOWN_TABLEで失敗していました。#100966 のフォローアップです。#104637 (Groene AI).<placement>が設定されていない Keeper に対してquorum_reads=trueを付けてget /keeper/availability_zoneを送信したときに、Keeper の終了と再起動のループが発生する問題を修正しました。#104663 (myeongjun).- 論理エラーを引き起こす
FutureSetFromTuple::buildOrderedSetInplaceの TOCTOU data race を修正しました。#104673 (Miсhael Stetsyuk). - arguments がカラムとして渡されたか定数として渡されたかによって、同じ入力でも異なる結果を返していた複数の関数を修正しました:
bitRotateLeft/bitRotateRight(境界 shift カウント) 、length(FixedString)/concatWithSeparatorにおけるLowCardinality(Nullable)入力、NaN に対するroundDown、および不正な UTF-8 に対するrightUTF8。#104710 (Raúl Marín). - 最頻値がカラムのデフォルト値で、かつ data が複数の
MergeTreeパーツにまたがって存在する場合 (スパースカラム読み取りパス) に、anyHeavyが heavy ではない値を返していた問題を修正しました。#104712 (Raúl Marín). - 設定制約の処理に関する複数の不具合を修正しました。設定の正規名に対して宣言された
MergeTreeSettingsの制約が、その設定の alias への書き込みによって回避できてしまう問題と、disallowed_values制約のチェックが clamp パス (secondary queries、ON CLUSTERworkers、SQL SECURITY DEFINERviews) で変更を黙って破棄すべきところで例外を投げていた問題を修正しました。 #104737 (Raúl Marín). - まだメタデータが読み込まれていない遅延 attached 状態の
Iceberg/IcebergLocal/Delta Lake/Hudiテーブルに対して、OPTIMIZE TABLE、ALTER TABLE ... DELETE、ALTER TABLE ... ADD COLUMN、およびその他の ALTER バリアントで発生していたLOGICAL_ERROR例外 (Metadata is not initialized) を修正しました (典型的には、server の再起動後や、以前のメタデータ書き込み失敗によってディスク上に corrupted なメタデータファイルが残った後に発生します) 。これにより、メタデータの読み込みに成功した場合は操作が通常どおり続行され、失敗した場合でも debug / sanitizer builds で server を abort する代わりに、根本原因である読み込み失敗が通常のユーザー向け例外として表示されるようになりました。 #104738 (Groene AI). AvroConfluentRowInputFormatの use-after-free バグによる segfault を修正しました。 #104751 (Miсhael Stetsyuk).numericIndexedVectorPointwiseMultiply、numericIndexedVectorPointwiseDivide、numericIndexedVectorPointwiseEqual、numericIndexedVectorPointwiseNotEqualの scalar バリアントは、Int64::maxを超えるUInt64scalar を指定して呼び出された場合にINCORRECT_DATAを返すようになりました。 #104784 (FriendLey).compatibility設定の適用後に、その alias 名で設定を手動で上書きした場合 (例:SET allow_experimental_analyzer = 1ではなくSET enable_analyzer = 1) 、その後のcompatibility設定の変更によってその上書きが取り消されてしまうことがある不具合を修正しました。 #104829 (Raúl Marín).- https://github.com/ClickHouse/ClickHouse/commit/0e8ad4355c9d 以降、AWS ロガーが無効になっていた問題を修正しました。 #104837 (Konstantin Bogdanov).
- 引数がカラムとして渡されたか定数として渡されたかによって、同じ入力でも異なる結果を返していたさらに 3 つの関数を修正しました。対象は、定数
Date/Date32/Enum/FixedStringのデフォルト値を持つtransform(およびそれを介したcaseWithExpression) 、Stringと定数FixedStringの比較演算子、そして定数条件下でFixedString分岐を持つif/ifNull/nullIfです。 #104858 (Raúl Marín). - パーティション式に、単一の定数値へ畳み込まれる関数 chain (
floor(NULL, toRelativeYearNum(...))など) が含まれている場合に、MergeTreeテーブルの partition pruning 中に発生していたBad cast from type DB::ColumnConst to DB::ColumnNullableによる server abort を修正しました。 #104861 (Groene AI). ContextDataの copy constructor におけるThreadSanitizerdata race を修正しました。table_function_resultsがtable_function_results_mutexを取得せずにコピー元オブジェクトから複製されていたため、同時実行中のContext::executeTableFunctionwriter と、copy constructor 内の非同期化 read が競合する可能性がありました。 #104879 (Groene AI).- 動的 structure を持つ型に対する data part の整合性チェックを修正し、corrupted な columns_substreams.txt を検出できるようにしました。追加の変更を含む https://github.com/ClickHouse/ClickHouse/pull/103858 の再提出です。 #104888 (Pavel Kruglov).
- DatabaseCatalog における DROP と UNDROP の競合を修正しました。#104915 (Azat Khuzhin).
- 部分的にダウンロードされた segments を含む場合のファイルシステムキャッシュの動的リサイズを修正し、Failed なエビクション後の restore accounting も修正しました。#104921 (Antonio Andelic).
- 一時テーブルに対する
DETACH TABLE(TEMPORARYkeyword なし) で、DETACH TEMPORARY TABLEと同様にSYNTAX_ERRORが正しく発生するようになりました。これまでは内部のis_detachedフラグを暗黙に設定し、エラーなしで終了していました。一時テーブルを削除するには、DROP TEMPORARY TABLEまたはDROP TABLEを使用してください (後者はContext::ResolveExternalを介して一時テーブルを解決します) 。#103475 をクローズしました。#104943 (Groene AI). filesystemtable function が、ファイル内容の loading 時にmax_memory_usage/max_server_memory_usageを尊重するよう修正しました。これまでは、大きなファイル内容や多数の並列読み取りにより、MEMORY_LIMIT_EXCEEDEDを発生させないまま制限を超過し、最終的に OOM によって強制終了されることがありました。#104956 (Alexey Milovidov).uuidでsystem.detached_tablesを filter した際に発生していたLOGICAL_ERRORを修正しました (例:SELECT count() FROM system.detached_tables WHERE uuid = '...') 。これにより、クエリは server を異常終了させることなく、期待どおりの結果を返すようになりました。#104979 (Groene AI).- ネストされた structure に空の
Tuple()リーフしか含まれない tuple (例:Tuple(c0 Array(Tuple()))またはTuple(c0 Tuple())) に対してflattenTupleを呼び出した場合でも、LOGICAL_ERRORは発生しなくなりました。こうした入力では、flatten の結果が空の tuple になることを説明する、ユーザー向けのILLEGAL_TYPE_OF_ARGUMENT例外が返されるようになりました。#104989 (Groene AI). GROUP BYを伴うloop(remote(...))(または aggregation を遅延できるストレージをloop()でラップしたもの) へのクエリで発生していた、server の異常終了と誤った結果を黙って返す不具合を修正しました。これまでは、外側の planner が内側のストレージから報告された processing stage に基づいてMergingAggregatedStepを追加していましたが、LoopSourceは常に内側の select をQueryProcessingStage::Completeで materialize し、通常の column chunks を出力するため、enable_parallel_replicas = 1の場合にMergingAggregatedTransformがLOGICAL_ERROR(Chunk info was not set for chunk in MergingAggregatedTransform) を引き起こし、それ以外では外側の aggregation を黙って欠落させていました。#105001 (Groene AI).clickhouse-benchmark --reconnect(値なしの単独指定) は、--reconnectを値必須の整数オプションに変更した影響で、25.4 で意図せず壊れていました。値なしの形式が再び使えるようになり、--reconnect=1(すべてのクエリで再接続) と同等になりました。#105006 (Groene AI).- 不完全な UTF-8 シーケンスで終わるカラム名に対して、不正な JSON が出力される問題を修正しました。#105012 (Pablo Marcos).
- materialized view の source table に対する
EXCHANGE TABLESまたはCREATE OR REPLACE TABLEの後に、データが黙って失われる問題を修正しました。MVの source-view dependency edge は元の名前に保持されるようになり、INSERT 時にも引き続き動作します。#98779 で導入されたリグレッションで、今回の修正によりリグレッション前の動作が復元されます。#105029 (Sema Checherinda). toUInt128(<Float64 expression>)のようにFloatをUInt128に変換する式を JIT コンパイルする際に発生していたCANNOT_COMPILE_CODE Could not find symbol __fixunsdftiを修正しました。符号なし 128 ビットの float-to-int compiler-rt 組み込み関数が JIT シンボルリゾルバに不足していました。#105031 をクローズしました。#105048 (Raúl Marín)。send_logs_levelが設定されているときに、失敗したクエリのログメッセージをclickhouse-localが出力しない問題を修正しました。#105067 (Alexey Milovidov)。- 同じクエリ内で、同じパラメーター化ビューを異なる引数値で複数回参照した場合に、結果が不正になる問題を修正しました。以前は、アナライザがそれらの呼び出しを 1 つにまとめ、最初の filter 以外をすべて暗黙に破棄していました。#105170 (Alexey Milovidov)。
play.htmlの web UI で、TOTALS行が結果テーブルの下部に 2 回表示される問題を修正しました。#103803 (Alexey Milovidov)。- vector search 中に有限でないベクトル (
NaN、±Inf) を拒否するようにしました (検索対象ベクトルと参照ベクトルの両方) 。これらは以前、usearchで未定義動作を引き起こしていました。#104079 (Groene AI)。 - PromQL: 空のベクトルに対する aggregation operator を修正しました。#104425 (Vitaly Baranov)。
- PromQL: Prometheus query API のエラー処理を修正しました。#104741 (Vitaly Baranov)。
MergeTreeTransaction::afterCommitにおける競合状態を修正しました。これは、commitCSNを ZooKeeper に書き込んだ後、トランザクションを完了する前に connection が失われると、system.partsで新しいcreation_csn/removal_csnが見えるようになる前に、COMMITの応答が client に届く可能性があるという問題でした。#104708 (Tuan Pham Anh)。- ネストした配列の索引付け (
arr[arr[arr[...]]]) を変換する際に、KQL パーサーでメモリ使用量が指数的に増加する問題を修正しました。#105142 (Alexey Milovidov)。 - 右側の table で 1 つの key に対して複数の行があり、サイズ制限によって出力 block が分割される場合に、
RIGHT ANY JOINの結果が不正になる問題を修正しました。#99431 をクローズしました。#102064 (Vladimir Cherkasov)。 - ネスト型のデシリアライゼーション中に、
Avroリーダーでスタックオーバーフローをチェックするようにしました。#102417 (Pavel Kruglov)。 MergeTreesettings に対するsystem.completions内の重複行を修正しました。各設定名が 2 回ずつ表示されていたのは、設定名が同一であるにもかかわらず、getMergeTreeSettingsとgetReplicatedMergeTreeSettingsの両方が dump されていたためです。#102013 をクローズしました。#102015 (Groene AI)。StorageObjectStorageQueue(S3Queue、AzureQueue) で、部分的に処理されたファイルを object storage から最後まで読み切るまでシャットダウンがブロックされる問題を修正しました。これにより、シャットダウン時にはソースが読み取りを即座に中断するようになりました。deduplication により、シャットダウン前に宛先テーブルへすでにストリーミングされた行は、次回起動時にファイルが再試行されても重複しません。#103126 (Tuan Pham Anh).insert_deduplication_tokenを指定したAliastable engine への複数 block の insert で、すべての block が保持されるよう修正しました。#103246 (Enric Calabuig).- native
JSONカラムに対するJSONHasおよびJSONExtractBoolが、0/1ではなく抽出された値 (UInt8に cast されたもの) を返してしまう問題を修正しました。#103313 (zxuhan7). format_custom_row_after_delimiterを省略した不正または悪意あるデータに対して、CustomSeparatedinput format を保護するようにしました。header 検出、schema inference、可変カラムの行では、以前はフィールドが際限なく蓄積され、失敗するまでに数 GB のメモリが確保される可能性がありました。現在は、1 つの行に 1,000,000 個を超えるフィールドが含まれていると、読み取りはINCORRECT_DATAで失敗します。#103404 (Groene AI).- replicated
MergeTreetable のRESTOREを修正し、復元した part の Attach に通常の insert 用 Keeper 再試行回数ではなくbackup_restore_keeper_max_retriesが使われるようにしました。#104610 (Pablo Marcos). MergeTreetable におけるWHERE p AND <LowCardinality(Nullable(int)) constant>の誤った結果を修正しました。以前は、この種のクエリは 0 行を返していました。これは、パーツ剪枝がLowCardinality(Nullable(...))型からデフォルトのNULLを導出し、notEquals(x, NULL)ガードを生成して、すべての part を剪枝していたためです。#104767 (Groene AI).- カラムの非単射関数で group 化し、そのカラムが同時に partition key でもある場合の誤った aggregation 結果を修正しました (例:
PARTITION BY aとGROUP BY intDiv(a, 2)またはa % 2) 。以前は、異なるパーティションにあっても同じグループに対応する値が merge されず、allow_aggregate_partitions_independently = 1の場合に重複したグループ行が生成されていました。#104869 (Nihal Z. Miaji). - 復旧中の follower へ送信中の snapshot が削除または移動される可能性があった
Keeperの snapshot 転送における race を修正しました。#104941 (Antonio Andelic). hilbertEncodeとmortonEncodeにおいて、非定数のTupleの第 1 引数 (range mask) が、すべての行の bit shift に行 0 の値を使っていたため、誤った結果を静かに返していたバグを修正しました。これらの関数は現在、行ごとの mask 値を計算するため、結果が入力の定数性や block サイズに依存しなくなりました。#104992 (Groene AI).clickhouse-localが./clickhouse-local.xml、~/.clickhouse-local/config.xml、または/etc/clickhouse-local/config.xmlから configuration file を自動検出した際に、ユーザーレベルの設定 (profiles、users、quotas、access-control settings) を黙って無視していた問題を修正しました。以前は、これらの設定は--config-fileが指定された場合、または現在のディレクトリに./config.xmlが存在する場合にのみ適用されていましたが、現在はすべての discovery path で一貫した動作になります。#105008 (Groene AI).- 文字列リテラルと比較した際に
BFloat16カラムが一致件数 0 を何もエラーを出さずに返していた問題を修正しました (例:WHERE bf16_col = '49.9') 。 #105042 (Raúl Marín). SummingMergeTree、AggregatingMergeTree、CoalescingMergeTreeで、マージ時に必要なカラムが存在しない、または期限切れの場合のCLEAR COLUMNおよび TTL 処理を修正しました。 #101953 をクローズします。 #105203 (Antonio Andelic).shared->clusters_configを参照外しする前に明示的な null ガードを追加し、DNSCacheUpdater::runとContext::reloadClusterConfigの競合状態を修正しました。 #105220 (Mikhail f. Shiryaev).msおよびnsの精度を使用するtoDateTime64に対するbest_effortの日付時刻パースを修正しました。 #105233 (Kaviraj Kanagaraj).OSIOWaitMicrosecondsがクエリ単位の I/O 待機時間ではなく、スレッドの生存期間全体にわたる I/O 待機時間を報告していた問題を修正しました。 #105246 (Mikhail f. Shiryaev).Huditable engine で、table directory 内の Parquet file が Hudi の[FileId]_[FileWriteToken]_[Timestamp].[extension]命名規則に一致しない場合、LOGICAL_ERRORではなくINCORRECT_DATA(通常のクエリレベルの例外) を発生させるようになりました。従来は、このようなファイル名が debug builds で例外の原因になっていました。 #105266 (Groene AI).ParallelFormattingOutputFormatで、スケジュール失敗時に発生するデッドロックを修正しました。scheduleFormatterThreadForUnitWithNumberが例外をスローすると (例:CANNOT_SCHEDULE_TASK) 、そのユニットがREADY_TO_FORMATのまま残り、処理する formatter thread も存在しないため、ハングしていました。現在はスケジュール呼び出しをtry/catchでラップし、失敗時はonBackgroundException経由で処理されるため、collector は正常に終了します。 #105275 (Azat Khuzhin).- 異常終了からの復旧時に
Distributed非同期 INSERT でデータが気付かれないまま失われる問題を修正しました。保存された Batch 内で最後の.binファイルが正常でも途中のファイルが破損していた場合、DistributedAsyncInsertBatch::recoverBatchは最後のファイルのヘッダーしか検証せず、その後sendBatchが正常なファイルも含めて Batch 全体を破損扱いにしていたため、そこに含まれる行が失われていました。現在は各ファイルのヘッダーを個別に検証するため、実際に破損したファイルだけがbroken/に移動され、残った行はリモート分片に届きます。 #105281 (Groene AI). clickhouse extract-from-config --tryのリグレッションを修正しました。config でfrom_env属性を使用し、include_from要素が存在しない場合 (または存在していても見つからないファイルを指している場合) 、すべてのfrom_envsubstitution が何もエラーを出さずに無視され、空文字列が返されていました。これにより 26.2.5 では Docker entrypoint のポート discovery が壊れていました。 #101704 をクローズします。 #105283 (Groene AI).- 挿入する値が
Enum、JSON、AggregateFunctionのいずれかで、そのテキスト表現にシングルクォートが含まれている場合に、SQLitetable へのINSERT INTOが SQLite の構文エラーで失敗する問題を修正しました。対応するシリアライゼーションでもoutput_format_values_escape_quote_with_quote設定が反映されるようになりました (従来これが反映されていたのはStringとFixedStringのみでした) 。 #105285 (Groene AI). allow_push_predicate_ast_for_distributed_subqueries = 1(デフォルト) を指定した分散クエリで、GLOBAL INのタプルが、射影に重複したカラム名を含むサブクエリと照合される際に発生していたCode: 44. ILLEGAL_COLUMN: Cannot add column ...: column with this name already existsを修正しました。例:(x, y) GLOBAL IN (SELECT number, number FROM numbers(5))。 #105290 (Groene AI).Array(LowCardinality(...))へのreinterpretが、実行時にわかりにくいNOT_IMPLEMENTEDエラーを返していた問題を修正しました。現在は型チェック時にILLEGAL_TYPE_OF_ARGUMENTを返します。 #105301 (Raúl Marín).minMap/maxMap(配列形式) およびminMappedArrays/maxMappedArraysが、NaNをORDER BYと一貫した形で扱うようになりました。NaNは末尾として扱われ (すべての値がNaNの場合にのみ返されます) 、従来は IEEE 754 の順序なし比較の意味論により、結果がデータ中のNaNの位置に依存していました。また、#100448 で修正されたminMap/maxMapのMap引数形式とも一致していませんでした。 #105331 (Raúl Marín).Nestedカラムを持つMergeTree系テーブル向けの、テーブル単位のColumnsDescriptioncache におけるメモリリークを修正しました。share_nested_offsets = 1(デフォルト) の場合、ALTER ADD COLUMN/DROP COLUMNのサイクルをまたいでもエントリが追い出されることはありませんでした。 #105376 (Groene AI).TYPE set(N)スキップ索引を持つSELECTで、WHERE句のアトムの結果型がFloat、BFloat16、またはその他の非整数型 (たとえばWHERE c0 + 0.1やWHERE log(c0)) である場合に発生していたBAD_ARGUMENTS例外 “It’s a bug! Only integer types are supported by__bitWrapperFunc” を修正しました。この場合、スキップ索引は通常のフィルターパスにフォールバックするようになりました。 #105384 (Groene AI).
ビルド/テスト/パッケージングの改善
- システムの
compiler-rtライブラリおよびヘッダーの使用を停止しました。#91475 をクローズします。#102857 (Konstantin Bogdanov). libssl3t64の OpenSSL CVE を修正するため、distroless Docker ベースイメージを更新しました。#103583 (Rahul Nair).keyserver.ubuntu.comでタイムアウトする代わりに複数の Ubuntu keyserver を連鎖的に利用することで、リリース時に GPG 鍵を確実に取得できるようにしました。#103834 (Mikhail f. Shiryaev).- ビルド時の
CMakeチェック (check_*,try_compile,try_run) を削除し、使用を禁止しました。コンパイラとツールチェーンは固定されているため、設定時の feature 検出は不要であり、現在はプロジェクト全体で無効化されています。バージョン固有の動作は、明示的にCMAKE_CXX_COMPILER_VERSIONに基づいて切り替える必要があります。#103980 (Alexey Milovidov). libarchiveを 3.8.6 から 3.8.7 に更新しました。#104047 (Robert Schulze).mongo-c-driverを 2.3.0 に更新しました。#104300 (Raúl Marín).- 22.x 向けに LLVM の dependencies を更新しました。#104381 (Joshua Carp).
- Linux 専用の
#ifガードを削除し、移植性のある POSIX のposix_openpt/grantpt/unlockptを使用することで、埋め込み client と PTY ディスクリプタ class が macOS および FreeBSD でもビルドできるようにしました。#104436 (Alexey Milovidov). librdkafkaをバージョン 2.14.1 にアップグレードしました。#105222 (János Benjamin Antal).
後方互換性を持たない変更
IN演算子は、Bool型に対して厳密な値セマンティクスを使用するようになりました。セット内の0と1の値のみがBool値に一致します。以前は、INセット内の255を超える数値がBoolとの比較時に誤って true に丸め込まれていたため、SELECT CAST(1, 'Bool') IN (256)は 1 を返していました。現在は正しく0を返します。#92980 をクローズしました。#93115 (Ashrith Bandla).- H3 ライブラリが v4 に更新され、長さ、面積、その他の計算の精度が向上しました。新しい結果は以前の結果と異なるため、この変更には後方互換性がありません。#100348 (Alexey Milovidov).
WITH式リストの要素で、SELECTをクォートなしの識別子として使用することを禁止しました。#101059 (Aruj Bansal).- このパッチでは、merge テーブルの仮想カラムの扱いが変更されます。基になるテーブルに
_tableまたは_databaseが含まれている場合、これらのカラムはストレージから読み取られます。含まれていない場合は、読み取りステップの後に expression ステップを使って補完されます。#101742 (Mikhail Artemenko). IN演算子は、複合型 (Tuple、Array、Map) 内での情報損失を伴うDecimal変換も拒否するようになり、トップレベルの scalar 比較と一貫した動作になりました。以前は、精度チェックはトップレベルの scalar 値に対してのみ適用されていました。たとえば、CAST('33.3', 'Decimal64(1)') IN (33.33)は正しく0を返していましたが、CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33])は、情報損失を伴う変換がArray内で発生していたため、誤って1を返していました。現在はどちらの場合も正しく0を返します。#101812 (Nihal Z. Miaji).- HTTP 接続による認証前のメモリ使用量を制限するため、デフォルトの
http_max_fieldsを 1,000,000 から 1,000 に、http_max_field_name_sizeを 128 KB から 4 KB に引き下げました。http_max_request_header_sizeおよびhttp_headers_read_timeout設定を追加しました。以前のより高い上限を利用しているユーザーは、設定で元に戻すことができます。#103285 (Sema Checherinda).
新機能
- メモリ制限に達した際、ハッシュ結合および並列ハッシュ結合を Grace Hash Join に変換することで、自動的にディスクへ書き出すようにしました。この動作は
max_bytes_before_external_joinで制御されます。 #97813 (János Benjamin Antal). - Arrow Flight SQLのサポートを追加しました。 #91170 (Yakov Olkhovskiy).
- Keeper を利用したスナップショット進捗の追跡機能を備えた
Paimonテーブルエンジンの増分読み取りサポートを追加し、paimon_target_snapshot_idによる特定スナップショットの差分読み取りに対応するとともに、型マッピング、パーティションプルーニング、増分読み取りシナリオのテストカバレッジを拡充しました。 #93655 (XiaoBinMu). stem関数は実験的機能ではなくなりました (以前は、設定allow_experimental_nlp_functionsを有効にする必要がありました) 。 #102399 (Jimmy Aguilar Mena) 。stem関数を使うと、String、FixedString、Array([Fixed]String)、Nullable、LowCardinality、Const型のカラム内にあるすべての単語/トークンを簡単に語幹化できるようになりました。 #99137 (Jimmy Aguilar Mena) 。- 互換性設定
use_strict_insert_block_limitsにおいて、まとめる処理でのmax_insert_block_size_rows、max_insert_block_size_bytes、min_insert_block_size_rows、min_insert_block_size_bytesの新しい動作を実装しました。#94207 (Kirill Kopnev) 。 - 各ラグに対する数値 Array の正規化自己相関を計算する関数
arrayAutocorrelation(arr [, max_lag])を追加しました。整数、浮動小数点数、Decimal の Array 型をサポートします。 #94776 (Wenyu Chen) 。 - SQL関数
obfuscateQueryを追加しました。#98010 をクローズしました。#98305 (Xuewei Wang)。 - Dictionary の属性として、Map および JSON/Object 型をサポートしました。これにより、FLAT レイアウトと HASHED レイアウトの両方で、Dictionary に Map(String, String)、Map(String, Array(String))、JSON、Nullable(JSON) などの複雑な型を保存し、取得できるようになりました。#98627 (yanglongwei).
- 新たに2つのMergeTree設定 —
replicated_fetches_min_part_levelとreplicated_fetches_min_part_level_timeout_seconds— が追加され、レプリカは新規に挿入されたばかりの (未マージの) パーツをピアから取得せずに済むようになり、大量インジェスト時のレプリケーション負荷を軽減できます。 #98625 (tanner-bruce). - JSONAllPaths と bloom_filter、tokenbf_v1、ngrambf_v1、および text (転置) 索引タイプを使用した、JSON カラム向けの MergeTree スキップ索引のサポートを追加しました。これにより、各グラニュールに含まれる JSON パスの集合に基づいてグラニュールをスキップできるようになりました。#98886 (Pavel Kruglov) 。
printf関数が非定数のフォーマット文字列をサポートするようになり、カラムの値に基づいて、行ごとに異なるフォーマットパターンを使用できるようになりました。#98991 (Yash ).- データを挿入順に再編成する新しいプロジェクション索引
commit_orderが追加されました。#99004 (Mikhail Artemenko) 。 - 検索語がテキスト文字列内に出現した箇所を HTML タグ (デフォルトは
<em>/</em>) で囲むhighlight関数を追加しました。ASCII の大文字・小文字を区別しない照合、重複する一致箇所の自動マージ、開始タグ/終了タグのカスタマイズに対応しています。#99131 (Peng). - 正規化クエリハッシュ単位のクォータを実装し、公開 ClickHouse サービスを濫用から保護します。1. クォータキーの型として
NORMALIZED_QUERY_HASHをサポート - 一意の正規化済みクエリごとに個別のクォータバケットを設けることで、CREATE QUOTA q KEYED BY normalized_query_hashはそれぞれの異なるクエリを独立して追跡します。2. クォータリソース型としてQUERIES_PER_NORMALIZED_HASHをサポート — これにより、一定期間内における単一の正規化済みクエリの最大実行回数を制限できるため、MAX queries_per_normalized_hash = 100によって、どのクエリパターンも 100 回を超えて実行できなくなります。 #99586 (Alexey Milovidov). - ユーザーは
NATURAL JOIN構文を使って JOIN クエリを記述できるようになりました。これにより、同じ名前のカラム同士が自動的に対応付けられ、結果ではそれらのカラムの重複が排除されます。#99840 (Peter Nguyen). SET TIME ZONE 'tz'をSET session_timezoneの別名としてサポートしました。#99883 (phulv94).- Web UI (
play.html) でパラメータ化クエリがサポートされるようになりました。{name:Type}のようなクエリパラメータが検出されると、その値を入力するための入力フィールドが表示されます。#100041 (Alexey Milovidov). FROM内のテーブル式として、SQL 標準のVALUES句をサポートしました。たとえば、SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val)のように使用できます。#100143 (Desel72).EXTRACT演算子に、PostgreSQL 互換の単位EPOCH、DOW、DOY、ISODOW、ISOYEAR、WEEK、CENTURY、DECADE、MILLENNIUMを追加しました。あわせて、従来はエラーになっていたEXTRACT(WEEK FROM date)も修正しました。#100274 (Alexey Milovidov) 。TO範囲修飾子付きの SQL 標準複合インターバルリテラル (例:INTERVAL '1:30' HOUR TO MINUTE) のサポートが追加されました。内部的には、インターバルの和に分解されます。#100453 (Desel72).- HTTP 接続プールソケットのカーネル TCP の受信・送信バッファメモリ (
sk_rmem_alloc,sk_wmem_alloc) について、接続グループごとの p50/p75/p90/p95 パーセンタイルおよび totals として報告される非同期メトリクスを追加しました。#100575 (Sema Checherinda) 。 - ClickHouse Keeper 向けの jemalloc profiling Web UI を追加しました。HTTP 制御ポートの
/jemallocで利用できます。#100606 (murphy-4o) 。 - 順序付きモードおよび順不同モード向けのコマンド
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'を実装しました。#100709 (Bharat Nallan) 。 JSONカラム内のすべての値をArray(String)として返す関数JSONAllValuesを追加しました。値はテキスト表現にシリアライズされ、パス名順に並べられます。JSONカラム上のJSONAllValues式に対するテキスト索引のサポートも追加しました。JSONAllValues(json_column)にテキスト索引を作成すると、JSONサブカラムに対するクエリのフィルタ条件 (例:json_column.key1 = 'value') に自動的に使用されます。#100730 (Anton Popov).- 入力フォーマットで大文字・小文字の区別を異なる方式で扱えるようにする新しい設定
input_format_column_name_matching_modeを追加しました。#99346 (manerone) 。 clickhouse-keeper-clientにwatchコマンドを追加し、get、exists、lsコマンドでの watch をサポートしました。#100834 (Den Kalantaevskii) 。- ClickHouse Keeper に
getChildrenRecursive(ListRecursive) リクエストを、clickhouse-keeper-clientにlsrコマンドを追加しました。これにより #99916 が解決されます。#100998 (Konstantin Vedernikov) 。 - 二次元配列 (行列) を受け取り、転置を行う新しい関数
arrayTransposeを追加しました:SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov). auto_statistics_types mergetree設定のデフォルト値は'minmax, uniq'です — 新しいテーブルでは、適切なすべてのカラムに対して minmax および uniq の統計情報が自動的に作成されます -materialize_statistics_on_insertのデフォルトは false です — 統計情報は insert 時ではなくマージ時に構築されるようになり、insert のオーバーヘッドが削減されます。以前の動作に戻すには、SET materialize_statistics_on_insert = 1を使用してください。 #101275 (Han Fei).- レプリカ間のレプリケーションラグによるデータ欠落を減らすため、materialized view の依存チェーン向けに
prefer_dependency_replicarefresh 設定を追加しました。#101591 (Seva Potapov). - フレーズ検索 (連続したトークン列) 向けの
hasPhrase(別名matchPhrase) 関数を追加しました。検索は総当たりで行われるため、現時点ではテキスト索引にはまだ対応していません。#101997 (Elmi Ahmadov) 。 - S3 GET リクエスト接続の存続時間と消費バイト数を観測するための
s3_read_request_duration_microsecondsおよびs3_read_request_bytesヒストグラムメトリクスを追加しました。これらはsystem.histogram_metricsと Prometheus エンドポイントで確認できます。#102058 (Sema Checherinda). DateおよびDate32の値にTimeとTime64の値を+演算子で加算し、DateTimeまたはDateTime64の結果を得られるようになりました。たとえば、SELECT toDate('2024-01-15') + toTime('14:30:25')は2024-01-15 14:30:25を返します。結果はセッションのタイムゾーンで計算され、範囲外の結果はdate_time_overflow_behavior設定に従って処理されます。#95914 をクローズしました。#102421 (Nihal Z. Miaji).- テキスト索引は GA となり、
compatibility設定にかかわらず常に有効のままとなったため、バックアップの復元時や互換性モードでの実行時に予期せず無効化されるのを防ぎます。#101518 (Nikita Fomichev).
実験的機能
- Icebergテーブル向けに
ALTER TABLE ... EXECUTE remove_orphan_filesを追加し、オブジェクトストレージ内の未参照ファイルを特定して削除できるようにしました。#99127 (murphy-4o). - join の並べ替えに使用される統計情報をランダム化する
query_plan_optimize_join_order_randomize設定を追加しました。テスト用途に有用です。#100643 (Vladimir Cherkasov). - ClickHouse に AI 関数のサポートを追加し、ユーザーが SQL を使って OpenAI および Anthropic のエンドポイントを呼び出せるようにしました。
aiGenerateはその最初の関数です。#100831 (George Larionov). - ClickHouse で LLM API を利用するための AI 関数
aiClassify、aiExtract、aiTranslateを追加しました。#100832 (George Larionov). - 新しいシステムテーブル
system.histogram_metric_logを追加しました。これはすべてのヒストグラムメトリクス (例: S3/Azure のレイテンシー、Keeper リクエスト処理段階の所要時間) のスナップショットを定期的に取得します。あわせて、system.histogram_metricsのvalueカラムは、より柔軟で Prometheus のデータモデルとの互換性が高いため、Float64に変更されます。#103046 (Miсhael Stetsyuk). このテーブルの構造は、今後のリリースで変更される可能性があります。
パフォーマンス改善
- ClickHouse は、min/max 統計に基づいて、SELECT クエリでデータパーツ全体をスキップできるようになりました。#94140 (zoomxi) 。
- 完了済みの mutation がある ReplicatedMergeTree テーブルに対する readonly 操作時のロック競合を軽減しました。#95771 (Eduard Karacharov) 。
- プロジェクションの読み取り時に
optimize_read_in_orderを考慮するようにしました。#89453 をクローズしました。#95885 (Andrey Zvonov) 。 - ハッシュ結合および同時実行ハッシュ結合にいくつかの改善を加えました。 #96663 (Yarik Briukhovetskyi).
- 入力データの重複がほとんどない場合は、
LowCardinalityカラムの最適化を無効にすることで、DISTINCT変換を最適化しました。 #97113 (Nihal Z. Miaji) 。 - #97723 による
LIKEクエリのパフォーマンス最適化。これらのクエリでテキストインデックスを使用できるようになりました。#98149 (Elmi Ahmadov) 。 - ベクトル化された数学関数 (
exp、log、sigmoid、tanh) が、AArch64 (NEON/SVE を使用) および FreeBSD/Darwin で高速化されました。これらの環境では、以前は低速な scalar のフォールバック実装が使用されていました。#98230 (Raúl Marín) 。 MergeTreeの主キーカラムを対象に、^(abc-1|abc-2)のようなリテラル文字列の正規表現オルタネーションでフィルタするクエリでは、選択肢が共通のプレフィックスを持つ場合に、主キーのプルーニングを利用できるようになりました。#98988 (Yash ).ORDER BY ... LIMITの top-k 動的フィルタリングを、Nullable、String、COLLATE型にも対応できるよう一般化しました。#99033 (murphy-4o).- 値の範囲が小さい
Int32およびInt64キーでのハッシュ結合を、直接索引型ハッシュテーブルを使用することで高速化しました。#99275 (Hechem Selmi). - 単一の辞書を使用する
LowCardinalityカラムに対する非連続クエリを高速化しました。 #99285 (Ivan Babrou). - 内部ループをデバーチャライズすることで、
Float64カラムに対するvar*Stableおよびstddev*Stable関数を高速化しました。注: これにより、浮動小数点演算の結果が ULP レベルで変化するコンパイラ最適化 (FMA/レジスタ) が有効になります。#99460 (Riyane El Qoqui). - 32/64 バイトの入力に対して、最適化された Firedancer の base58 エンコードを使用するようになりました (
base58Encodeでは自動) 。デコード結果が 32/64 バイトの場合は、最適化された base58 デコードも使用できるようになりました (base58Decode('...', 32)などで明示的に指定) 。#99461 (Joanna Hulboj). - リンカーのセクション単位の最適化 (
-ffunction-sections,-fdata-sections,--icf=all) を有効にし、バイナリサイズを削減するとともに、命令キャッシュの利用効率を向上させます。#99474 (Alexey Milovidov) 。 - 多数のコアを搭載したマシンで、集約を伴う短時間のクエリにおける負のスケーリングを修正しました。クエリが少数のマークしか読み取らない場合、集約後にパイプラインが
max_threadsまで拡張されなくなり、ほぼ空のストリームが大量に生じることによるオーバーヘッドを回避します。 #99493 (Alexey Milovidov). - 読み取りタスクサイズを適切に選択することで、並列レプリカ使用時のクエリのパフォーマンスを改善しました。 #99801 (Nikita Taranov).
- ユーザー空間ページキャッシュ経由でリモートファイルを読み込む際に、先読みを有効にしました。 #99919 (Alexey Milovidov).
- サブカラムの列挙時に、String
.sizeサブカラムの不要な計算を回避。#99941 (Pavel Kruglov) 。 - ホテルから、非常に多数のレプリカを持つクラスターに接続して作業する際でも、clickhouse-client のプログレスバーが過度に揺れないようにしました。#100145 (Alexey Milovidov).
- ページキャッシュが有効な場合に
clickhouse-localでMemoryWorkerを起動し、ユーザー空間のページキャッシュを実際に利用できるようにしました。 #100306 (Alexey Milovidov). LIMIT句をUNION ALLにプッシュダウンすることで、クエリを最適化します。#100364 (Alexey Milovidov) 。ORDER BYにおけるStringおよびFixedStringカラム比較の JIT コンパイル対応を追加し、文字列を多く含むソートキーでのマージフェーズのソート性能を 6〜17% 向上させました。@lgbo-ustc との共著です。#100577 (Raúl Marín) 。- 新しい
read_in_order_use_virtual_row_per_block設定とあわせてread_in_order_use_virtual_rowを有効にすると、MergeTreeから読み取った各 block の後に仮想行の境界情報が出力されるようになり、WHERE/PREWHERE/JOINによってデータが完全に除外されるパーツについて、マージ処理がストリームの途中でソースの優先順位を付け替えられるようになりました。#99945 をクローズしました。#100603 (Vladimir Cherkasov). itoaの高速パスを dragonbox 互換の丸め処理で拡張し、大きな整数値の Float-to-String 変換を高速化しました。#100649 (Raúl Marín) 。dragonboxをzmijに置き換え、Float-to-String 変換を 1.5~3 倍高速化。#100650 (Raúl Marín) 。- ソフトウェア除算をBarrett還元に置き換え、変換ループをアンロールすることで、
Int128/UInt128から文字列への変換を高速化しました。#100671 (Raúl Marín) 。 uniqExactの並列マージで余分なスレッドが生成されるのを防ぎました。#100686 (Jiebin Sun) 。uniqExactのバッチ並列マージに対応しました。#100687 (Jiebin Sun).- 基になる
MergeTreeテーブルを持つシンプルなビューに対するクエリで、並列レプリカ実行時の並列化が向上しました。 #100815 (Igor Nikonov). parallel_replicas_allow_view_over_mergetree=1の場合、単純なビュー (MergeTreeテーブル上の対象となるUNION ALLビューを含む) に対する並列レプリカのサポートを追加しました。これにより、ビューの内側のクエリではなく外側のクエリを並列化できるようになり、ノード間でのクエリの並列実行が向上します。#100958 (Igor Nikonov)。INを含むフィルターがクエリプランに存在する場合の、full_sorting_mergeにおける主キー順での読み取りを最適化。 #101261 (Nikita Taranov).- サンプリング設定をキャッシュし、メモリトラッカー階層全体をたどらないようにすることで、割り当て/解放を最適化しました。 #101267 (Azat Khuzhin).
deduplicate_insert = 'enable'(26.2以降のデフォルト設定) で発生していたINSERTの重大な性能低下を修正しました。データハッシュの計算をまとめる処理から sink へ遅らせ、updateHashWithValueRangeを使ったバッチ単位のカラムハッシュ計算を行うことで、22カラム・500万行におけるオーバーヘッドを約2.5秒から約0.5秒に削減しています。#101494 (Sema Checherinda) 。try_lockを使用して競合のないロック取得の計測を回避し、保持時間の計測を削除することで、プロファイル対象ロックのオーバーヘッドを削減しました。#101502 (Antonio Andelic) 。arrayDotProductの手書きの AVX-512 intrinsic を、プラットフォーム非依存で自動ベクトル化可能なループに置き換え、AVX2 と ARM NEON のサポートを追加しました。#101571 (Peng) 。- エスケープされた文字列 (例:
'{\'key\':1}') として値が渡された場合のMap、Array、Tupleカラムに対するINSERT VALUESのパフォーマンスを改善し、SQL式パーサーへの不要なフォールバックを回避しました。#102119 (Joanna Hulboj). RabbitMQテーブルエンジンで CPU 使用率が過剰になる問題を修正しました。#102711 (Jaap Elst) 。- JOIN 順序オプティマイザは、既存の JOIN 条件から推移的な等値 JOIN 述語を推論できるようになりました。たとえば、
A.x = B.x AND B.x = C.xが与えられた場合、A.x = C.xという等価関係も認識されるため、オプティマイザは推移的に接続されたテーブル間の直接 JOIN も検討できます。これにより、ディメンションテーブルが共通のファクトテーブルを介して接続されるスター型およびスノーフレーク型のスキーマでは、実行計画の品質が向上する可能性があります。この機能は、新しいenable_join_transitive_predicates設定で制御されます (デフォルトではオフ) 。 #98479 (Alexander Gololobov). - マージを並列に事前キャンセルすることで、
TRUNCATE DATABASE TABLES LIKEを最適化しました。#98597 (Shaohua Wang) 。 - multiply が単調性に対応し、
key * constant式で主キーの絞り込みが可能になりました。#98983 (Amos Bird) 。 - cacheディクショナリでは、
hasKeysで排他ロックを取得しなくなりました。cache の読み取りに共有ロックを使用することで、ロック競合が軽減されます。 #100796 (liuguangliang). - VIEW により多くの最適化を適用できるようにするため、クエリツリー内で VIEW サブクエリをインライン化。 #100830 (Dmitry Novik).
- サーバー起動時のcacheの読み込みを最適化しました。 #101500 (Kseniia Sumarokova).
- 述語の選択性が十分に高い場合に、FINAL を伴う ReplacingMergeTree で遅延カラム実体化を実装しました。#101647 (Nikolai Kochetov).
optimize_rewrite_array_exists_to_has最適化を再度有効化しました (23.10 以降、デフォルトでは無効) 。これにより、arrayExists(x -> x = elem, arr)は大幅に高速なhas(arr, elem)に書き換えられます。また、配列の要素型とelemがhasに対して互換性がない場合 (例:DateとString) は、この書き換えを正しくスキップするようになったため、以前は失敗していたクエリも引き続き動作します。#71431 をクローズしました。#100944 (Alexey Milovidov) 。
改善
- EXPLAIN PLAN pretty=1 の出力を改善: 最上位クエリの出力カラムを表示し、推定結果行数とローカリティ付きで JOIN の関係を表すラベル/シンボルを表示するほか、JOIN/ソースの各ステップについてステップごとの出力カラムも含めるようになりました。この変更は #98117 の Information Deficit の部分に対応しています。#99462 (Kirill Kopnev).
- MergeTree テーブル設定
share_nested_offsets(デフォルトはtrue) を追加しました。falseに設定すると、ドット付きの名前 (例:n.a、n.b) を持つ Array カラムは、従来のNestedセマンティクスの一部としてオフセットファイルを共有し、配列サイズが同一であることを検証するのではなく、独立したカラムとして扱われます。#98416 (Amos Bird). - users.xml/yaml の設定で複数の認証方法を指定できるようになりました (SQL では以前から可能でした) 。#91998 (Flip-Liquid).
- TLS を使用している Raft のノード間接続を自動的に再読み込みするようにしました。 #93455 (Evgeny).
cast_keep_nullableを拡張し、Dynamic/JSON 型でも動作するようにしました。これを設定すると、Nullable にできる型から NULL をキャストした場合は NULL が返され、それ以外では NULL に対してCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNエラーが発生します。#96504 (Seva Potapov) 。- オブジェクトプールの導入により、内部データ構造 (
ISerializationオブジェクト) のメモリ使用量を削減しました。#96563 (Nikita Mikhaylov) 。 - keeper-client の XML 設定で
passwordおよびidentityフィールドがサポートされました。#96800 (Grigorii Sokolik). - Unity Catalog 向けの
Icebergへの書き込みを改善しました。#98162 (Konstantin Vedernikov) 。 - INSERT 時にプロジェクションパーツを同期的にファイナライズできるようにする設定
finalize_projection_parts_synchronouslyを追加しました。これにより、デフォルトでは既存の非同期動作を維持したまま、多数のプロジェクションを持つテーブルでピークメモリ使用量を削減できます。 #98228 (Amos Bird). - 各プロジェクションのマージ/再構築にかかった時間をミリ秒単位で記録する
projections_duration_msカラムをsystem.part_logに追加しました。#98292 (Amos Bird) 。 - KILL QUERY および clickhouse-client でのクエリキャンセル (Ctrl+C) によって、ExpressionTransform と NumbersRangedSource を使用するクエリのキャンセルを改善しました。#98908 (Roman Vasin) 。
- ハードコードされた
source_table_enginesのリストを、StorageFactory::getAllStorages()による実行時ルックアップに置き換えました。これにより、これまで漏れていた一部のテーブルエンジンに対するアクセスチェックが追加され、#71544 を解消しました。#98984 (pufit). - Variant と Dynamic で型不一致が発生した際の動作 (throw または NULL を返す) を制御する設定を追加しました。 #99085 (Bharat Nallan).
Icebergと Spark の互換性を改善しました。ストレージパスとメタデータパスの混在使用によって生じていた一貫性のないパス処理を修正し、Icebergテーブルが記録するテーブルロケーションは URL または絶対パスのいずれかでなければならないようにしました。また、一部の ClickHouse リーダーが走査後のバイト数カウントをサポートしていないため、Azureでファイルサイズをカウントするためのフォールバックを追加し、Spark と互換性のある形でversion-hint.txtを処理するようにしました。さらに、今後パスの型を取り違えにくくする型レベルの抽象化を導入し、中間的なアップロード/ダウンロードなしでエンジン間の相互運用性を検証するAzureおよびLocal向けのテストを追加しました。加えて、position deletes の扱いを修正しました。これは以前、不適切な場面でパス推論ヒューリスティクスに依存していました。 #99163 (Daniil Ivanik). #100420 (Daniil Ivanik).- https://github.com/ClickHouse/ClickHouse/pull/92844 で導入された
IPartitionStrategy::cached_resultにおけるレースコンディションの可能性を修正しました。#99400 (Arthur Passos). - ユーザーは、ArrowフォーマットでClickHouseのIntervalデータ型を書き出せるようになりました。#99519 (Peter Nguyen).
ArrowおよびParquetフォーマットでのUUIDデータ型のインポートとエクスポートがネイティブにサポートされました。これにより、ユーザーは手動で文字列に変換したり回避策を講じたりすることなく、ClickHouse と他のデータツールの間で UUID データを直接クエリおよび転送できるようになりました。トップレベルの UUID に対する自動的な論理推論と、ネストされた UUID に対する明示的なスキーマヒントもサポートされています。 #99521 (Ivan).- オブジェクトストレージ上の
7zアーカイブをサポート。#70968 をクローズ。#99600 (Alexey Milovidov) 。 - オブジェクトストレージ (
S3、Azureなど) のファイル一覧取得・読み取りパイプラインを内部的に把握できるよう、ObjectStorageListedObjects、ObjectStorageGlobFilteredObjects、ObjectStoragePredicateFilteredObjects、ObjectStorageReadObjectsの ProfileEvents を追加しました。#99778 (Sema Checherinda) 。 - 基になるすべての distributed/remote テーブルに存在しないカラムをクエリした際に、
mergeテーブル関数がUNKNOWN_IDENTIFIERエラーで失敗する問題を修正しました。#99833 (Alexey Milovidov). - ReplicatedMergeTree のミューテーションの総実行時間メトリックに、commit time が再び含まれるようになりました。#96376 以降は除外されていました。#99936 (alesapin).
MetadataStorageFromDiskに、削除待ちのブロブオブジェクト向けの先行書き込みログを追加し、オブジェクト削除時のメタデータとリモートオブジェクトストレージの間の耐久性と整合性を向上させました。#100019 (Maksim Kita).- サーバーの環境変数にアクセスできないようにするため、組み込みクライアント (SSH および WebSocket プロトコル) で AI SQL 生成 (
??コマンド) を無効化しました。#100290 (Alexey Milovidov) 。 - カタログを使った Iceberg への insert のインターフェイスを変更しました。設定
storage_catalog_type、storage_aws_access_key_idなどは非推奨になりました。#100334 (Konstantin Vedernikov). clickhouse-clientに貼り付ける際、タブを 4 つのスペースとして扱うようにしました。#100405 をクローズしました。#100416 (Raúl Marín).show_data_lake_catalogs_in_system_tablesが無効な場合、「もしかして …」というテーブル候補のヒントを表示するために、リモートのデータレイク カタログ全体をスキャンしないようにしました。#100452 (Alsu Giliazova) 。- パーティションプルーニング後に
distributed_index_analysis_min_indexes_bytes_to_activateを適用します。#100477 (Azat Khuzhin) 。 - 空の IN/NOT IN 句の使用時に、Parquet の bloom filter プッシュダウンで発生するアサーション失敗を修正しました。#100543 (zoomxi) 。
- MinMaxカラム STATISTICS は、最小値と最大値を Float64 ではなく Field (型付き) として格納するようになりました。シリアライズされたフォーマットには、値に加えてカラムの型名も含まれます。STATISTICS ファイルのバージョンは V2 に更新され、以前のバージョンで書き込まれたファイルは再マテリアライズ (ALTER TABLE … MATERIALIZE STATISTICS ALL) が必要です。修正 #53140。#100605 (Han Fei).
- Consumer のクローズ時に発生するデッドロックの修正を含むよう、
cppkafkaを更新しました。#100612 (Azat Khuzhin) 。 - Iceberg でデータファイルをパースする際に使用されるオブジェクト情報に、マニフェストファイルからパースしたファイルの行数とバイト単位のファイルサイズが含まれるようになりました。 #100645 (Daniil Ivanik).
- cache メモリアリーナの分離を制御できるようにするため、
use_separate_cache_arena設定パラメータが追加されました。#100664 (Seva Potapov) 。 - Apache Arrow の
StringViewおよびBinaryViewデータ型を ClickHouse のStringカラムにインポートするネイティブサポートが追加され、Arrow ベースのインジェストとの互換性が向上しました。#100762 (Ivan). - いくつかの Keeper サーバー設定が、実行時に設定ファイルが変更された場合にホットリロードされるようになりました: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads。 #100773 (Michael Kolupaev).
- リリースビルドで、プロファイルイベント
MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytesを増加させました。 #100899 (Pavel Kruglov). - Cgroupv2 のメモリ追跡で、カーネルメモリから
slab_reclaimableが除外されるようになり、回収不能なメモリ使用量をより正確に把握できるようになりました。#100901 (Antonio Andelic) 。 use_partition_pruning = 0は、パーティションキーに基づくプルーニングの無効化に加え、MinMax索引のプルーニングとパーティションキーのカラムに対する count 最適化も無効にするようになりました。#100904 (Nihal Z. Miaji).EXPLAIN [PLAN]のpretty=1で、式が人間にとって読みやすい形式で表示されるようになりました。 #100927 (Kirill Kopnev).accurateCastOrNullとaccurateCastOrDefaultが、Nullable要素を含むネストしたTuplesを含め、変換先のTuple型をサポートするようになりました。これまではTupleをNullableの内部に置けなかったため、これらの関数では変換先にTupleを指定できませんでした。#100820 をクローズしました。#100942 (Nihal Z. Miaji).- ライトテーマとダークテーマを切り替えた際に、Play UIでチャートが重複表示される問題を修正しました。 #101058 (Alexey Milovidov).
- chdig を v26.3.1 に更新 (perfetto UI、CPU/メモリ/マージ処理/クエリのサマリーへのスパークライン追加、system.warnings、ログ内の正規表現検索) 。#101092 (Azat Khuzhin) 。chdig を v26.4.3 に更新 (perfetto の改善、pastila.nl 経由の共有に関する修正、フレームグラフの差分、リアルタイムでの設定変更) 。#103145 (Azat Khuzhin) 。
- これで、
SELECTクエリの前にあるWITH句で末尾カンマを使えるようになりました。#101093 (Aruj Bansal) 。 - compact パーツ内で圧縮ブロックをどのように編成するかを制御する
compress_per_column_in_compact_partsMergeTree setting を追加しました。trueの場合 (デフォルトで、現在の動作を維持) 、各カラムが新しい圧縮ブロックの先頭となるため、必要なものだけを選択的に展開できます。falseの場合は、granule 内のすべてのカラムが同じ圧縮ブロックにまとめられるため、常にすべてのカラムを読み取るワークロードでは圧縮率と読み取り性能が向上します。#101114 (Amos Bird). - Play UIで、テーブル情報のバルーンを行全体ではなく、テーブル名にホバーしたときのみ表示するようにしました。#101118 (Alexey Milovidov).
- Play UI のサイドバーに engine ごとのアイコンを追加し、table 一覧の UX を改善しました。#101134 (Alexey Milovidov) 。
Arrow、ArrowStream、ORC、および従来のParquetフォーマットでNullable(Tuple)をサポート。#101272 (Nihal Z. Miaji).- web UI (play.html) で、TOTALS 行をテーブルのフッターに表示。#101286 (Alexey Milovidov).
- Web UI (
play.html) でマルチクエリモードに対応:複数のクエリを一度に実行でき、SELECT系クエリは並列で実行され、各クエリの結果が個別に表示されます。#101290 (Alexey Milovidov). - 結果テーブルの Web Component 化に伴って発生していた、play.html の Web UI におけるカラムのリサイズ不具合を修正しました。#101295 (Alexey Milovidov) 。
- 一定の時間間隔ごとに、MEMORY_LIMIT_EXCEEDED 発生時の jemalloc プロファイルの flush 回数を制限できるようになりました。#101396 (Azat Khuzhin).
- Keeper 設定
nuraft_streaming_mode(デフォルトはfalse) 、nuraft_max_log_gap_in_stream、nuraft_max_bytes_in_flight_in_streamを追加しました。#90743 をクローズしました。#101427 (Kseniia Sumarokova) 。 - カーネル OS のページキャッシュと ClickHouse のユーザー空間ページキャッシュの両方を除いた cgroup のメモリ使用量を報告する非同期メトリクス
CGroupMemoryUsedWithoutPageCacheを追加し、MemoryResidentWithoutPageCacheと同様の扱いにしました。あわせて、CGroupMemoryUsedメトリクスの説明も明確にしました。#101513 (Francesco Ciocchetti). - SQL 標準の
OVERLAY関数構文向けに、パーサーレベルのシンタックスシュガーを追加しました。overlay関数自体はすでに存在しており、今回の変更でPLACING、FROM、FORを区切りとして使うキーワードベースの形式もサポートされます。#101681 (Desel72). information_schema.tablesシステムテーブルに、このテーブルの既存の大文字の別名と同様のカラム別名INDEX_LENGTHを追加しました。#101705 (Robert Schulze).- システムテーブル
information_schema.tablesが、非アクティブなテーブルパーツを無視するようになりました。これにより、表示されるテーブルサイズの値がより実態に即したものになります。#101706 (Robert Schulze) 。 ngrams関数は、無効な N-gram 長を受け付けなくなりました。例:SELECT ngrams('abc', 0)はエラーを返すようになりました。 #101922 (Robert Schulze).- #91820 および #90837 のフォローアップ: エラーメッセージから未対応のアルゴリズムを除外し、FIPS builds で FIPS 固有のテストを実行するようにしました。#102067 (Mikhail f. Shiryaev).
- Web UI (
play.html) でセルの高さを3行までに制限し、クリックで展開できるようにしました。 #102154 (Alexey Milovidov). - S3 エンドポイントで (virtual/path) スタイルを強制できる新しいオプションを追加しました。#82019、#76007 を解決します。https://github.com/ClickHouse/ClickHouse/pull/83168 の続きです。#102378 (Konstantin Vedernikov).
restore_replace_external_engines_to_null設定により、失敗したり外部接続を開始したりする代わりに、外部エンジン (例:DataLakeCatalog、MySQL、PostgreSQL、S3) を使用するデータベースの復元もスキップするようになりました。#102400 (Nikita Fomichev) 。hasPhrase関数で、HINTモードによるテキスト索引解析をサポートしました。#102438 (Elmi Ahmadov) 。- MATERIALIZE STATISTICS ALL 実行時の LOGICAL_ERROR を修正するため、ColumnDependency で STATISTICS を読み取り専用として扱うようにした。 #102627 (Konstantin Bogdanov).
- keeper-as-serverモードで
system.asynchronous_metric_logを作成し、データを格納します。 #102664 (Miсhael Stetsyuk). default_system_log_flush_policy.skip_alias_columns設定オプションを追加し、システムログテーブルで ALIAS カラムを省略できるようにしました。これにより、ALIAS カラムを受け付けない S3 バックエンドのシステムログの問題を修正しました。#102669 (Miсhael Stetsyuk).- システムテーブルでは自動統計を有効にしないでください。利用されることはほとんどありません。 #102862 (Han Fei).
- LIKE 最適化で
arrayトークナイザーをサポート。#102880 (Elmi Ahmadov) 。 - リリースビルドでも MemoryAllocatedWithoutCheck を送信するようにしました。 #103064 (Azat Khuzhin).
- system.stack_trace でスレッドごとの untracked_memory を表示。 #103065 (Azat Khuzhin).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 遅延マテリアライゼーションで返される不要なカラムが原因で発生する
Block structure mismatch in streamエラーを修正しました。#95191 を修正。#96682 (Nikolai Kochetov)。 - データマスキングポリシーに対する
ON CLUSTERクエリの論理エラーを修正しました。#97594 (Bharat Nallan). - GCS上で Unity Catalog を使用する際のバグを修正しました。#98456 (Melvyn Peignon) 。
DataLakeCatalogは、auth_header設定を検証する際に、サーバーのhttp_forbid_headers設定を考慮するようになりました。#98827 (Michael Anastasakis).- S3 のブレース展開グロブにおける N+1 件の
HeadObject呼び出しを修正しました。#99219 (Konstantin Bogdanov) 。 - エンジン自体も設定をサポートしている場合、CREATEクエリ内の設定変更を検証する。 #99279 (János Benjamin Antal).
ALTER TABLE UPDATE/DELETEが、式が EPHEMERAL カラムに依存する MATERIALIZED カラムを持つテーブルでMissing columnsエラーにより失敗する問題を修正しました。#99281 (Yash ).- JDBC、ODBC、NATS の接続文字列に含まれる認証情報は、クエリログと
SHOW CREATEの出力でマスクされるようになり、機密情報の意図しない露出を防げるようになりました。URI 形式の接続文字列 (例:{scheme}://{user}:{password}@{host}) では、パスワード部分のみがマスクされ、それ以外はデバッグしやすいよう引き続き表示されます。nats_token設定もマスクされるようになりました。#99344 (János Benjamin Antal) 。 - DD-month-YYYY フォーマットで、月名のプレフィックスで始まる単語を
parseDateTimeBestEffortが誤ってパースしてしまう問題を修正しました。#99345 をクローズしました。#99350 (Pavel Kruglov). - アナライザ非使用時に TABLE_UUID_MISMATCH が無視されていた問題を修正しました。#99380 (Azat Khuzhin) 。
- 同じリクエスト内で
compatibilityと一緒に送信された明示的な設定が、その値がサーバーのデフォルト値と一致している場合に、気付かれないまま無視されることがある不具合を修正しました。#99402 (Raufs Dunamalijevs). - Hive パーティションパス内で先頭にゼロが付いた数値が原因でエラーが発生していたケースを修正しました。 #98801。 #99458 (Yarik Briukhovetskyi).
- 実行中の読み取りクエリと同時にテーブルが削除された際に発生する heap-use-after-free を修正 (過去90日間のCIで19件発生) 。 #99483 (Alexey Milovidov).
- Keeper で、同じサーバー上の別の無関係なセッションがちょうど悪いタイミングで閉じられると、read request がハングし (その結果セッションがタイムアウトする) 得る不具合を修正しました。 #99484 (Michael Kolupaev).
- パッチを適用する前に、カラム構造を検証するようにしました。 #99531 (Seva Potapov).
Dynamicカラムを持つテーブルのマージ中に、SYSTEM STOP/START MERGESを短時間で繰り返し切り替えた際に発生する、vertical merge のrows_sourcesアサーション失敗を修正しました。#99532 (Alexey Milovidov).toWeek()における誤ったパーティションプルーニングを修正し、toYYYYMM(date)でパーティション化されたテーブルでWHERE toWeek(date, mode) = Nを含むクエリが第49〜52週で空の結果を返していた問題を解消しました。#99542 (Takumi Hara).- JOIN によって生成された未参照の行がある ColumnReplicated を扱う関数で発生する例外を修正しました。#99564 (Hechem Selmi).
CLEAR COLUMN実行時にプロジェクションが再構築されず、またクリアしたカラムに依存するマテリアライズドカラムが再評価されない問題を修正しました。この問題により、その後のマージで例外やデータ破損が発生する可能性がありました。 #99565 (Desel72).ConditionSelectivityEstimatorにおいて、クエリが単一のスカラー クエリパラメータを指定した IN を使用し (例:WHERE col IN ({p:String})) 、対象のテーブルにカラム STATISTICS があり、use_statisticsが有効になっている場合に発生していた例外 (Bad get: has Tuple, actual type String) を修正しました。#99614 (Ilya Yatsishin) 。- 不明なプロジェクションを含むパートは、永久に失われたものとしてマークすべきではありません。 #99623 (Sema Checherinda).
SYSTEM STOP MERGESとSYSTEM START MERGESが同時実行された際に、vertical merge 中にまれに発生していた論理エラー例外を修正しました。 #99628 (Desel72).- マージ時にクラッシュを引き起こしていた injectRequiredColumns のダングリング参照を修正しました。 #99679 (Tuan Pham Anh).
- 対象カラム型の範囲を超える数値を読み取る際に発生していた、Avro フォーマットリーダーの未定義動作を修正しました。これにより、オーバーフロー時には誤った値を黙って生成するのではなく、クエリが失敗するようになりました。#99697 (asyablue22).
executableテーブル関数の引数内にあるシェル形式のクォートのパースを修正しました。#99794 (Nikita Semenov) 。NativeReaderで、行数が一致しない Native format ストリームをデシリアライズする際に、abort が誤って発生する問題を修正しました。LOGICAL_ERRORをINCORRECT_DATAに変更し、sanitizer/debug builds でabort()がトリガーされるのではなく、エラーがデータエラーとして処理されるようにしました。#99822 (Rahul Nair).Tupleカラムのデシリアライゼーション中に、バイナリストリーム内のシリアライゼーション種別がDETACHEDの場合に発生するプロセスの異常終了を修正しました。#99823 (Rahul Nair).- SLRU sub-queue promotion における競合状態が原因で、ファイルシステムキャッシュの動的リサイズ中に
LOGICAL_ERROR例外が誤って発生する問題を修正しました。 #99850 (Alexey Milovidov). query_logとクライアント出力で、非同期 INSERT クエリのwritten_rows、read_rows、result_rowsが 0 と表示される問題を修正しました。#99879 (Sema Checherinda).- システムテーブルに対する内部クエリが
ColumnConstでラップされたカラムを返す場合に、KILL QUERYで発生する例外 “Bad cast from type X to Y” を修正しました。#99881 (Alexey Milovidov) 。 - untuple 引数内の相関サブクエリにおける論理エラーを修正しました。#99917 (Vladimir Cherkasov) 。
right、rightUTF8、またはその他の substring 関数を長さ INT64_MIN (-9223372036854775808) で呼び出した際に発生していた例外を修正しました。従来は整数オーバーフローにより未定義の動作を引き起こしていましたが、現在はこれらの関数が ARGUMENT_OUT_OF_BOUND error を正しく返すようになりました。#99934 (Jimmy Aguilar Mena).- これで ClickHouse は、Spark スタイルのテーブル (各ファイルが完全な絶対パスを持つ、または共通のテーブルパスからの相対パスを持つ場合) を適切に処理できるようになりました。 #92348 を修正しました。 #99935 (alesapin).
ALTER TABLE ... MODIFY QUERYで、ネストされたサブクエリにSETTINGSが含まれ、かつALTER自体にもSETTINGSがある場合に発生する “Inconsistent AST formatting” 例外を修正しました。#99938 (Nikita Mikhaylov) 。- パフォーマンス退行が疑われるため、#97114 “子が 1 つの場合のチェックより前に join step の行数推定を移動” を元に戻しました。#99957 (Alexander Gololobov).
- HEAD リクエストのレスポンスに
Content-Lengthヘッダーがない場合 (たとえば、GCS の展開的トランスコーディングが原因の場合) に、ClickHouse がファイルをスキップしてしまうことがある不具合を修正しました。#99971 (Yarik Briukhovetskyi). NumericIndexedVectorの aggregate states に偶数の整数定数を掛けた際に発生していたアサーション失敗 (デバッグビルドでは例外、リリースビルドでは誤った結果) を修正しました。原因は、pointwiseAddInplace内でエイリアスされた Roaring bitmap に対して自己 XOR が行われていたことです。#99976 (Desel72).- join 変換後にキーの型が変わる場合でも、連鎖した
JOIN USINGを介する従来の filter pushdown でUnexpected return type例外が発生しないようにしました。#99999 (Alexey Milovidov). - スカラー サブクエリが未解決のテーブル関数引数内で使用された際に発生する
LOGICAL_ERROR例外 “Unexpected node type for table expression … Actual IDENTIFIER” を修正しました。例:SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1)))。#100014 (Alexey Milovidov). VALUESを伴うINSERTで、データの次の行に末尾SQLコメント (--または/* */) があると失敗する問題を修正しました。コメントは別の行として解析されず、スキップされるようになりました。#100016 (Pratima Patel).- NULL の部分を含むタプルの比較時に
arrayRemoveで発生する例外を修正しました。#100017 (Alexey Milovidov) 。 system.asynchronous_insertsにおけるユーザー間のデータ漏えいを修正しました。これまでは、テーブルに対するSELECT権限を持つユーザーであれば、他のユーザーに属する保留中の非同期 INSERT エントリも閲覧できていました。現在は、SHOW_USERS権限を持つユーザーを除き、エントリは現在のユーザーに基づいて絞り込まれます。#100024 (Shaohua Wang).- Time64 から UInt64 への CAST で、値が 24 時間に丸め込まれてしまうことがある問題を修正しました。#100025 (Yarik Briukhovetskyi) 。
- CREATE DICTIONARY の定義に、存在しない関数を含むリスト値がある場合にローカルサーバーがクラッシュする問題を修正しました。#100036 (Yakov Olkhovskiy) 。
CSV、MsgPackフォーマットでNullable(Tuple)を正しく解析できない問題を修正しました。#99753 をクローズ。#100038 (Nihal Z. Miaji).INの右辺に WITH の関数式エイリアス (例:tuple(...)) を使用した際に、UNKNOWN_IDENTIFIERによりCREATE VIEWが失敗する不具合を修正しました。#100042 (Peng).- 並列レプリカ使用時に、
initializeAggregationまたはAggregatingMergeTreeと併用すると時系列集約関数 (例:timeSeriesResampleToGridWithStaleness) がILLEGAL_TYPE_OF_ARGUMENTで失敗する問題を修正しました。#100053 (Alexey Milovidov) 。 - NumericIndexedVectorDataBSI 内部での負の値の処理を正しく行うようにしました。 #100086 (Daniil Ivanik).
accurateCastOrDefaultおよびto*OrDefault関数で、定数入力時に Const カラム型が保持されない問題を修正しました。#100132 (Alexey Milovidov) 。- 省略された
LowCardinality(Nullable(T))型のクエリパラメータは、Nullable(T)と同様に、正しくNULLがデフォルト値として扱われるようになりました。#100144 (Denys Melnyk). - StringSearcher.h での未初期化値の使用を修正しました。#100225 (Konstantin Bogdanov) 。
- Ctrl+C で、スカラー サブクエリやその他の解析時パイプラインをキャンセルできるようにしました。以前は、長時間実行されるスカラー サブクエリの実行中に Ctrl+C を押しても、サブクエリが完了するまで中断できませんでした。また、
clickhouse-clientとclickhouse-localの両方で、スカラー サブクエリの実行中に読み取られた行数が、進行状況バーと JSON 統計に正しく表示されるよう修正しました。@YjyJeff との共同作業です。#100230 (Raúl Marín) 。 - クロス結合およびランタイムフィルタを含む
Dynamicカラム関連のクエリで発生していたLOGICAL_ERROR例外を修正しました。原因は、hasOnlyNulls最適化パスでColumnVariant::filterが Variant カラムのポインタをクローンせずに共有していたことにありました。Closes https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov). arrayFirst/arrayLast関数の呼び出し時にデータ型が誤って再解釈されることがある、Variant を含む Array の不具合を修正しました。たとえば以前は、実際の Variant 型がDateである場合でも、Array(Variant(Date, Bool))がBoolに変換されていました。#100255 (timothygk).- 関数に関する軽微な変更がいくつかあります。h3 関数は境界の検証がより適切になりました。readWKB はサイズ制限 (新しい設定
max_wkb_geometry_elements) を確認します。乱数生成関数では、計算時の最大反復回数が制限されます。#93543 のフォローアップです。#100270 (Alexey Milovidov). - cutURLParameter が、他のパラメータ名の部分文字列として含まれているパラメータを誤ってスキップしてしまうことがある問題を修正しました。 #100280 (Nikita Semenov).
- Iceberg のメタデータファイルパス設定に null byte が含まれている場合に発生する例外を修正しました。 #100283 (Alexey Milovidov).
distributed_index_analysisをINサブクエリを含む条件とともに使用した際に、実行されるクエリ数が二乗オーダーで増えてしまう問題を修正しました。#100287 (Anton Popov).GROUP BY ... WITH TOTALS HAVINGとUNION DISTINCTを Nullable式と組み合わせて使用した際に発生する “Block structure mismatch” 例外を修正しました。 #100293 (Alexey Milovidov).block_size_bytesパラメータが極端に大きい場合にestimateCompressionRatioで発生する LOGICAL_ERROR 例外を修正。 #100298 (Alexey Milovidov).GROUP BY CUBE(...) WITH ROLLUPや同様の組み合わせを使用した場合に、デバッグビルドで発生する “Inconsistent AST formatting” 例外を修正しました。#100376 (Alexey Milovidov) 。- カラムの別名を使用した、
SELECT *またはEXCEPT/INTERSECTクエリを含むビューの作成時に発生していた例外を修正しました。#100386 (Alexey Milovidov) 。 - ハートビートエラー後のリバランスでコンシューマーがスタックした際、Kafkaエンジンのテーブルで
DROP TABLEがいつまでも完了しない問題を修正しました。#100388 (Alexey Milovidov) 。 - zipアーカイブを使ったバックアップ/リストア操作で発生していた
ReadBuffer is canceled. Can't read from it.例外を修正しました。#100400 (Alexey Milovidov). - granule 境界が揃っていない複数のパーツにデータが分割されている場合に、
max_rows_to_read/force_primary_key使用時のSELECT count()クエリで発生するTOO_MANY_ROWS例外を修正しました。#100408 (Alexey Milovidov). system.completionsが、テーブル単位、DB単位、およびカラム単位の権限取り消しを含む、あらゆる権限付与の組み合わせで、データベース、テーブル、カラムをアクセス権に応じて正しくフィルタリングするよう修正しました。 #100432 (Shaohua Wang).- race condition に起因する NuRaft の SEGFAULT を修正しました。#100444 (Pablo Marcos) 。
min/max/argMin/argMaxでの NaN の扱いがORDER BYと一貫するようになりました。NaN は常にスキップされ、返されるのはすべての値が NaN の場合のみです。従来は、IEEE 754 の順序なし比較セマンティクスにより、結果がデータ内の NaN の位置に依存していました。#100448 (Raúl Marín).delta_lake_snapshot_start_versionを設定せずにdelta_lake_snapshot_end_versionを設定した場合、本来はBAD_ARGUMENTSerror が発生すべきところ、黙って無視されていたコピーペースト由来のバグを修正しました。#100454 (Mohammad Lareb Zafar).StorageRabbitMQ::shutdownは冪等ではありませんでした (weak pointer に無条件にアクセスしたうえで、対応する shared pointer を破棄していました) が、現在はStreamingStorageRegistryで1回、その後DatabaseCatalogでさらに1回、計2回呼び出されるようになっています。この修正により、このメソッドは冪等になり、予防的な null チェックも追加されました。#100455 (Miсhael Stetsyuk) 。QBitをターゲット型としてaccurateCastOrNullを使用した際に発生するLOGICAL_ERROR例外を修正しました。#100470 (Raufs Dunamalijevs).optimize_on_insert=0の wide パーツで、ネストされたArray(JSON)カラムを持つテーブルへの insert 時に発生する LOGICAL_ERROR 例外 “Stream … not found” を修正しました。#100475 (Pavel Kruglov) 。- バックアップメタデータ内のファイルエントリのパスを検証し、
RESTORE時にパストラバーサル、絶対パス、および空の名前を拒否するようにしました。#100483 (Pablo Marcos) 。 - 動作しなかった
LIMIT m OFFSET n WITH TIES構文を修正しました。この構文は、すでに動作していたLIMIT n, m WITH TIESと等価です。#100491 (Nihal Z. Miaji). - 名前付きフィールドと
LowCardinality要素を持つNullable(Tuple)カラムでINを使用した際に発生する例外 “No set is registered for key” を修正しました。 #100523 (Alexey Milovidov). - ベクトル類似度検索時にクラッシュや検知されないメモリ破損を引き起こすおそれがあった、usearch の
sorted_buffer_gt::insert()における heap-buffer-overflow を修正しました。#100537 (Dustin Healy) 。 - クエリで指定した
FORMAT句およびINTO OUTFILE句がEXECUTE ASで無視される問題を修正しました。#100538 (pufit). - クエリレベルの OFFSET を伴う SAMPLE で発生していた AST のフォーマットの不整合を修正しました。#100576 をクローズしました。#100579 (Pavel Kruglov) 。
- Azure の polaris カタログを修正しました。25.12 以降、このカタログでは Azure 使用時に path の先頭へ bucket が追加されるようになっていました。たとえば、
abfss://polaris-polaris@<some_url>.windows.net/<other-path>ではなく、abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path>となっていました。この PR では、path から bucket を取り除きます。#100583 (Konstantin Vedernikov) 。 - 一部のブロックでデフォルトカラムが const の場合に、transform で発生していた型不一致の例外を修正しました。#100574 をクローズします。#100616 (Pavel Kruglov).
- クエリの元の SELECT 部分に存在しないカラムが projection の SELECT 部分に含まれている場合に発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。#100194 をクローズしました。#100623 (Yarik Briukhovetskyi).
- 過大な次元を持つように細工された
.npyファイルによるサービス拒否攻撃を防ぐため、Npy フォーマットの shape をファイルサイズとオーバーフロー制限に照らして検証します。また、空の shape を拒否し、1行あたりのメモリ使用量を 2 GiB に制限します。#100625 (Raúl Marín). - 非同期 INSERT (TCP) 時および HTTP 経由のすべての INSERT で
DateTime値をパースする際に、session_timezoneが無視される問題を修正しました。 #100647 (Sema Checherinda). - ソースとしてテーブル関数を使用する場合に、
cluster()およびclusterAllReplicas()テーブル関数へ分片キーを渡せるようになりました (例:cluster('name', view(...), sharding_key)) 。#100665 (Sergey Veletskiy) 。 quantileIfArrayArray(0.5)([[NULL]], [[1]])のように、Array コンビネータと NULL 引数を伴うパラメトリック集計関数の使用時に発生していたサーバークラッシュ (アサーション失敗) を修正しました。#100679 (nerve-bot) 。use_variant_as_common_typeが有効な場合に、空のタプルと空でないタプルの共通スーパータイプの計算中に発生していた例外を修正しました。#100699 (Antonio Andelic) 。- Azure blob storage ディスクが設定されている場合でも、エンドポイントに一時的に到達できないとき (例: DNS 障害) にサーバーの起動が失敗しなくなりました。#100701 (Raúl Marín) 。
- 符号なしの除数が符号付きの結果型に収まらない場合に発生する、
positiveModuloの未定義動作を修正しました。#100705 (Raúl Marín) 。 use_top_k_dynamic_filteringが有効で、ORDER BYカラムの型がDynamicまたはVariantの場合に発生していた、サーバーのクラッシュ (論理エラー “Unexpected return type from __topKFilter”) を修正しました。 #100742 (Groene AI) 。- LowCardinality 要素を含む Tuple キーに対して PREWHERE/WHERE で
has()関数を使用した際に、server がクラッシュする問題を修正しました。#100760 (Groene AI). - S3オブジェクトストレージ上の
LogまたはStripeLogテーブルで、同時書き込み中に読み取る際に発生していたfile_offset_of_buffer_end <= getFileSize()アサーション失敗 (デバッグビルドでは例外) を修正しました。 #100763 (Alexey Milovidov). - 統計が有効なテーブルで、WHERE句に関数式 (例:
toDecimal64(col, 3)) が含まれている場合に、統計の選択率推定器で発生していた例外を修正しました。これにより、推定器は無効な型変換を試みる代わりに、そのような述語をスキップするようになりました。#100764 (Han Fei) 。 - 並べ替えを伴う join が誤った結果になることがあるまれなケースを修正しました。#100790 (Yarik Briukhovetskyi) 。
- 最適化された単純な count で
AggregateFunctionの引数型が誤っていた問題を修正しました。この問題により、分散テーブルでcount(v0 + v1)のような式をクエリすると、NUMBER_OF_ARGUMENTS_DOESNT_MATCH例外が発生していました。 #100794 (YjyJeff). - 一部のカタログでは、
select * from system.databasesクエリの結果のSETTINGSセクションに、一部のシークレットが表示されることがあります。このPRでは、そのような挙動を防止します。#100800 (Konstantin Vedernikov). toStartOfIntervalで、origin 引数を指定し、かつ Week、Quarter、または Year のインターバルに極端な値を使用した場合に発生する未定義動作 (符号付き整数オーバーフロー) を修正しました。#100817 (Raúl Marín) 。Tuple戻り値型と、1 つ以上のNullableな引数を持つIf、Distinct、DistinctIf、IfState集約関数コンビネータで、Nullable(Tuple)の導入後に古いシリアライズ済み状態を読み取れなくなっていた問題を修正しました。#98917 をクローズします。#100826 (Nihal Z. Miaji).- s3Cluster と分散クエリにおいて、接続プールの use-after-free が原因で発生していたセグメンテーションフォールトを修正しました。 #100837 (Konstantin Bogdanov) 。
- サーバーのシャットダウン中に Dictionary を読み込む際、null ポインタのデリファレンスによるセグメンテーション違反が発生する不具合を修正しました。
Context::getUserDefinedSQLObjectsStorage(user_defined_sql_objects_storageをデリファレンスする) は、メインスレッドがContext::shutdown(user_defined_sql_objects_storageを null に設定する) を呼び出すのと同時に、Dictionary のスレッドからも呼び出されます。Context::shutdownを実行する前に、Dictionary ローダーで今後の更新を無効にし、現在実行中の Dictionary クエリを停止し、Dictionary の読み込みスレッドを join しておく必要があります。これは通常のクエリに対して行っている処理と同様です。#100839 (Miсhael Stetsyuk). - 入力に非ASCIIバイトが含まれている場合に
ULIDStringToDateTimeで発生するバッファオーバーフローを修正しました。#100843 (Konstantin Bogdanov) 。 - 複数のテーブル (
Distributedテーブルを含む) を束ねるMergeテーブル (またはmerge()テーブル関数) に対して、distributed_group_by_no_merge=1が有効な状態でクエリを実行すると発生していたクラッシュ (LOGICAL_ERROR) を修正しました。#100859 (Groene AI). - Cast_keep_nullable が有効な場合、dynamic null を Variant にキャストしても例外が発生しなくなりました。 #100864 (Seva Potapov).
clickhouse-keeper-clientのget、exists、lsコマンドで、重複したwatch_idエラーメッセージが stderr ではなく stdout に出力される問題を修正しました。#100893 (Mohammad Lareb Zafar).intDiv/intDivOrZeroで、Nullable なタプルの配列に対して発生していた例外を修正しました。例:SELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín).- 定義を保存する前に
StorageAliasのエンジン引数を評価し、currentDatabase()のような式がデータベースに保存される前にリテラル値に解決されるようにしました。#100902 (Nikolay Degterinsky) 。 query_plan_merge_expressions = 0のときに、ExpressionStepがReadFromMergeTreeの直上にある場合のprocessAndOptimizeTextIndexFunctionsを修正しました。#100879 の修正です。#100909 (Jimmy Aguilar Mena).- do_complete_line の範囲外アクセスを修正した replxx に更新しました。 #100925 (Azat Khuzhin).
- shard-by-PK 最適化を使用する JOIN でクエリ条件キャッシュが使われ、一部のパーツがキャッシュされた条件によって除外される場合に、誤った結果が返される問題を修正しました。 #100926 (Groene AI).
- 一部のケースで、索引解析中にフィルタ式で
divideとintDivを使用するとILLEGAL_DIVISIONが返されていた問題を修正しました。#100928 (Nihal Z. Miaji) 。 - 非同期起動時に、起動時の依存関係の順序が誤っていたため、内部テーブルを持つmaterialized viewで発生していた”ターゲットテーブルが存在しない”エラーを修正しました。 #100946 (Nikolay Degterinsky).
- parseDateTimeBestEffortで、小数点以下が19桁以上ある日時文字列をパースする際に発生する未定義動作 (符号付き整数オーバーフロー) を修正しました。 #100948 (Vasily Chekalkin).
IN句にタプルのサブクエリを含む場合 (例:WHERE (id, str) IN (SELECT (id, str) FROM ...)) にテキスト検索索引を使用すると発生していたクラッシュ、またはサブクエリ内のカラム数がINの左辺のタプルと一致しない場合に発生していたクラッシュを修正しました。#100959 (Anton Popov).- スパースカラムのシリアライゼーションを使用する
MergeTreeテーブルからポリゴン Dictionary を構築する際に発生していたクラッシュを修正しました。#100964 (Anton Popov) 。 - 定数畳み込みされた式に対して
INTERSECT ALL/UNION ALLを使用した際に発生する論理エラー “Invalid action query tree node” を修正しました。#100977 (Alexey Milovidov). Nullable(Tuple)の導入後、1 つ以上のNullable引数を持つsumCountOrDefaultaggregate function が、古いシリアライズ済みの状態を読み取れなくなっていた問題を修正しました。#100882 をクローズしました。#101021 (Nihal Z. Miaji) 。- 遅延カラムレプリケーション (
enable_lazy_columns_replication) によって生成されたColumnReplicatedカラムが、入力の到着が遅れるマージソートパイプラインに流れ込む場合に、マージアルゴリズムで発生するクラッシュ (Logical error: isConst/isSparse/isReplicated assertTypeEquality) を修正しました。#101036 (Groene AI). SELECTで同じエイリアスが複数の式に使われている場合に、誤ったUNKNOWN_IDENTIFIERエラーではなく、正しいMULTIPLE_EXPRESSIONS_FOR_ALIASエラーが報告されるよう修正しました。#101040 (Alexey Milovidov) 。- 宣言されたタイムゾーンが式のタイムゾーンと異なる場合に、
DateTime/DateTime64型の ALIAS カラムでタイムゾーン変換が適用されない不具合を修正しました。 #101043 (Alexey Milovidov). - ビュー、サブクエリ、および
INSERT ... SELECTで、query_logに行ポリシーが記録されない問題を修正しました。クエリプランニング中には行ポリシーが適用されていたものの、ログ記録のためにサブプランナーから親プランナーへ引き継がれていませんでした。行ポリシー (ログ記録専用) は、プランナーとサブプランナーの双方が設定できるよう、QueryAccessInfoに保持されるようになりました。#101044 (Narasimha Pakeer). - パイプラインブロックに通常のカラムとマージされる
ColumnConstカラムが含まれている場合にDirectJoinMergeTreeEntityで発生する例外を修正しました。 #101046 (Alexey Milovidov). - CTE のカラム別名のフォーマットにおける不要なスペースを修正しました (
WITH t (a, b)→WITH t(a, b)) 。#101049 (Alexey Milovidov). - アナライザが有効な場合に、
mergeのようなネストされたテーブル関数を使用するとremote/clusterテーブル関数が失敗する問題を修正しました。#101055 (Alexey Milovidov). prefer_localhost_replica=1の場合に分散クエリでOFFSETが二重に適用され、想定より少ない行が返される不具合を修正しました。#101071 (Nihal Z. Miaji) 。format_regexp設定に無効な正規表現を指定してRegexpフォーマットを使用した際に発生するクラッシュを修正。 #101074 (Nihal Z. Miaji).- 並列レプリカで
serialize_query_plan=1を使用した際に、時系列集約関数で発生していた “Illegal type Decimal64 of start parameter” エラーを修正しました。#101083 (Groene AI). - PREWHERE を含むプロジェクションを
ORDER BY ... LIMITと併用した際にoptimizeLazyMaterializationで発生する例外を修正しました。 #101115 (Anton Popov). - 内部専用の
Nullcombinator (例:sumNull,avgNull) を使用する aggregate functions で、aggregate_functions_null_for_empty = 1設定が有効な場合に発生していた server のクラッシュ (SIGABRT) を修正しました。#101147 (Groene AI) 。 - 完了したファイルセグメントのログ記録時に解放済みメモリを読み取ってしまう可能性があった、ファイルシステムキャッシュの書き込みパスでの use-after-free を修正しました (BuzzHouse の MemorySanitizer により検出) 。#101161 (Groene AI).
- 分散索引解析で、明示的な要素なしに構築された set を持つ
GLOBAL IN述語に遭遇した際、“明示的な要素なしで外部テーブルを準備済みの set にアタッチしようとしています” というエラーでサーバーがクラッシュする不具合を修正しました。#101178 (Groene AI). - JIT コンパイルが有効な場合 (コンパイル閾値に達した後) 、
Decimalカラムに対するMAX/MIN集約関数が誤った結果を返す不具合を修正しました。 #101203 (Raúl Marín). - 論理削除後、論理削除のマスクが付いたすべてのパーツがマージで解消された後も、
minmax_count_projectionと単純なCOUNT(*)の最適化が恒久的に無効のままになる問題を修正しました。#101212 (Anton Popov). listとreadの間にリモート object が上書きされると、以前は stale な object メタデータが生成され、その結果 cache からHaving zero bytes, ...という論理 error が発生し得たケースを修正しました。#101219 (Kseniia Sumarokova).- LowCardinality 型の
lc_columnを持つ MergeTree テーブルに対してORDER BY CAST(lc_column, 'Type')でクエリを実行した際に発生していたサーバークラッシュ (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) を修正しました。 #101220 (Groene AI). S3Queueにおける期限切れの処理中ノードのクリーンアップを修正しました。#101230 (Kseniia Sumarokova) 。- 無効な
optimizations引数が指定された場合の mergeTreeAnalyzeIndexes() における UB を修正しました。#101253 (Azat Khuzhin). - パーティション化された Iceberg テーブルで
ALTER TABLE UPDATEを連続実行した際に発生するLogical error: 'partitions_count > 0'例外を修正しました。#101278 (Desel72). - 大きな整数定数 (例: 256、2147483648) を、MergeTreeテーブルに対する AND を含む WHERE 句でブール述語として使用した場合に、クエリ結果が誤っていた問題を修正しました。たとえば、
SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648は、本来はすべての行に一致するべきところ、誤って 0 を返していました。#101287 (Groene AI). - Replicated MergeTree を使用する Delta Lake クラスターからの insert-select を修正しました。 #101299 (Konstantin Vedernikov).
- スカラー サブクエリが、依存関係にあるマテリアライズド CTE の連鎖を参照したときに、“Logical error: Reading from materialized CTE before materialization” でクラッシュする問題を修正しました。 #101305 (Groene AI).
IStorage::getDependentViewsByColumnにおけるstorage_idのデータ競合を修正しました。#101385 (Nikolay Degterinsky) 。- BACKUP FROM SNAPSHOT AST のフォーマット処理とクローン作成を修正しました。#101405 (Pablo Marcos) 。
enforce_keeper_component_tracking有効時にsystem.part_moves_between_shardsをクエリすると発生していた、LOGICAL_ERROR クラッシュ “Current component is empty” を修正しました。#101462 (Groene AI).- fuzzer が不正な Dynamic 型の AST を生成した際に発生する DataTypeDynamic::create() のセグメンテーションフォールトを修正しました。 #101464 (Groene AI) 。
- DeltaKernel が有効でない状態で
delta_lake_snapshot_versionまたは CDF version の設定を使用した場合、誤ったデータを黙って返すのではなく、エラーを返すようにしました。#101489 (Desel72). - ARRAY JOIN を JOIN USING とともに使用し、
analyzer_compatibility_join_using_top_level_identifier設定が有効な場合に発生していたNOT_FOUND_COLUMN_IN_BLOCK例外を修正しました。#101240 をクローズしました。#101507 (Vladimir Cherkasov). - テーブルが
iceberg_metadata_file_pathを使用して作成され、対象のメタデータバージョンがすでに存在する場合に、Iceberg INSERT の再試行ループが失敗する問題を修正しました。#101548 (Groene AI). - シリアライゼーション/デシリアライゼーションの不整合を避けるため、arrayIntersect および関連関数の結果カラムから Nullable を削除しました。 #101569 (George Larionov).
- IcebergLocal table engine を使用する materialized view に対して SELECT を実行した際に発生するサーバークラッシュ (LOGICAL_ERROR) を修正しました。 #101577 (Groene AI).
- NaN 引数で
intExp10を呼び出した際の誤ったエラーメッセージを修正しました。intExp10ではなくintExp2と表示されていました。#101582 (Krishna Chaitanya). - #100288 のリファクタリング後、
allow_statistics=0でALTER TABLE ADD STATISTICSおよびALTER TABLE DROP STATISTICSがブロックされなくなっていた問題を修正しました。#101585 (Krishna Chaitanya) 。 - 25.1 より前の不完全な drop によって残った ZooKeeper ノードに
drop_lock_versionノードがない場合に、KeeperMapのCREATE TABLEが “Cannot create metadata for table” で失敗する問題を修正しました。#101623 (Antonio Andelic). - Map のサブカラム読み取り時に発生する可能性がある論理エラーを修正しました。#100769 をクローズ。#101336 をクローズ。#101641 (Pavel Kruglov).
getSubcolumnDataで、プレフィックス一致よりもサブカラムの完全一致を優先するよう修正し、クラッシュの可能性を防止しました。#101271 をクローズしました。#101645 (Pavel Kruglov).use_variant_default_implementation_for_comparisonsが無効な場合に、LowCardinalityカラムをVariantの NULL 定数と比較するとクラッシュする問題 (LOGICAL_ERROR: “ColumnUnique can’t contain null values”) を修正しました。#101690 (Groene AI).- 内容: Bzip2ReadBuffer に空ストリーム用のガードを追加し、内部ストリームが空の場合に UNEXPECTED_END_OF_FILE を送出する代わりに EOF を返すようにしました。#101691 (ClickGap AI Bot) 。
- 内容:
system.s3_queue_settingsおよびsystem.azure_queue_settingsのalterableカラムで、説明文の内容が逆になっていた問題を修正しました。実際のコードの動作に合わせて、0と1の意味を入れ替えました。 #101703 (ClickGap AI Bot). - positiveModulo(tuple, number) が、剰余ではなく誤って除算にディスパッチされていた問題を修正しました。#101709 (ClickGap AI Bot) 。
- cache でラップされたディスクで
thread_pool_sizeが設定されている場合に発生していたクラッシュを修正しました。従来は、FileCacheSettings::loadFromConfig()がthread_pool_sizeを不明な設定として拒否していたため、server が起動できませんでした。この設定は有効なIDiskパラメータであり、バックグラウンドのパート移動中に行われるディスク間コピー処理で使用するスレッド数を制御します。#101712 (Francisco). RANGE_HASHEDDictionary の作成時に、存在しないMAX範囲属性を警告なしで受け入れてしまい、最小範囲属性と最大範囲属性の型が異なる場合に誤った型設定を使用していた不具合を修正しました。このバグはbuildRangeConfiguration内のコピー&ペーストミスが原因で、最大属性に対してmax_attr_nameではなくmin_attr_nameを参照していたことによるものです。#101732 (Yakov Olkhovskiy).- 待機タイマーが、参照先の
ProfileEvents::Countersを持つワーカースレッドより長く生存する場合に CPU lease scheduler で発生する use-after-free クラッシュを修正しました。 #101761 (Antonio Andelic) 。 - arrayLevenshteinDistanceWeighted 関数および arraySimilarity 関数の不具合を修正しました。#101725 をクローズしました。#101767 (Mikhail f. Shiryaev).
- POSTフォームボディを無視していた Prometheus Query API の問題を修正しました。 #101794 (James Cunningham).
- S3
Client::~Clientデストラクタから例外が伝播し、server が終了してしまう問題を修正しました。#101798 (Gagan Dhakrey). Object型の動的パスの並列デシリアライゼーションにおける use-after-scope の問題を修正しました。これは、動的パスが多数あるテーブルの読み取り時にクラッシュを引き起こす可能性がありました。#101823 (Antonio Andelic).- 特定の (デフォルト以外の) フォーマット設定で、関数
formatDateTimeのフォーマッタ%Wが誤った出力を返す問題を修正しました。 #101847 (Robert Schulze). - デマングルされたシンボル名のテンプレート引数内に検索文字列が最初に現れる場合に、
SYSTEM INSTRUMENT ADDでshouldPatchFunctionの偽陰性が発生する問題を修正しました。#101885 (Pablo Marcos). - 定期的なリフレッシュ中に ZooKeeper のセッションが期限切れになると UDF レジストリが失われる不具合を修正しました。この不具合により、完全なリフレッシュが成功するまで、すべてのユーザー定義関数が利用できなくなる可能性がありました。 #101891 (Nikita Fomichev).
AES_256_GCM_SIVのsystem.codecsの説明を修正し、AES-128ではなくAES-256と表示されるようにしました。#101917 (Jimmy Aguilar Mena) 。- JSON column 上に作成された min-max 索引で誤った極値が使われ、誤ったクエリ結果を引き起こす問題を修正しました。#101700 をクローズします。#101918 (Pavel Kruglov) 。
splitByStringトークナイザーは、空の区切り文字列を受け入れなくなりました。#101928 (Robert Schulze).materialize_skip_indexes_on_merge=falseで、マージ時にテキスト (全文) 索引が抑止されない不具合を修正しました。これまでは、テキスト以外のスキップ索引 (minmax、set、bloom_filter) のみが抑止され、テキスト索引は引き続き構築されていたため、CPU と I/O を無駄に消費していました。#101932 (Groene AI) 。sparseGramsトークナイザーが、指定された最大長を超えるトークンを生成していました (これは実装内で+2がハードコードされていたためです) 。 #101934 (Elmi Ahmadov).addStreams中にストリームのコンストラクタが例外をスローし、column_streamsに null エントリが残ることで発生するMergeTreeDataPartWriterWide::cancelの SIGSEGV を修正しました。 #101936 (Antonio Andelic).query_plan_direct_read_from_text_indexが有効な場合に、フルテキスト索引を持つ Merge または分散テーブルに対し、has*Tokensと LIKE が混在するフィルタ条件を含むクエリを実行すると例外が発生する問題を修正しました。 #101939 (Jimmy Aguilar Mena).- 無効な
QueryProcessingStage値を含むネイティブプロトコルのクエリパケットのパース時に発生する未定義動作を修正しました。 #101972 (Raúl Marín). - 初期クエリのパース中に例外が発生した場合、同期ずれしたストリームから不正なデータを読み取るのを防ぐため、TCP接続を閉じるようにしました。#101989 (Raúl Marín).
- 26.1+ のファイルシステムキャッシュにおける SLRU の競合バグを修正しました。この不具合により、領域予約に関する論理エラーが発生する可能性があります。デバッグビルドでは、アサーション失敗
'Previous state is Evicting, but expected state to be Active while setting Evicting flag for 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (state: Evicting)'.が発生することもあります。#101991 (Kseniia Sumarokova). - 末尾に余分なデータが付いた文字列を空の
Tuple()型にキャストする際に発生する例外を修正しました。#102011 (Alexey Milovidov). - ORDER BY と grace_hash join アルゴリズムを使用するクエリで、行の並び順が誤る問題を修正しました。影響を受けるクエリでは、結果が誤った順序で返されることで、気付かないうちに不正確な出力が生成される可能性がありました。 #102036 (János Benjamin Antal).
max_bytes_in_join設定が構成されている場合に、RIGHT JOIN および FULL JOIN クエリで発生する可能性があった LOGICAL ERROR (Unexpected size of index type) を修正しました。#102042 (Jimmy Aguilar Mena) 。- 負の値を持つ Time を DateTime と比較した際に、誤った結果が返されるケースを修正しました。#101670 をクローズしました。#102056 (Yarik Briukhovetskyi)。
ZooKeeperRetriesControlが古い (期限切れの) ZooKeeperセッションを更新せずに再試行していたことが原因で発生していた、UDF refresh のクラッシュを修正しました。 #102059 (Nikita Fomichev).- unlock snapshot のフォーマット時に欠けていたスペースを修正。https://github.com/clickhouse/clickhouse/issues/101723 をクローズ。#102063 (Han Fei).
- WHERE 句を含むビューに対するクエリで、内部クエリがビューのメタデータと異なる型のカラム (たとえば、
join_use_nullsを指定した LEFT JOIN による Nullable) を生成した場合にクラッシュ (SIGSEGV) する問題を修正しました。#102085 (Miсhael Stetsyuk). - cache キーの不一致により、パート削除後も
VectorSimilarityIndexCacheのエントリが追い出されない不具合を修正しました。#102152 (Seva Potapov). - rabbitmq ストレージの使用時に、破損したメッセージを NACK するようにしました。 #102157 (Seva Potapov).
- 不正な空のタプル文字列のパース時に発生する論理エラーを修正しました。#102289 (Nihal Z. Miaji) 。
- GROUP BY のカラムの順序がテーブルのソートキーと異なる場合に
optimize_aggregation_in_order=1を使用すると、誤った集計結果 (行の重複) が生じる問題を修正しました。 #102299 (Groene AI). - Avro フォーマットの使用時に
IcebergLocalのALTER TABLE ... UPDATEで発生していたクラッシュを修正しました。原因は、LowCardinality/Nullableのラッパー型がシリアライゼーション前にアンラップされていなかったことです。 #102337 (Desel72). - 式が定義されていないマテリアライズドカラムに対するミューテーションで発生していたセグメンテーションフォルトを修正しました。#102185 をクローズします。#102342 (zoomxi).
- Array型における Coalescing merge tree の修正です。これにより #89509 をクローズします。#102384 (Konstantin Vedernikov).
- ブルームフィルタのプッシュダウンが有効で、WHERE句に等値/不等値条件がある Parquet ファイルの読み取り時に発生する segfault (またはデバッグビルドでの LOGICAL_ERROR) を修正しました。このクラッシュは、Parquet の prefetcher におけるブルームフィルタデータ取得処理で範囲外のメモリアクセスが発生することが原因で、非決定論的に誤ったクエリ結果を引き起こす可能性もありました。#102385 (Groene AI).
- サブキュー間でエビクション統計が共有されていたことと、失敗した候補に対するリカバリパスが誤っていたことが原因で、SLRU ファイルシステムキャッシュの動的リサイズ中に
LOGICAL_ERRORで中断する問題を修正しました。#102396 (Antonio Andelic). - Database Replicated の新しいレプリカ上で、ターゲットテーブルのない Alias tables の初期化に失敗する問題を修正しました。#101320 をクローズしました。#102397 (Nikolay Degterinsky).
- ヌルバイトのみで構成された needle を検索する際に、文字列検索関数 (
countSubstrings、positionなど) で範囲外読み取りが発生する問題を修正しました。#102401 (Raúl Marín) 。 - 全文テキスト索引の設定 (
enable_full_text_index、allow_experimental_full_text_index、use_skip_indexes_on_data_read) は、compatibility設定が 26.1 より前のバージョンを指している場合でも、無効化されなくなりました。以前は、そのためSharedDatabaseCatalogがテキスト索引付きのテーブルを作成できないことがありました。#102422 (Nikita Fomichev) 。 - 末尾が
%のprintfにおける境界外読み取りを修正しました。#102472 (Raúl Marín) 。 - AsynchronousMetrics において、rewind でバッファのキャンセルフラグがリセットされないことが原因で、debug builds で発生していた
ReadBuffer is canceledという chassert 例外を修正しました。 #102524 (Yuri Fedoseev) 。 - 区切り文字だけからなる needle (例:
'()'、'!!!') を指定したhasToken/hasTokenOrNullについて、テキスト索引を持つカラムでの動作を修正しました。従来は、BAD_ARGUMENTSをスローすべき場合 (hasToken) やNULLを返すべき場合 (hasTokenOrNull) に、索引がすべてのグラニュールを黙ってスキップしていました。#102544 (Jimmy Aguilar Mena). - Keeper における巨大な multi リクエストでの OOM を修正しました。OpenTelemetry のトレーシングでは、
ZooKeeperRequestオブジェクト内の OpenTelemetry spans 用に無条件で >1 KiB を割り当てていたため、非常に巨大な multi リクエストでは追加で >10 GiB のメモリを確保しようとしていました。これを修正するため、共有データを静的メモリに保持するようにし、ZooKeeperOpentelemetrySpansではstd::optionalではなくstd::unique_ptrを使うようにしました。 #102586 (Miсhael Stetsyuk) 。 - 既存のコレクションに対して
CREATE NAMED COLLECTION IF NOT EXISTSを実行するとNamedCollectionの CurrentMetric が過大に計上される問題と、起動時に config または SQL ストレージから読み込まれたコレクションでこれが初期化されない問題を修正しました。#102507 をクローズします。#102598 (Pablo Marcos). - 同時実行DDLによりローカル分片が空のカラムを返す場合に、
getStructureOfRemoteTableで発生する例外を修正しました。 #102604 (Alexey Milovidov). - 複数の同時実行
CREATE TABLE IF NOT EXISTSクエリが Shared データベース上の同じS3Queueテーブルを対象とした際に発生するLOGICAL_ERROR例外を修正しました。 #102610 (Nikita Taranov). - WHERE フィルタ使用時に Nullable カラムを読み込む際、ネイティブ Parquet V3 リーダーで発生する LOGICAL_ERROR クラッシュ “Unexpected number of rows in column subchunk” を修正しました。 #102628 (Groene AI).
AzureWriteMicrosecondsprofile event の説明が、“write” ではなく “read” になっていた問題を修正しました。#102639 (Miсhael Stetsyuk) 。- 一部の特殊なケースで、行ポリシーによって ‘Not found column in block’ 例外が発生する不具合。#102648 (Yarik Briukhovetskyi).
- 設定で定義された静的クラスターで、一時的に稼働中のノードが1つもない場合に ClusterDiscovery で発生していたサーバー例外を修正しました。 #102661 (Kseniia Sumarokova).
- タイムゾーン調整後にオーバーフローが発生した場合、誤った日付データ型が推論される問題を修正しました。#102601 をクローズしました。#102674 (Pavel Kruglov).
- リフレッシャブルmaterialized view が待機中に削除された場合に、
SYSTEM WAIT VIEWがいつまでもハングしたままになる問題を修正しました。#102681 (Nikolay Degterinsky) 。 - すべての行で ELSE が返されてしまう Dynamic expression を含む CASE を修正。#102511 をクローズ。#102684 (Pavel Kruglov).
- バイナリエンコードされたデータ型で発生していた、フラット化されたDynamic型のシリアライゼーションの不具合を修正しました。#101911 をクローズします。#102692 (Pavel Kruglov) 。
- format_schema_source=‘query’ が複数行の結果を暗黙に無視してしまう問題を修正しました。#101905 をクローズしました。#102698 (Pavel Kruglov).
- すべてのエラーを
1にマッピングするのではなく、SSHクライアント経由で実際の終了コードを報告するようにしました。#101741 を修正しました。#102700 (Konstantin Bogdanov) 。 - 動的/定義済みクエリハンドラーで HTTP ヘッダーが失われる問題を修正しました。#101846 をクローズします。#102706 (Konstantin Bogdanov) 。
- 折りたたまれた jemalloc ヒーププロファイルにポアソン・サンプリング補正を適用し、jeprof の出力と一致するようにしました。以前は、collapsed フォーマットでサンプリング確率が考慮されていなかったため、実際の割り当てサイズが過小評価されていました。#102759 (Antonio Andelic).
- 関数
hasPhraseにNULL引数を渡した場合のクラッシュを修正しました。#102802 (Nikita Taranov) 。 - 循環するシンボリック型参照を含む再帰的なスキーマを持つ Avro ファイルの読み取り時に発生していたサーバーのクラッシュ (SIGSEGV) を修正しました。今後は、このようなスキーマはクラッシュを引き起こす代わりに検出され、明確なエラーメッセージとともに拒否されます。#102853 (Groene AI).
FunctionVariantAdaptorで結果をキャストする際、Variantカラムに対する関数がメモリ制限に達するか、型変換以外の例外が発生した場合に起きていたサーバークラッシュ (LOGICAL_ERRORアサーション) を修正しました。この例外は、内部エラーとして誤分類されるのではなく、正しく伝播されるようになりました。#102855 (Groene AI).- スキーマ推論中に
std::length_errorがスローされた場合 (たとえば、input_format_msgpack_number_of_columnsに極端な値が設定されている場合や、入力データが不正な場合) に、debug/sanitizer ビルドでサーバーがクラッシュする問題を修正しました。#102859 (Groene AI). - レプリケートされたカラムおよびスパースなカラムのシリアライゼーションにおける NULL 表現が、設定 (例:
format_tsv_null_representation) に従うようにしました。 #102888 (Hechem Selmi). - #103499 にバックポート: Poco の
BufferedStreamBuf::flushBufferがソケット層からの短い書き込みを適切に処理していなかったため、ios_base::clear: unspecified iostream_category errorが発生した S3 リクエストが再試行されずに失敗していた問題を修正しました。#102894 (Sema Checherinda). - 論理削除の後、論理削除マスク付きのパーツがすべてマージされて消えた後も、
minmax_count_projectionと単純なCOUNT(*)の最適化が恒久的に無効のままになる不具合を修正しました。#102900 (Anton Popov). - LTO に起因する jemalloc の散発的なクラッシュを修正しました。#102913 (Azat Khuzhin) 。
- 新しいアナライザで、行ポリシーの OR チェーンを IN に最適化しました。#102915 (Azat Khuzhin) 。
- 誤ったアラインメントで page cache を解放することで発生し、クラッシュにつながる可能性がある jemalloc のメタデータ破損を修正しました。 #102918 (Azat Khuzhin).
- materialized view を伴わない通常の INSERT では、過剰な ConcurrencyControl のスロットやスレッド (
max_insert_threadsではなくmax_threads) を要求しなくなり、INSERT スループットが高いクラスターでの CC スロットの枯渇やスレッド数の急増を防げるようになりました。 #102961 (Sema Checherinda). - カーネル OOM を回避するため、MEMORY_LIMIT_EXCEEDED を発生させられるように ArrowMemoryPool を再導入しました。#102999 (Azat Khuzhin) 。
cast_string_to_date_time_modeがNullable(DateTime)へのCASTで無視されていた問題を修正しました。#101840 をクローズしました。#103035 (Pavel Kruglov).- テキスト索引の direct read 最適化で、
ALIASカラムがサポートされるようになりました。#103037 (Anton Popov). - #103454 にバックポート: 集約プロジェクションがクエリに一致し、かつテーブルの一部のパーツにプロジェクションデータが存在しない場合 (たとえば、すでにデータが入っているテーブルにプロジェクションを追加したものの、
MATERIALIZE PROJECTIONを実行していない場合) に、SELECT DISTINCTが不完全な結果を何も通知せず返してしまう問題を修正しました。#102951 をクローズしました。#103052 (Nihal Z. Miaji). MergeTreeテーブルで、NがUInt8より大きい整数型 (例:256、65535、2147483648、または任意の負の整数) の場合に、WHERE x AND toNullable(N)が誤った結果を返す問題を修正しました。これは、splitFilterNodeForAllowedInputsが、簡約されたANDのNullableな残り部分を boolean に変換する際にNULLのゼロ値を使っていたため、三値論理のもとで比較結果がNULLとなり、filter がすべての行を誤って除外していたためです。#103077 (Groene AI).- 文字列検索関数 (
locate、positionなど) で、引数を逆順 (function_locate_has_mysql_compatible_argument_order = 1の場合のlocate(needle, haystack)) で渡した際に、エラーメッセージで誤った引数型が表示される不具合を修正しました。#103102 (Alex Kuleshov) 。 disableFailPointが、フェイルポイントで一時停止しているスレッドがない状態で呼び出された際に、waitForPauseが無限にハングし続ける問題を修正しました。#103119 (Shaohua Wang) 。- 事前認証時の TCP Hello パケット内の文字列長を 64 KB に制限し、ハンドシェイク全体の時間を制限する
handshake_timeout_millisecondsサーバー設定を追加しました。これにより、未認証のクライアントが過剰なメモリを消費したり、スレッドを無期限に占有したりすることを防ぎます。 #103284 (Sema Checherinda). - Parquet ColumnIndex の統計情報で、String カラムにおいて min_value > max_value となる問題を修正しました。 #103334 (Saurabh Kumar Ojha).
- Native format のフラット化された Dynamic データの不正な形式をチェックするようにしました。 #103392 (Pavel Kruglov).
urlテーブル関数から_timeカラムを設定するようにしました。#103437 (Nikita Taranov) 。- SVE 命令が利用できない環境でも SVE 命令を使ってしまっていた SVE 検出を修正しました。#103568 (Raúl Marín) 。
ビルド/テスト/パッケージングの改善
- Libstemmer (Snowball) の依存関係で、より新しい v3.0.1 を使用するようになりました。#99256 (Jimmy Aguilar Mena) 。
- clickhouse-test で
use_skip_indexes_for_top_k、use_top_k_dynamic_filtering、query_plan_max_limit_for_top_k_optimizationの設定をランダム化。 #91782 (Nikita Fomichev). - 関数向けのストレステストを実装し、そのさまざまな特性の妥当性を検証するようにしました。 #93543 (Michael Kolupaev).
llvm-projectについて、upstream の設定を取り込む代わりに、独自の CMake 構成を提供。 #97453 (Konstantin Bogdanov).- クエリ最適化パスのカバレッジを高めるため、テストインフラストラクチャ内で
optimize_*設定のランダム化対象を増やしました。#97547 (Alexey Milovidov) 。 - Rust ツールチェーン nightly-2026-03-22 を使用。#98602 (Konstantin Bogdanov).
wasmtimev42.0.1 を使用しました。 #98603 (Konstantin Bogdanov).llvm-project22.1.1 を使用。 #98882 (Konstantin Bogdanov).- nightly のテスト単位カバレッジパイプラインで、
SANITIZE_COVERAGE(カスタムサニタイザーコールバック、シンボル単位の粒度) を LLVM のソースベースカバレッジ (WITH_COVERAGE,-fprofile-instr-generate -fcoverage-mapping) に置き換えました。サーバーは起動時に ELF セクションから自身のカバレッジマッピングを読み込み、新しいSYSTEM SET COVERAGE TEST 'name'コマンドを通じて、テストごとに(file, line_start, line_end)タプルを収集するようになりました。対象を絞った CIチェックでのテスト選定では、新しい CIDB テーブルchecks_coverage_linesに対する行範囲クエリを使用し、変更された差分行のうちどれだけをカバーしているかに基づいて候補テストをランク付けします。#99513 (Nikita Fomichev). - -O0 ビルドで発生する llvm-libc のリンクエラーを修正。 #100023 (Zheguang Zhao).
- 設定に
logger.logとlogger.errorlogの設定が含まれていない場合 (たとえば、すべてのログメッセージを STDOUT/STDERR に出力する想定のとき) に、コンテナ起動時に発生していた 2 件のエラーメッセージを修正しました。 #100239 (Simon). - macOS ビルドでは、Apple の
ld(cctools-port ld64) よりld64.lldを優先するようにしました。これにより、Darwin でのリンク時間が大幅に短縮されるはずです。cctools-port の ld64 は、-ffunction-sectionsと-dead_stripを使用すると非常に遅いためです。ld64.lldが利用できない場合は、ldにフォールバックします。 #100275 (Alexey Milovidov). - ディレクトリに機密情報が一切登録されないことを確認するテスト (REST + Glue) 。#100307 (Konstantin Vedernikov) 。
- 最近変更されたテストを、異なるランダム化設定で繰り返し実行するようにしました。#100385 (Alexey Milovidov).
- CMake で
#embedファイルの依存関係を追跡し、正しく再ビルドできるように ccache の depend mode を有効にしました。#100411 (Alexey Milovidov) 。 - TPC-Hクエリの正しさを検証するテストを追加しました。#100580 (Raufs Dunamalijevs) 。
aws-sdk-cpp1.11.771 を使用するようになりました。 #100582 (Konstantin Bogdanov).- 性能テスト用XMLから、
file属性を使って外部のSQLクエリファイルや設定を参照できるようになりました。#100747 (Raufs Dunamalijevs). LowerUpperImpl.hに不足していたTargetSpecific.hの include を追加し、-march=x86-64-v4でのコンパイルが通るようにしました。#100932 (Alexey Milovidov).- cxxflags に —no-default-config を追加し、Gentoo でのビルドを修正しました。#100973 (Isak Ellmer).
utils/auto-bisect/を追加しました。これはシェルベースの二分探索フレームワークで、ローカルでビルドしなくても、事前ビルド済みの CI バイナリをダウンロードし、ユーザー指定のテストスクリプトを実行して、リグレッションを引き起こした最初のコミットを特定できます。#100989 (Nikita Fomichev) 。- CMake では ThinLTO をデフォルトで無効化し、ローカルの開発者向けビルドで暗黙的に有効にならないようにしました。CI のリリースビルドは
-DENABLE_THINLTO=1を明示的に指定しているため、影響を受けません。#101041 (Alexey Milovidov). - 性能テストにTPC-DS SF1ベンチマークを追加。#101209 (Raufs Dunamalijevs) 。
- 以下を対象とする、MergeTree の論理削除向けステートレステストが追加されました:
has_lightweight_deleteフラグのライフサイクル、optimize_trivial_count_queryにおけるCOUNT(*)の正確性、MATERIALIZED/DEFAULTカラムの整合性、ReplicatedMergeTreeフラグの復元、削除済みの行に対するread_in_order、複数回の delete/merge サイクル、_row_existsカラムの隠蔽、さまざまな predicate、ALTER DELETEに対する RBAC の適用。#101792 (Nikita Fomichev). - タグ付きリリース向けに、ubuntu および alpine バリアントの Distroless Dockerイメージが公開されるようになりました。#101941 (Rahul Nair).
- スタックトレースには、ビルドディレクトリを含む煩雑なパス (例:
./ci/tmp/fast_build/./src/Common/Exception.cpp) ではなく、クリーンな相対パス (例:src/Common/Exception.cpp) が表示されるようになりました。 #102000 (Raúl Marín). - リポジトリにコミットされた 5 MB 超のファイルを拒否する CI の Style check を追加し、既存の正規のテストデータについてはホワイトリストで許可するようにしました。未使用の 14 MB の
zookeeper_log.parquetを削除しました。 #102080 (Raúl Marín) 。 - コンパイル時間を短縮するため、ヘッダファイルから未使用の
#includeディレクティブを約400件削除しました。#102585 (Raúl Marín) 。 wasmtimev43.0.1 を使用するようにしました。 #102603 (Konstantin Bogdanov).openssl3.5.6 を使用するようにしました。 #102606 (Konstantin Bogdanov).xz5.8.3 を使用。 #102607 (Konstantin Bogdanov).- distroless Docker image のベースを Debian 12 (glibc 2.36、OpenSSL 3.0) から Debian 13 (glibc 2.41、OpenSSL 3.5) へアップグレードし、CVE の影響範囲を縮小して、到達可能な脆弱性をゼロにしました。#101678 (Rahul Nair) 。
後方互換性を持たない変更
- アップグレード後にダウングレードすると、データが失われる可能性があります。データ型のシリアル化バージョンが、ネストされたデータ型にも伝播されるようになりました。たとえば、これまで String のシリアル化バージョン
with_size_streamは、最上位レベルの String カラムと Tuple の要素にのみ適用されていました。現在は、Array/Map/Variant/JSON/etc. など、任意のネストされた型の中にあるあらゆる String 型に適用されます。この動作は、現在デフォルトで有効になっている MergeTree settingpropagate_types_serialization_versions_to_nested_typesによって制御されます。この変更により、新しく作成されたデータパーツは古いバージョンでは読み取れなくなりますが、古いパーツは新しいバージョンでも問題なく読み取れます。アップグレードは安全ですが、ダウングレードは安全ではありません。26.3 へのアップグレード後にロールバックが必要になった場合、ネストされた型を持つカラムに 26.3 が書き込んだデータは読み取れなくなります! 詳細については #101429 を参照してください。#94859 (Pavel Kruglov). hypothesisスキップ索引タイプを削除しました。これは実用性が低く、実験的でわかりにくい機能でした。INDEX ... TYPE hypothesisを指定してテーブルを作成すると、今後はエラーになります。#96874 (Alexey Milovidov).- 実験的な
detectProgrammingLanguage関数を削除。#99567 (Alexey Milovidov) 。 - SQL 標準に合わせて
NOT演算子の優先順位を修正しました。これにより、NOTはIS NULL、BETWEEN、LIKE、および算術演算子よりも低い優先順位で結合されるようになりました。たとえば、NOT (x) IS NULLは、従来の(NOT x) IS NULLではなく、NOT (x IS NULL)として解析されるようになりました。これにより、従来の (標準に準拠していない) 動作に依存していたクエリの結果が変わる可能性があります。#97680 (Alexey Milovidov). - 通常のプロジェクションのメタデータを修正し、複数カラムのソートキーを持つプロジェクションが正しく認識されるようにしました。#90429 を踏まえた修正です。#91352 (Amos Bird).
- replace_long_file_name_to_hash 設定がスキップ索引ファイルで考慮されておらず、“File name too long” エラーが発生したり、長い名前の索引で索引の読み取りができなくなったりする問題を修正しました。スキップ索引のファイル名は、カラムファイルと同様に、max_file_name_length を超える場合にハッシュ化されるようになりました。この変更には後方互換性があります (新しいサーバーは古いパーツを読み取れます) が、ダウングレード時 (またはローリングアップグレード中の古いサーバー) には、長い名前の索引が無視される可能性があります。#97128 (Raúl Marín).
- デフォルトで非同期 INSERT が有効になりました。ClickHouse では今後、すべての小さな insert がデフォルトでバッチ処理されます。この設定は compatibility で指定します。
compatibility=<version less than 26.2>を設定した場合、デフォルト値は以前と同じfalseになります。非同期 INSERT は、users profiles の設定、session、query、または MergeTree table について、複数のレベルでオン/オフを切り替えられます。 #97590 (Sema Checherinda). mysql_datatypes_support_levelのデフォルト値が空からdecimal,datetime64,date2Date32に変更され、MySQL のDATEはDate32、DECIMAL/NUMERICはDecimal、精度付きのDATETIME/TIMESTAMPはDateTime64に、デフォルトで適切にマッピングされるようになりました。従来、MySQL のDATEカラムはDateにマッピングされていましたが、Dateは 1970-01-01 より前の日付を表現できないため、データ破損を引き起こしていました。#97716 (Alexey Milovidov).mergeTreeAnalyzeIndexes{,UUID}では、低速なregexpの代わりに、part 名の配列を受け付けるようになりました (実験的機能) 。#98474 (Azat Khuzhin) 。- 実行可能 UDF のデフォルトの
stderr_reactionをthrowからlog_lastに変更しました。stderr に警告を出力する UDF は、終了コードが 0 の場合は失敗しなくなりました。終了コードに関する例外には、stderr の内容が含まれるようになりました。#99232 (Xu Jia) 。
新機能
- MergeTree の Map カラム向けに、バケット化シリアライゼーションが追加されました (
map_serialization_version = 'with_buckets') 。キーはハッシュベースのバケットに分割されるため、単一のキー (m['key']) を読み取る際には、カラム全体ではなく 1 つのバケットだけを読めばよくなり、Map のサイズに応じて単一キーのルックアップが 2〜49 倍高速化されます。バケット数とバケット化の戦略は、新しい MergeTree 設定map_serialization_version、max_buckets_in_map、map_buckets_strategy、map_buckets_coefficient、map_buckets_min_avg_sizeで制御できます。#99200 (Pavel Kruglov) 。 - マテリアライズド CTE をサポートしました。クエリ実行中に CTE を一度だけ評価し、その結果を一時テーブルに格納できるようになりました。#53449 をクローズしました。 #94849 (Dmitry Novik).
- 互換性のため、
NOWなどの一部の SQL 標準関数を括弧なしで使えるようにしました。#52102 をクローズしました。#95949 (Aly Kafoury). - 自然順ソートキー関数は
naturalSortKey(s)として使えるようになりました。#90322 (Nazarii Piontko) 。 - JSONExtract関数で、ネイティブのJSON/Object入力を使用できるようになりました。#88370 をクローズ。#96711 (Fisnik Kastrati) 。
- クエリパラメータの型が
Nullableで、かつ指定されていない場合は、その値をNULLとみなします。 #93869 (Vikash Kumar). Replicateddatabase で補助的な ZooKeeper をサポート。 #95590 (RinChanNOW).- Map と同様に、JSON type でパスの存在を確認する
has関数をサポートしました。#96927 (DQ). mergeTreeTextIndex(database, table, index)テーブル関数が追加され、テキスト索引からデータを直接読み取れるようになりました。この関数は、内部情報の確認や、テキスト索引データに対する集計の実行に使用できます。#97003 (Anton Popov).table_readonlyMergeTree setting を追加し、テーブルを読み取り専用としてマークすることで、insert や変更を防止できるようにしました。#97652 (Alexey Milovidov) 。- 新しい設定
use_partition_pruningと、そのエイリアスであるuse_partition_keyを追加しました。これをfalseに設定すると、パーティションキーに基づくパーティションプルーニングが無効になります。 #97888 (Nihal Z. Miaji). - Icebergテーブルで
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')を実装しました。#97904 (murphy-4o) 。#99130 <protocols>内の各type=httpエントリで、別個の<http_handlers_*>設定セクションを参照するカスタム<handlers>キーを指定できるようになり、ポートごとに異なる HTTP ルーティングルールを設定できるようになりました。#98414 (Amos Bird) 。EXPLAINにpretty=1オプションを追加し、ツリー形式のインデント付き出力を可能にするとともに、compact=1でExpressionステップを折りたたんで、クエリプランをより読みやすくしました。#98500 (Kirill Kopnev) 。restore_access_entities_with_current_grantsサーバー設定を追加しました。有効にすると、バックアップから復元されたユーザー/ロールの権限は、復元を実行するユーザーが付与できる範囲に制限されるため、ACCESS_DENIEDで失敗せずに済みます (GRANT CURRENT GRANTSと同じセマンティクス) 。#98795 (pufit).- Unicodeのケースフォールディングおよび発音区別符号の削除のための
caseFoldUTF8関数とremoveDiacriticsUTF8関数を追加しました。#98973 (George Larionov) 。 - NFKC 正規化とケースフォールディングを組み合わせた NFKC_Casefold Unicode 正規化用の文字列関数
normalizeUTF8NFKCCasefoldを追加しました。#99276 (George Larionov) 。 - 全文検索用索引および
tokens関数向けに、unicode_wordトークナイザーを追加しました。これは Unicode の単語境界規則に基づいてテキストを分割します。ASCII の単語は接続文字 (アンダースコア、コロン、ドット、シングルクォート) を含めて構成され、非 ASCII の Unicode 文字はそれぞれ 1 文字のトークンになります。注: 26.3 ではこのトークナイザーはunicode_wordという名前でのみ受け付けられます。26.4 ではasciiCJKにリネームされました。#99357 (Amos Bird) 。 skip_unavailable_shardsが有効な場合に、通知なしでスキップできる利用不能な分片の数を制限するため、max_skip_unavailable_shards_numおよびmax_skip_unavailable_shards_ratio設定が追加されました。利用不能な分片の数または比率が設定したしきい値を超えた場合、不完全な結果をそのまま返す代わりに例外が発生します。#99369 (Alexey Milovidov).- ユーザーはサブクエリ式で
SOMEキーワードを使えるようになりました。動作はANYと同一です。#99842 (Artem Kytkin). - テキスト出力フォーマットで
FixedString値の末尾にあるヌルバイトを取り除くためのoutput_format_trim_fixed_string設定を追加しました。#97558 (NeedmeFordev). - FROM句で、括弧で囲まれたテーブルJOIN式 (例:
SELECT * FROM (t1 CROSS JOIN t2)) をサポートしました。#97650 (Alexey Milovidov) 。 - 関数
toDaysInMonthを実装しました。指定した日付が属する月の日数を返します。#99227 (Vitaly Baranov) 。
実験的機能
- WebAssembly ベースのユーザー定義関数 (UDFs) の実験的サポートを追加し、カスタム関数ロジックを WebAssembly で実装して ClickHouse 内で実行できるようになりました。Wasmtime バックエンドサポートへの貢献に対し、Alexey Smirnov に特別な謝意を表します。#88747 (Vladimir Cherkasov)。あわせて、WASM UDF サポートも段階的に改善されました。#99373 (Vasily Chekalkin)。
polyglotライブラリを使用した外部 SQL ダイアレクト のサポートを追加しました。#99496 (Alexey Milovidov)。ALP浮動小数点圧縮コーデックを追加しました (圧縮できない double に対する ALP_rd fallback はありません) 。#91362 (Nazarii Piontko)。JSONカラム向けの実験的な lazy 型ヒントを追加しました。allow_experimental_json_lazy_type_hintsで有効にすると、型ヒントの追加または変更のみを行うALTER TABLE ... MODIFY COLUMN json JSON(path TypeName)は、過去のデータを書き換えることなく、メタデータのみの操作として即座に完了します。型ヒントは古いパーツにはクエリ時に適用され、INSERT 時およびバックグラウンドマージ中に実体化されます。#97412 (tanner-bruce)。- YTsaurus テーブルエンジンからの並列読み取りを有効化しました。#97343 (MikhailBurdukov)。
パフォーマンス改善
- データレイクのパフォーマンスを改善しました。以前のバージョンでは、オブジェクトストレージからの読み取り時に、処理スレッド数に応じてパイプラインのサイズが調整されていませんでした。これにより、マルチコアマシンで大幅な性能向上 (約40倍) が得られます。#99548 (Alexey Milovidov).
- 現在、
enable_parallel_replicasとautomatic_parallel_replicas_modeの関係は次のとおりです。クエリで並列レプリカを使用できるのは、enable_parallel_replicas > 0の場合に限られます。さらに、automatic_parallel_replicas_mode=1の場合、並列レプリカを使用するかどうかは、あらかじめ収集された統計情報に基づいてプランニング時に決定されます。automatic_parallel_replicas_mode=0の場合は、統計情報に関係なく、サポートされているすべてのクエリで並列レプリカが使用されます。特筆すべき例外として、並列レプリカを使う分散 insert-select があります。この場合、クエリは常にautomatic_parallel_replicas_mode=0であるかのように実行されます。#97517 (Nikita Taranov). - 述語に任意の比較演算子 (
=,<,>,!=) が含まれ、かつパーティションキーが決定論的な関数チェーンで包まれている場合に、パーティションプルーニングを行えるようにしました (たとえば、PARTITION BY xでcityHash64(x) % 5 > 2、toYYYYMM(x) < 2026、toYYYYMM(x) = 2026、toYYYYMM(x) != 2026のような述語はいずれも、プルーニングにパーティションキーを使用します) 。#28800 をクローズしました。#98432 (Nihal Z. Miaji) 。 CASTの変換先の型がNullableで、かつ変換が単調である場合に、read-in-order 最適化と主キーのプルーニングを利用できるようになりました。たとえば、PRIMARY KEY xの場合、ClickHouse はORDER BY x::Nullable(UInt64)に対して read-in-order 最適化を使用でき、WHERE x::Nullable(UInt64) > 500000のような条件に対して主キーのプルーニングを適用できます。#98482 (Nihal Z. Miaji).- 整数型カラムが浮動小数点リテラルと比較される場合に、索引のプルーニングとフィルタのプッシュダウンが可能になりました。たとえば、
WHERE x < 10.5のような条件では主キーを使ったプルーニングが可能になり、prime < 1e9やnumber < 1e5のようなフィルタも、無制限に実行される代わりに、primes()およびnumbers()テーブル関数にプッシュダウンされるようになりました。#85167 をクローズしました。 #98516 (Nihal Z. Miaji). - メタデータの読み取りだけのためにファイルを再ダウンロードする必要をなくし、読み取り性能を向上させるため、Parquet メタデータ用の新しい SLRU cache が追加されました。#98140 (Grant Holly).
- オプティマイザの統計情報に基づき、ANTI、SEMI、FULL JOIN の左右を入れ替えられるようになりました。#97498 (Hechem Selmi) 。
- 大きな Polygon に対する
pointInPolygonの granule スキップを最適化し、主キーのプルーニング中にpointInPolygonの索引解析で例外が発生する問題を修正しました。#91633 (Nihal Z. Miaji) 。 levenshteinDistance関数の性能を改善。 #94543 (Joanna Hulboj).- 要素ごとの関数呼び出しを避けることで、バッチの Decimal 型変換を最適化しました。 #95923 (Konstantin Bogdanov).
- Icebergテーブルで、
iceberg_metadata_async_prefetch_period_msテーブル設定による非同期のメタデータプリフェッチがサポートされ、メタデータキャッシュを定期的に事前拡充できるようになりました。さらに、iceberg_metadata_staleness_msクエリ設定により、指定した古さのしきい値より新しい場合は、SELECTクエリでキャッシュ済みのメタデータを使用できるため、リクエスト処理中に Iceberg カタログを呼び出す必要がなくなります。#96191 (Arsen Muk). S3Queueの ordered mode では、プレフィックス全体の履歴を再度一覧取得するのを避けるために S3 ListObjectsV2 StartAfter を使用し、ListObjects の呼び出し回数を削減します。 #96370 (Venkata Vineel ).- insert の deduplication におけるメモリ使用量を削減。通常、deduplication には元の block が必要ですが、同期 insert ではこれを省略できるため、メモリを大幅に節約できます。 #96661 (Sema Checherinda).
- ハードコードされた 64 ではなく、cache line size にはアーキテクチャ固有の値を使用するようにしました。#97357 (Nikita Taranov).
- テキスト索引のDictionaryからの読み取りをわずかに最適化し、テキスト索引解析全体のパフォーマンスを改善しました。 #97519 (Anton Popov).
- ARM での 16 バイトブロックの
LZ4解凍を高速化しました。#97774 (Raúl Marín) 。 - SIMD と状態保持型トークナイザーをサポートするため、従来のイテレータースタイルの API を新しい高性能なインターフェイスに置き換え、トークン化処理をリファクタリングしました。#90268 の一部です。#97871 (Amos Bird)。
- 索引付きカラムと非索引カラムの両方を含む複合条件を持つクエリにおける、テキスト索引の索引解析のパフォーマンスを改善しました。従来、このようなケースでは、索引解析中の早期終了最適化が誤って無効になっていました。#98096 (Anton Popov).
- 非常に長い Array や map を生成する定数式を含むクエリのパフォーマンスを改善しました。 #98287 (Alexey Milovidov).
- 整数定数との比較時における
DateTime64主キーのキー条件解析を修正し、これまでグラニュールのプルーニングが行われなかった問題を解消しました。#98410 (Amos Bird). - 設定
optimize_syntax_fuse_functionsはデフォルトで有効になっています。#98424 (Alexey Milovidov) 。 - 集約状態を介した行ごとのストアフォワーディングではなくローカルアキュムレータを使用するように
avgWeightedaggregate function を最適化し、Nullable 入力で最大 27% の性能向上を実現しました。 #98793 (Antonio Andelic) 。 - 特定の状況における並列ウィンドウ関数や、大きな配列を扱う
arrayFoldワークロードで、性能を向上させ、メモリ使用量を削減します。これにより、影響を受けるクエリにおけるページフォールトの負荷が軽減され、厳しいメモリ制限下での安定性も向上する場合があります。#98892 (filimonov) 。 - ソート済みのマージ処理のパフォーマンスを改善しました。#99013 (Artem Zuikov) 。
INTERSECT ALLとEXCEPT ALLを最適化。#99097 (Raufs Dunamalijevs) 。- 逆順読み取りでの
read_in_order_use_virtual_row最適化をサポートしました。#99198 (Vladimir Cherkasov) 。 - 書き込み前に JoinUsedFlags が設定されているかどうかを確認することで、
RIGHTおよびFULLJOIN における cache の競合を低減しました。 #99274 (Hechem Selmi). - 浮動小数点演算を純粋な整数演算に置き換えることで
PrefetchingHelper::calcPrefetchLookAheadを最適化し、命令 cache のレイアウトを改善するとともに、集計ループ中のサイクルオーバーヘッドを削減しました。#99327 (Riyane El Qoqui). - ノードの子の保存に使用する
absl::flat_hash_setをCompactChildrenSetに置き換えることで、Keeper のメモリ消費量を削減しました。新しいコンテナーは、ヒープ割り当てなしで 0~1 個の子をインラインに格納でき、Keeper ノードの大半をこれでカバーできます。これにより、KeeperMemNodeのサイズは 144 バイトから 128 バイトに削減されます。 #99860 (Antonio Andelic). - 集約プロジェクションがビューでも正しくサポートされるようになりました。#32753 を修正しました。#88798 (Amos Bird) 。
join_use_nullsによる OUTER から INNER への join 変換の最適化をサポートしました。#90978 をクローズしました。#95968 (Vladimir Cherkasov) 。- 読み取り前にサイズを正しく計算することで、サブカラムの読み取りを改善しました。これにより、メモリ使用量が削減され、サブカラムの読み取りが高速化されます。#96251 (Pavel Kruglov).
- 短命な割り当て、つまりクエリやリクエスト向けの割り当てと、cache 向けのより長寿命な割り当てが混在した際のメモリ断片化を防ぐため、mark cache、非圧縮 cache、ページキャッシュがそれぞれ別個の jemalloc アリーナを使用するようにしました。#96812 (Seva Potapov). #98812. #99021
DELETE TTLルールが設定されたテーブルで、Vertical merge アルゴリズムを使用できるようになりました。#97332 (murphy-4o) 。- 分散索引解析時にデータスキッピングインデックスを適用します。 #97767 (Azat Khuzhin).
- セカンダリ索引のマークは、
prewarm_mark_cache設定が有効な場合にプリウォームされるようになりました (data part のフェッチ時およびテーブル起動時に、index mark cache に読み込まれます) 。#97772 (Anton Popov). - アクセス制御におけるロックを削減しました。 #97894 (Nikita Taranov).
- apply_row_policy_after_final または apply_prewhere_after_final が有効な場合、行ポリシーおよび PREWHERE の複合 AND 条件が分解され、主キーの索引解析のためにソートキーの各要素を抽出できるようになりました。以前は、遅延されたフィルタにソートキーに関する条件とソートキーに関係しない条件が混在している場合 (たとえば x > 1 AND y != ‘foo’) 、式全体が索引解析の対象外となっていました。現在は、ネストした AND 式であっても、ソートキーの条件 (x > 1 など) を抽出して Granule pruning に利用できるようになりました。#98513 (Yarik Briukhovetskyi).
- ロックを取得せずにタスクのリソースを解放できるようにし、MergeTreeBackgroundExecutor におけるロック競合を軽減しました。#93620 をクローズ。#98604 (Dmitry Novik).
- ArrowStream リーダーが先頭のバイト列を非常に大きなメタデータ長と誤認していたことにより、Arrow 以外のデータ (例: フォーマットを明示せずに
urlまたはfileから読み込む JSON) の読み込み時に、フォーマット自動検出で過剰なメモリ (約 514 MiB) を消費していた問題を修正しました。#98893 (Konstantin Bogdanov) 。
改善
- 同じカラム内に異なるGeo型が含まれているGeoParquetファイルを解析できるようになりました。 #97851 (Mark Needham).
- ワイルドカードの意味を考慮しつつ LIKE パターンをトークン化する
tokensForLikePatternSQL 関数を導入しました。%と_はワイルドカードとして扱い、エスケープされたワイルドカード (\%、\_) はリテラルとして扱い、エスケープされていないワイルドカードに隣接する token は破棄します。#97872 (Amos Bird). - S3 テーブルエンジンに
{_schema_hash}プレースホルダーを追加し、table のカラム定義のハッシュを S3 の path に挿入できるようにしました。 #98265 (Miсhael Stetsyuk). SymbolIndex、addressToSymbol、system.symbols、およびbuildIdは、Mach-O のシンボルテーブルをパースすることで、macOS でも利用できるようになりました。#99014 (Alexey Milovidov) 。system.stack_traceテーブルが macOS でも利用可能になり、サーバーのすべてのスレッドのスタックトレースを調査できるようになりました。#98982 (Alexey Milovidov).- LDAP クライアントがリファラルをたどるかどうかを制御する、サーバーごとの LDAP 設定オプション
<follow_referrals>(デフォルトはfalse) を追加しました。リファラル追跡を無効にすると、Active Directory のドメインルートのベース DN から検索する際に発生するタイムアウトやハングを回避できます。リファラル関連のログメッセージはwarnからtraceに変更されました。#96765 (paf91). - クエリ実行時に使用されたデータスキッピングインデックスを、query_log テーブルの
skip_indicesという新しいカラムで追跡するようになりました。#78676 を修正しました。元の著者は @pheepa です。#87862 (Grant Holly). - ACCESS_DENIED のヒントでは、ユーザーに必要なすべてのカラムを表示する権限がある場合を除き、カラム名は表示されなくなりました。データベース名とテーブル名は引き続きヒントに表示されます。 #91067 (filimonov).
- マージ負荷が高い場合のクリーンアップ遅延を防ぐため、MergeTree に専用のクリーンアップスレッドを追加しました。これにより #86181 が解決されます。#91574 (Amos Bird) 。
- いずれかのホストのIPではなく、ローカルサーバーのホスト名に対応するIPが変更された場合にクラスター設定を再読み込みするようにしました。これにより、#81215、#70156、および#65268を修正します。#93726 (Zhigao Hong) 。
- optimize_aggregators_of_group_by_keys により、GROUPING SETS クエリ内の集約関数を正しく最適化できるようになりました。#93935 (Xiaozhe Yu) 。
- Keeper-bench: メトリクスでエラーを報告し、—input-request-log モード用の JSON メトリクスファイルを生成します。#95748 (Mohammad Lareb Zafar).
- CREATE USER に新しい ROLE 句を追加しました。#97074 (Vitaly Baranov) 。
- Replicated database で作成されたクラスターに対して、internal_replication 設定を行えるようになりました。#97228 (Pervakov Grigorii) 。
- 新しい設定
allow_nullable_tuple_in_extracted_subcolumnsは、Tuple、Variant、Dynamic、JSONから抽出されたTuple(...)サブカラムをNullable(Tuple(...))(欠落した行ではNULL) として返すか、Tuple(...)(欠落した行ではデフォルトのタプル値) として返すかを制御します。デフォルトでは無効で、この設定を変更するにはサーバーの再起動が必要です。 #97299 (Nihal Z. Miaji). - 遅延フィルターに関する情報を、EXPLAINクエリの出力に別項目として追加 (Row Policies/PREWHERE とともに FINAL を使用する場合) 。関連: #91065。#97374 (Yarik Briukhovetskyi) 。
type_json_allow_duplicated_key_with_literal_and_nested_objectをデフォルトで有効にしました。これにより、元の JSON データ{"a" : 42, "a.b" : 42}を ClickHouse が{"a" : 42, "a" : {"b" : 42}}のような JSON に整形する場合でも、その JSON のパース時に重複キーに関するエラーを回避できます。#97423 (Pavel Kruglov).- Keeper の改善:
find_super_nodesは、Keeper でノード数が想定外に増加した際のデバッグに非常に役立つコマンドです。残念ながら、スーパーノードが複数ある場合、最初に見つかったスーパーノードの子ノードをたどるところでコマンドが無限に停止してしまうため、2 つ目以降を見つけるのはほぼ不可能でした。この PR では、スーパーノードの子ノードをたどれないようにしました。#97819 (pufit). clickhouse-keeper-clientの補完機能のサポートを開始。 #97828 (Konstantin Bogdanov).- クラッシュ時に、非同期ログバッファをフラッシュするようにしました。 #97836 (Azat Khuzhin).
impersonate機能がデフォルトで有効になりました (EXECUTE AS target_userを参照) 。#97870 (Vitaly Baranov) 。- SQLite table engine におけるクエリのキャンセルについて、KILL QUERY および clickhouse-client でのクエリキャンセル (Ctrl+C) を改善しました。#97944 (Roman Vasin).
- サーバー設定
jemalloc_profiler_sampling_rateを追加し、jemalloc のlg_prof_sampleを制御できるようにするとともに、非同期メトリクスjemalloc.prof.lg_sampleとして公開しました。#97945 (Antonio Andelic). - 同時実行の有界キュー実装で、重みのサポートを追加しました。#97962 (Daniil Ivanik).
- PostgreSQL の Dictionary ソースで、許可されるキーに
sslmodeを追加しました。これまでsslmodeは PostgreSQLDictionarySource.cpp のdictionary_allowed_keys許可リストに含まれていなかったため、PostgreSQL の Dictionary 接続で SSL モードを設定できませんでした。その結果、SSL を必須とする PostgreSQL サーバー (たとえば、デフォルトで SSL を強制する AWS RDS) に Dictionary から接続できず、接続時の TLS ネゴシエーションが失敗し、サーバーは暗号化されていないフォールバック接続を拒否していました。#98014 (mcalfin). - 紛らわしい一般的なメッセージではなく、存在しないファイルパスを
clickhouseまたはclickhouse-localに渡したときに、明確な「そのようなファイルはありません」エラーを表示するようにしました。#98048 (Raúl Marín). - テキスト索引を
Nullable([Fixed]String)およびArray(Nullable([Fixed]String))カラムに対して構築できるようになりました。#98118 (Jimmy Aguilar Mena). - Dictionary ソースの依存先である named collections が削除されないようにしました。#98127 (Pablo Marcos) 。
- totals を伴うクエリで
grace_hashjoin アルゴリズムを有効にしました。#98144 (János Benjamin Antal) 。 - 通常の shared merge tree における DROP DATABASE で、バックグラウンドマージを早い段階でキャンセルするようにしました。 #98161 (Shaohua Wang).
- MongoDB と MySQL のクエリのキャンセルが、clickhouse-client での KILL QUERY とクエリのキャンセル (Ctrl+C) によって改善されました。#98187 (Roman Vasin) 。
- NetlinkMetricsProvider を削除し、スレッドごとの taskstats メトリクス収集には procfs のみを使用するようにしました。Netlink ベースの収集はコンテナー化環境では問題があり、競合時のテールレイテンシも悪化します。#98229 (Amos Bird).
- マニフェストファイルのキャッシュに関する問題を修正するため、Iceberg マニフェストファイルの処理をリファクタリングしました。 #98231 (Daniil Ivanik) 。
- これにより、テーブルのソートキーが
toDate(time)のような式である場合も考慮されるようになり、そのような式がフィルタの一部であれば、評価を遅延させないように判断できるようになりました。 #98237 (Yarik Briukhovetskyi). - ZooKeeper の ephemeral lock znode に割り当てられた sequential 番号の最大値を示す、新しい
MaxAllocatedEphemeralLockSequentialNumberメトリクスを追加しました。#98243 (Miсhael Stetsyuk). - ClickStackをバージョン 2.20.0 に更新。 #98252 (Aaron Knudtson).
- マルチリクエスト内の各サブリクエストを個別にカウントする新しいプロファイルイベント
KeeperRequestTotalWithSubrequestsが追加され、実際の Keeper ワークロードの可視性が向上しました。既存のKeeperRequestTotalイベントは、引き続き各マルチリクエストを1件のリクエストとしてカウントします。#98348 (Antonio Andelic) 。 SYSTEM RELOAD DICTIONARIESは、ほかのディクショナリをソースとするディクショナリが、再読み込み後に最新のデータを参照できるよう、ディクショナリをトポロジカル順序で再読み込みするようになりました。 #98356 (Alexey Milovidov) 。- MergeTree setting の変更後に、統計 cache を再起動するようにしました。#98520 (Han Fei) 。
- 接続可能な”alive”レプリカのみが分散索引解析に参加します。 #98521 (Azat Khuzhin) 。
- SQL で定義されたユーザーに対して、config で定義された設定プロファイル (
defaultプロファイルを除く) の使用を禁止する設定access_control_improvements.disallow_config_defined_profiles_for_sql_defined_usersを追加しました (デフォルトでは無効) 。 #98662 (Alexander Tokmakov). - 自動並列レプリカのヒューリスティックで使用するノード数の上限を、
max_parallel_replicas設定だけでなく、クラスター内の実際のノード数にも合わせるようにしました。 #98668 (Nikita Taranov). - 分散索引解析向けに、ヘッジリクエストと非同期読み取りを実装。 #98724 (Azat Khuzhin).
- バイナリの
AggregateFunction状態のデシリアライゼーションでは、入力全体を最後まで消費することが必要になりました。余分な不要バイトが末尾に存在する場合、ClickHouse は不正な状態データを受け入れるのではなく、例外をスローするようになりました。#98786 (Nihal Z. Miaji). - TRUNCATE DATABASE がクエリのキャンセルに対応するようになりました。#98828 (Shaohua Wang) 。
keeper-benchに、リクエストのパイプライン化、ウォームアップ期間、操作ごとの統計、再現性のあるシード、より適切なエラー処理を追加して改善しました。#98906 (Antonio Andelic).- 分散索引解析でのSAMPLE句をサポート。 #98931 (Azat Khuzhin).
- クエリが空の結果を返した場合やエラーが発生した場合でも、ダッシュボードにチャートのタイトルを表示するようにしました。 #98975 (Yash ).
- アナライザのエラーメッセージで、テーブルのすべてのカラムを出力しないようになりました (これにより 150KB 超の例外が発生する可能性がありました) 。カラム一覧は現在 10 エントリまでに制限されています。#99002 (Yash ).
- JOIN を含むサブクエリからカラム統計を適切に返すようにし、親クエリがそれを JOIN の並べ替えに利用できるようにしました。 #99096 (Alexander Gololobov).
- 終了処理の開始時に、送信スレッドの終了を待たず、ZooKeeper セッションを即座に期限切れとしてマークするようにしました。これにより、ほかのスレッドは遅滞なく新しいセッションを確立できます。 #99102 (Raúl Marín).
- LLVM-libc の数学関数の利用範囲を拡大しました:
exp,exp2,expm1,fabs,fabsl,floor,fmodl,log,log2,logf,pow,scalbn,scalbnl,copysignl,nan,nanf,nanl、およびexplogxfの共有定数。 #99118 (Konstantin Bogdanov). system.jemalloc_profile_textの collapsed フォーマットにおけるメモリ使用量を削減し、出力が重複する可能性がある問題を修正しました。 #99121 (Antonio Andelic).system.aggregated_zookeeper_logにis_subrequestカラムを追加し、スタンドアロンのリクエストと Multi/MultiRead リクエスト内のサブリクエストを区別できるようにしました。これまでは、サブリクエストはスタンドアロンのリクエストと同じバケットに集計されており、各サブ操作が multi-request 全体の所要時間で記録されていたため、平均レイテンシが実態を反映しないものになっていました。現在、サブリクエストのレイテンシは 0 になります。#99169 (Miсhael Stetsyuk).- カラムの型を指定しなくても
ALTER TABLE MODIFY COLUMN x TTL ...コマンドを実行できるようになりました。#99208 (Nikolay Degterinsky). - すでに切断されたセッションに対する古い Keeper リクエストをスキップし、不要な Raft のラウンドトリップを回避します。追跡する完了済みセッション数の上限は、協調設定
max_finished_sessions_cache_sizeで定められます。#99246 (Antonio Andelic) 。 IN演算子で、mapValues(map)に基づくテキスト索引をサポート。 #99286 (Anton Popov).- clickhouse keeper-client でシェル風補完をサポート (引用符付き引数、つまり
'foo ba'の補完や、エスケープされた引数、つまりfoo\ baの処理に対応し、空白を含むノードはlsで引用符付きで出力するようにしました) 。 #99312 (Azat Khuzhin). - ロック競合により Keeper の
mntrコマンドがハングするのを防ぐようにしました。#99472 (Antonio Andelic) 。 - mutex のスコープ外でコールバックの呼び出しと読み取りリクエストのディスパッチを行うことで、Keeper ディスパッチャのロック競合を低減し、オブザーバビリティ向けにプロファイル対応のロックガードを追加しました。#99751 (Antonio Andelic).
- Parquetファイルの最後のblockの末尾でパディングが欠けていても許容する。 #99857 (Seva Potapov).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 完全修飾されていない場合に、Alias table のターゲットが DDL 依存関係として保存される際の扱いを修正しました。これにより、session database ではなく Alias table の database に保存されるようになりました。 #95175 (Enric Calabuig).
- ALIASカラムのサブカラムの読み取り時に発生する誤った結果や例外を修正しました。#95408 (Pavel Kruglov) 。
- 旧アナライザで、JOIN に非標準の識別子エイリアスを使用した場合にカラムが見つからない問題を修正。 #25594、#47288、および #53263 を修正。 #95679 (Zhigao Hong).
- 空の引数が渡された際に、Kusto dialect の関数
bin(),bin_at(),extract(),indexof()で発生するクラッシュを修正しました。#95736 (NeedmeFordev) 。 - clickhouse-client で、local filesystem 上のデータレイクや LocalDisk で使用される可能性がある local_object_storage を、user_files_path 以外の場所にマウントすることを禁止しました。 #96201 (Daniil Ivanik).
DeltaLakeテーブルエンジンで、snapshot version の変更時に発生する論理的なレースコンディションを修正し、冗長で負荷の高い snapshot の再読み込みを削除しました。#96226 (Kseniia Sumarokova) 。- Detach と Attach の間に複数回のリネームが連鎖的に行われた場合に、MergeTree でパートを Attach する際に発生する論理エラーを修正しました。 #96351 (Alexey Milovidov).
- 同一のリクエストで
compatibilityとともに送信された明示的な設定が、その値が server のデフォルト値と一致している場合に、黙って無視されることがあった不具合を修正しました。#97078 (Raufs Dunamalijevs). - 並列パースを伴う
INSERTで無効なデータに遭遇した際、実際のパースエラー (正しい行番号付き) ではなくNETWORK_ERRORを報告してしまうクライアントの問題を修正しました。 #97339 (Alexey Milovidov). Nullable(Tuple)の導入後、sumCount集約関数が古いシリアライズ済み状態を読み取れなくなっていた問題を修正しました。#97370 をクローズします。#97502 (Nihal Z. Miaji).Nothing型の要素 (例:NULLのタプル要素との比較) を含むタプル比較をGROUPING SETSおよびORDER BYと併用した際に発生する例外を修正しました。 #97509 (Alexey Milovidov).- 複数の圧縮コーデック使用時に Compact MergeTree パーツで
uncompressed_hashが非決定論的に計算される問題を修正しました。これにより、重複排除が誤動作する可能性がありました。 #97522 (Alexey Milovidov). - shared data 内で JSON と buckets を使用した INSERT SELECT の際に stream が欠落する論理エラーを修正しました。#97331 をクローズしました。 #97523 (Pavel Kruglov).
- SummingMergeTree および CoalescingMergeTree のマージ時に、
MEMORY_LIMIT_EXCEEDED例外が誤ってCORRUPTED_DATAとして報告される不具合を修正しました。#97537 (János Benjamin Antal) 。 url()のようなテーブル関数を含む相関サブクエリで発生する “Context has expired” 例外を修正しました。#97544 (Alexey Milovidov).- 集約プロジェクション、Date型、およびカラム名の保持に関する
optimize_syntax_fuse_functionsの例外と誤動作を修正しました。#97545 (Alexey Milovidov). - regexp が一致しない場合に誤った結果を返していた、
replaceRegexpOneからextractへの誤ったクエリの書き換えを削除しました。あわせて、replaceRegexpOneをGROUP BY ... WITH CUBEおよびgroup_by_use_nulls=1と併用した場合に発生する例外も修正しました。#97546 (Alexey Milovidov). - クエリが強制終了された際に、
database_atomic_wait_for_drop_and_detach_synchronouslyを指定したDROP DATABASEが無期限にハングする問題を修正しました。#97586 (Alexey Milovidov). KILL QUERYで、WITH FILLの生成処理、dictGetによる Dictionary の読み込み、またはReplicatedMergeTreeでmutations_sync=1を指定したALTER DELETEで処理が止まったクエリを終了できない問題を修正しました。#97589 (Alexey Milovidov).loopテーブル関数はinner_storage->read()を直接呼び出していたため、行ポリシー、カラムレベルの権限、その他のセキュリティチェックが適用されるインタープリタ層をバイパスしていました。その結果、行ポリシーで制限されているユーザーでも、直接 SELECT を実行すると 0 行しか返らない場合であっても、loop(table)経由ですべての行を読み取ることができていました。#97682 (pufit).toDate()関数の使用時に、epoch以前の DateTime64 に対するパーティションプルーニングが正しく行われない問題を修正しました。#97746 (Yarik Briukhovetskyi) 。- このパッチ適用後は、data part set 内により大きいパーティション ID を持つ別のパーティションが存在する場合、
hasPartitionIdは false を返すようになります。#97748 (Mikhail Artemenko). - JSON の高度な共有データにおいて、空のグラニュールの読み取り時に発生し得るクラッシュを修正しました。#97563 をクローズします。#97778 (Pavel Kruglov).
DROPとINSERTの競合によって、DistributedへのINSERT時に発生するCannot schedule a fileLOGICAL_ERRORを修正しました。#97822 (Azat Khuzhin).tokenbf_v1スキップ索引を使用したmapContainsKey/mapContainsKeyLikeの呼び出し時に発生する ClickHouse server のクラッシュやアサートを修正しました。#97826 (Shankar Iyer) 。concatWithSeparator、format、INサブクエリ、GLOBAL IN、およびランタイムフィルタを使用する JOIN において、複合型 (Variant、Dynamic、Tuple) 内のLowCardinalityが原因で発生するLOGICAL_ERROR例外を修正。 #97831 (Raúl Marín).GROUP BYと組み合わせて、複数の分散テーブルに対するmerge()テーブル関数でARRAY JOINを使用した際に発生するLOGICAL_ERROR例外Chunk info was not set for chunk in MergingAggregatedTransformを修正しました。#97838 (Raúl Marín).- 高い並行性で接続グループのハード上限に達した際に、HTTP 接続プールのデストラクタ内で未捕捉例外が発生し、サーバーがクラッシュ (
std::terminate) する問題を修正しました。接続を接続プールに戻す際に、例外HTTP_CONNECTION_LIMIT_REACHEDが~PooledConnectionから外に漏れ、SIGABRTを引き起こす可能性がありました。 #97850 (Antonio Andelic). grace_hashアルゴリズムを非等値 JOIN で使用し、JOIN 結果のサイズ制約により左側の block を最後まで処理できない場合に、誤った結果が返される不具合を修正しました。 #97866 (János Benjamin Antal).- #96686 で導入された Delta Lake メタデータのスキャンにおけるパフォーマンス上の非効率を修正しました。#97880 (Kseniia Sumarokova).
- ZooKeeperクライアントの sendThread と receiveThread 間のデータ競合を修正しました。#97887 (Pablo Marcos) 。
- distributed insert select で CTE を使用できない不具合を修正しました。https://github.com/ClickHouse/ClickHouse/pull/87789 の続きです。#95837 をクローズしました。#97889 (Yarik Briukhovetskyi).
CachedOnDiskReadBufferFromFile::readBigAtで発生する例外を修正しました。#97325 をクローズしました。#97890 (Kseniia Sumarokova).- カラムの不一致により、
Aliasエンジンでマテリアライズドカラムを使用した際に発生するLOGICAL_ERROR例外を修正しました。#97907 をクローズしました。#97921 (Kai Zhu). - ログストレージに
s3_plainメタデータを使用して Azure Blob Storage を利用する際、再起動後に Keeper のデータが失われる問題を修正しました。#97987 (Antonio Andelic). sign関数で、Int8よりビット幅の大きい整数型に対する JIT の誤コンパイルを修正しました。これにより、-128..127 の範囲外の値で誤った符号を返す可能性がありました。#98012 (Alexey Milovidov).- 列名にドットを含む struct フィールド (例:
STRUCT<`a.foo`: STRING, `b.foo`: STRING>) を持つ Delta Lake テーブルを、カラムマッピング “name” モードで読み取る際に発生していたDUPLICATE_COLUMN例外と、NULL が黙って返される問題を修正しました。 #98013 (Caio Ishizaka Costa). - 論理更新およびセカンダリ索引の後に実行される mutation の不具合を修正しました。 #98044 (Raúl Marín).
- 主キーと非主キーのスキップ索引を混在させた場合に、FINALクエリで誤った結果が返される問題を修正しました。 #98097 (Raúl Marín).
- scalar file() および DESCRIBE TABLE file() に対して、READ ON FILE チェックを適用。 #98115 (Nikolay Degterinsky).
- glob パターンを使ってファイルをクエリした際 (例:
file('dir/**', 'LineAsString')) 、ディレクトリにダングリングシンボリックリンクが含まれていると、未処理のファイルシステム例外 (STD_EXCEPTION) が発生してクラッシュしていた問題を修正しました。現在はダングリングシンボリックリンクを黙ってスキップし、有効なすべてのファイルから結果を返すようになりました。#98143 (Mark Andreev). - フィルタ式で
arrayJoinを使用して outer join を inner join に変換する際に、クエリプランの最適化で発生するセグメンテーションフォルトを修正しました。#98147 (Alexey Milovidov) 。 - メッセージ間で読み取り状態がリセットされないことにより、
ProtobufListフォーマットが Kafka エンジンで動作しない問題を修正しました。 #98151 (Alexey Milovidov). - analyzer_compatibility_join_using_top_level_identifier および ARRAY JOIN に関する論理エラーを修正し、#98164 をクローズしました。#98179 (Vladimir Cherkasov) 。
aggregated_zookeeper_logで、空のままになっていた watch レスポンス用のWatch部分を設定しました。#98202 (Antonio Andelic).- パーティションキーのキーカラムがソートキーに含まれていない場合、パーティションプルーニングによって、FINAL での重複排除時に本来”勝つ”べき行を含むパーティションが誤ってスキップされる可能性がありました。 #98242 (Yarik Briukhovetskyi).
- 定数 Array 引数を指定して
kql_array_sort_asc/kql_array_sort_descを呼び出した際に発生していた論理エラー “Bad cast from type DB::ColumnConst to DB::ColumnArray” を修正しました。#98251 (Alexey Milovidov). extremes = 1が有効な場合にクラッシュを引き起こす可能性があったColumnConst::getExtremesの範囲外アクセスを修正しました。 #98263 (Alexey Milovidov).- 同じ一対のテーブル間で逆方向に実行される 2 つの同時実行
MOVE PARTITION操作で発生する可能性があるデッドロックを修正しました。 #98264 (Alexey Milovidov). - HTTPサーバーは、不正なヘッダーが原因で発生する 400 Bad Request レスポンスに対して、空のボディではなくレスポンスボディにエラーメッセージを返すようになりました。#98268 (Alexey Milovidov).
- 分散索引解析 (実験的機能) およびクエリ条件キャッシュで誤った結果が返される問題を修正しました。#98269 (Azat Khuzhin).
- 65535 の境界をまたぐデータを含むキーカラムに対する
toDate変換で発生していた LOGICAL_ERROR 例外 “Invalid binary search result inMergeTreeSetIndex” を修正しました。#98276 (Alexey Milovidov) 。 query_plan_join_swap_table最適化により、CROSS JOIN で囲まれた RIGHT JOIN がレガシー join step のコードパスで入れ替えられた際に発生するLOGICAL_ERROR例外を修正しました。#98279 (Alexey Milovidov)。- 破損した
quantilesDD集約関数の状態の読み取り時に、セグメンテーション違反、例外、無限ループ、OOMを防ぐため、DDSketchのデシリアライズ時に破損データを検証するようにしました。 #98284 (Alexey Milovidov). - 外側のクエリの相関カラムが
arrayMapなどのラムダ関数内で参照された際に発生する LOGICAL_ERROR “Trying to execute PLACEHOLDER action” を修正しました。 #98285 (Alexey Milovidov). CASE式にmaterialize(NULL)またはその他のNullable(Nothing)型の引数が含まれる場合に、caseWithExpressionで発生していた論理エラー例外を修正しました。#98290 (Alexey Milovidov) 。mergeテーブル関数で_table仮想カラムをフィルタリングする際に発生する bad cast 例外を修正しました。#98291 (Alexey Milovidov) 。blocks/とdeduplication_hashes/の ZooKeeper ディレクトリ間でクリーンアップ順序に不整合があったため、再挿入が誤って重複排除されてしまう散発的な重複排除の不具合を修正しました。 #98293 (Alexey Milovidov).ORDER BY ... WITH FILLをLIMIT BYと併用した場合に発生する例外を修正しました。#98361 (Alexey Milovidov) 。- Parquet/Arrow の
DateカラムをEnumカラムに挿入した際に発生していた、検知しにくいデータ破損を修正しました。これにより、不正な enum 値を保存する代わりに、互換性のない型変換を適切に拒否するようになりました。#98364 (Alexey Milovidov). Arrayカラムを含む Arrow ファイルを、Nestedカラムを持つテーブルに読み込む際に発生する例外を修正しました。#98365 (Alexey Milovidov).- 索引またはプロジェクションがミューテーションの完了前に削除された場合に、
MATERIALIZE INDEXおよびMATERIALIZE PROJECTIONのミューテーションが停止したままになる問題を修正しました。#98369 (Alexey Milovidov). - Tuple 要素名が Nullable の
nullサブカラムと衝突する場合に、Nullable(Tuple(...))の読み取り時に発生する例外を修正しました。#98372 (Alexey Milovidov). Mergeテーブル (Distributedテーブルをラップしたもの) を別のテーブルと結合する際に発生する例外 “Column … query tree node does not have valid source node” を修正しました。#98376 (Alexey Milovidov) 。- 文字列表現ではなく生のバイト列を生成していた、native V3 リーダーでの Parquet
BoolからFixedStringへの誤った変換を修正しました。#98378 (Alexey Milovidov) 。 tryGetColumnDescriptionを修正し、他のカラムのルックアップメソッドとの整合性が取れるよう、親カラムの種類に基づいてサブカラムを絞り込むようにしました。#98391 (Alexey Milovidov).- HTTP Basic認証で、パディングなしのBase64認証情報を受け入れるようにしました。一部のHTTPクライアントは
Authorization: Basicヘッダーの末尾の=パディングを省略するため、これまでは認証に失敗していました。#98392 (Amos Bird). - 誤った min-max 索引の境界値が原因で、
Nullableなパーティションキーカラムを含むパーツのマージ後にパーティションプルーニング結果が誤る問題を修正しました。#98405 (Amos Bird). - パイプラインエグゼキュータでまれに発生する例外を修正しました。この例外は、パイプラインの拡張とクエリのキャンセルが競合した際に、
Received signal 6として現れることがありました (デバッグビルド時のみ) 。#98428 (Alexey Milovidov) 。 count_distinct_optimizationをQUALIFY句とともに使用した際に発生する例外 “Column identifier is already registered” を修正しました。 #98433 (Alexey Milovidov).IN/NOT INでLowCardinalityカラム引数を使用した際に発生する例外 “cannot be inside Nullable type” を修正しました (例:aがLowCardinality(String)の場合のa NOT IN (b)) 。#98443 (Alexey Milovidov).FilterBySetOnTheFly最適化によってMergeJoinTransformとの循環依存が生じた際、PingPongProcessorでデッドロックが発生し、full_sorting_mergeJOIN で “Pipeline stuck” 例外が発生する不具合を修正しました。 #98454 (Alexey Milovidov).- 有効期限 (TTL) によってすべての行が削除されるパーツのマージ時に、定数の
GROUP BYキーを持つ集計プロジェクションで発生するLOGICAL_ERROR例外 “Projection cannot increase the number of rows in a block” を修正しました。#98458 (Alexey Milovidov). CROSS JOINをINNER JOIN USINGと併用した際に発生する logical error 例外を修正しました。#98459 (Alexey Milovidov).- キー引数が
Nullableの場合にdictGetOrDefaultで発生するヌルポインタ逆参照を修正しました。 #98460 (Alexey Milovidov). - 集約プロジェクション使用時に、
materializeによりクエリとプロジェクションでLowCardinality型の違いが生じる場合に発生していたDISTINCTクエリの例外を修正しました。#98462 (Alexey Milovidov) 。 - OUTER JOIN と
join_use_nullsが有効な場合に、arrayJoinをフィルタ式内で使用すると発生する LOGICAL_ERROR 例外を修正しました。#98464 (Alexey Milovidov) 。 optimize_aggregation_in_orderと並列レプリカを併用した際に発生する論理エラー例外 “Replica decided to read in WithOrder mode, not in ReverseOrder” を修正しました。#98467 (Alexey Milovidov) 。addWatchリクエスト後に ClickHouse Keeper が Java ZooKeeper クライアントを切断してしまう問題を修正しました。Java クライアントはaddWatchレスポンスに 4 バイトのErrorResponseボディが含まれることを想定していますが、Keeper は空のボディを返していたため、EOFExceptionとセッション切断が発生していました。これにより、Apache Curator のCuratorCacheや永続ウォッチを使用するあらゆる Java アプリケーションが正常に動作しなくなっていました。#98079 を修正しました。 #98499 (Antonio Andelic).- フォロワーがダウンした際に、
zk_followersおよびzk_synced_followersの Keeper メトリクスが減少しない問題を修正しました。mntrfour-letter-word コマンドに、新たにzk_learnersおよびzk_synced_non_voting_followersメトリクスを追加しました。#54173 を修正。#98504 (Antonio Andelic) 。 - MergeTreeトランザクション利用時に、
TRUNCATE TABLEとOPTIMIZE TABLEが同時実行された際に発生する可能性があったrenameAndCommitEmptyPartsの LOGICAL_ERROR 例外を修正しました。 #98508 (Alexey Milovidov). - Keeper のセキュアな raft ポートが
openSSL設定のcipherListとdhParamsFileを無視し、ユーザー指定の値ではなく常にデフォルト値を使用していた問題を修正しました。#51188 をクローズしました。#98509 (Antonio Andelic). - 「Receiving request for session X took 9963 ms」のような誤解を招く Keeper のログメッセージを修正しました。ここで報告されていた時間は、実際に処理にかかった時間ではなく、ハートビートの合間に
poll()内で idle のまま待機していた時間でした。#79026 を修正しました。#98510 (Antonio Andelic). - read_in_order_use_virtual_row と単調関数で予期しない結果を返す問題を修正し、#97837 をクローズしました。#98514 (Vladimir Cherkasov).
- MergeTree テーブルで
INサブクエリとともにPREWHEREを使用した際に発生していたLOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'を修正しました。#98522 (Alexey Milovidov). - シャットダウンシグナルに応答せず、サーバーの正常なシャットダウンを妨げていた Keeper の TCP 接続を修正しました。 #98525 (Alexey Milovidov).
query_plan_merge_expressions = 0でquery_plan_convert_join_to_inが有効な場合に発生する例外 “Sorting column wasn’t found in the ActionsDAG’s outputs” を修正しました。#98526 (Alexey Milovidov) 。- named collections 使用時に失敗する MongoDB Dictionary ソースを修正しました。#97840 をクローズしました。#98528 (Pablo Marcos) 。
- パラメータ置換後に Identifier が空になった場合に発生していた LOGICAL_ERROR を修正しました。#98530 (Pervakov Grigorii).
- ウィンドウ関数と組み合わせて
sort_overflow_mode = 'break'を使用した際に発生するパイプラインのデッドロックを修正しました。#98543 (Alexey Milovidov) 。 - 新しいブロックの追加中に例外が発生した際の、Bufferエンジンにおけるカラムのロールバック処理を修正しました。従来のロジックでは、カラムのインメモリ状態が破損するおそれがありました。#98551 (Pavel Kruglov).
- const の
DynamicまたはVariantカラムとNULLを用いた null-safe 比較 (<=>/IS NOT DISTINCT FROM) で発生していた例外Bad cast from type ColumnConst to ColumnDynamicを修正しました。あわせて、Dynamic/VariantとNULLの比較でIS DISTINCT FROMが常に誤って 0 を返していた問題も修正しました。#98553 (Alexey Milovidov). - テキスト索引を他のスキップ索引と併用した場合の不具合を修正しました。以前は、クエリのフィルターでテキスト索引と通常のスキップ索引を同時に使用すると、“Trying to get non-existing mark” のような論理エラーが発生することがありました。#98555 (Anton Popov).
- 同じクエリスコープ内でエイリアス付きの table function が複数回出現する場合 (たとえば
PREWHERE句とQUALIFY句の両方) に発生する論理エラー “TABLE_FUNCTION is not allowed in expression context” を修正しました。 #98557 (Alexey Milovidov). - PK 内の式 (カラムだけでなく) に対する分散索引解析を修正 (これにより、リモートレプリカ上の冗長なグラニュールがまったくフィルタリングされない状態になっていた) 。 #98561 (Azat Khuzhin).
- サブカラムが他のカラムの default/alias 式で使用されている場合、そのカラムの削除を禁止し、ALTER DROP COLUMN のデフォルト式でアナライザを使用するようにしました。#98569 (Nikita Mikhaylov).
- HTTP クライアントで、再試行できないエラー (
HTTP_CONNECTION_LIMIT_REACHEDを含む) でも S3 リクエストが誤って再試行されていた問題を修正しました。#98598 (Sema Checherinda) 。 - DateTime64 でパーティションプルーニングを行う際に発生する decimal のオーバーフローを修正しました。#98628 (Yarik Briukhovetskyi).
- JIT 式コンパイルにおける 2 件の不具合を修正しました。1 件目は、
nativeCastの型チェックにあったコピー&ペーストミスにより、整数から整数、および浮動小数点数から浮動小数点数への cast の分岐が到達不能になっていた問題です。2 件目は、LLVMPassBuilderに誤ってnullptrの TargetMachine が渡されていたため、ターゲット固有の最適化パスが登録されなかった問題です。#98660 (Alexey Milovidov). SHOW_COLUMNS権限がなくても、localhost を指すremote()、remoteSecure()、cluster()、またはclusterAllReplicas()を介して任意のテーブルに対して DESCRIBE を実行できてしまう RBAC バイパスを修正しました。#98669 (pufit).- フィルタープッシュダウン最適化によって共有 DAG ノードが破損し、非ブール式 (例:
sin(col)) を JOIN を伴う WHERE と SELECT の両方で使用した際にBAD_GET例外や誤ったクエリ結果が発生する問題を修正しました。#98681 (Alexey Milovidov) 。 - 並列レプリカ使用時に
read_in_order_through_joinを使うと発生する LOGICAL_ERROR “Replica decided to read in Default mode, not in WithOrder” を修正しました。#98685 (Alexey Milovidov) 。 remoteの引数としてinputテーブル関数を使用したときに発生する例外 “Bad cast from typeDB::TableFunctionNodetoDB::QueryNode” を修正しました。#98694 (Alexey Milovidov) 。- 空の covering parts を誤ってクリーンアップしたことが原因で発生していた、古い data parts の復活を修正しました。 #98698 (Shaohua Wang).
equals比較でブール関数がVariant型を返す場合に、LogicalExpressionOptimizerPassで例外が発生する不具合を修正しました。#98712 (Alexey Milovidov).parseDateTimeBestEffortが、月名/曜日のプレフィックスで始まる単語を誤ってパースする不具合を修正しました。#97965 をクローズします。#98742 (Pavel Kruglov).- 新しいアナライザを有効にした状態で、異なるパラメータ (例: 異なる
SKIPフィールド) を持ち、JSON のサブパスを参照する ALIAS カラムを含む JSON カラムを持つテーブルに対して、merge()テーブル関数またはMergeエンジンでクエリを実行した際に発生するUNKNOWN_IDENTIFIER例外を修正しました。#97812 をクローズします。#98753 (Pavel Kruglov). View内でDistributedストレージが使用されている場合の、アナライザでのoptimize_skip_unused_shards最適化を修正しました。#98754 (Nikolai Kochetov) 。clickhouse-clientの--externalで渡される外部テーブルについて、名前指定によるタプルのサブカラムアクセス (例:Tuple(a UUID, b Int32)に対するSELECT x.a) を修正しました。#96925 をクローズしました。#98755 (Pavel Kruglov) 。- 不正な (途中で切れた) UTF-8入力に対して
reverseUTF8が例外を発生させる問題を修正しました。 #98770 (Alexey Milovidov). - 偽値との OR (すなわち or(x, 0)) 述語がある場合に、set スキップ索引の有用性を正しく検出できない問題を修正しました。#98776 (Azat Khuzhin) 。
FINAL+PREWHERE+ 定数のWHERE式 +count()のようなカラムに依存しない集約関数の組み合わせで発生しうるLOGICAL_ERROR例外 (removeUnusedColumnsでのBlock structure mismatch) を修正しました。#98778 (Alexey Milovidov) 。- ClickHouse辞書の自動再読み込みに関する
system.trace_logエントリで、クエリIDが空にならないようにしました。#98784 (Miсhael Stetsyuk). IDatabaseTablesIterator::table()呼び出しでテーブルのスナップショットを取得してから、その後の反復処理中に別スレッドでテーブルが変更されるまでの間に作成されたシステムテーブルで、null ポインタを逆参照してクラッシュする問題を修正しました。#98792 (Grant Holly).SYSTEM START REPLICATED VIEWでリフレッシュタスクが起動しない問題を修正しました。#98797 (Pablo Marcos) 。- 別の JOIN 内で JOIN を含む
view()テーブル関数を使用した際に発生する例外 “Inconsistent table names” を修正 (旧アナライザ使用時のみ) 。 #98809 (Alexey Milovidov). - pending_signals 経由での RLIMIT_SIGPENDING の調整に関する不具合を修正しました。 #98829 (Azat Khuzhin).
loopをクラスターテーブル関数と組み合わせた際に発生する例外を修正しました。#98860 (Konstantin Bogdanov) 。- 複数の結合キーカラムを使用する LEFT ANTI JOIN で、
enable_join_runtime_filters=1(デフォルト) の場合に誤った結果が返されていました。#98871 (Alexander Gololobov). - データが複数のchunkに分けて読み込まれる場合 (たとえば
index_granularityが小さい場合) に、WITH FILL STALENESSが余分な補完行を生成する不具合を修正しました。#98895 (Alexey Milovidov). - “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B” という LOGICAL_ERROR を修正しました。#98900 (Azat Khuzhin) 。
- 失敗した割り当てがロールバックされないこと、
nallocx(0)の未定義動作、ならびにグローバルピーク追跡におけるオフバイワンによって生じるメモリ追跡のずれを修正。追跡対象をio_uringのリングバッファにも拡張。 #98915 (Antonio Andelic). - ユーザーパス外にあるローカルのデータレイクテーブルについて、作成だけでなくアタッチも禁止しました。#98936 (Daniil Ivanik) 。
urlClusterまたは同様のクラスターテーブル関数を使用するクエリで、“ReadBuffer is canceled” 例外を引き起こす可能性があったレースコンディションを修正しました。 #98955 (Alexey Milovidov).BFloat16型の引数を渡した際に金融関数 (financialNetPresentValue、financialInternalRateOfReturnなど) で発生していたLOGICAL_ERROR例外を修正しました。#98958 (Alexey Milovidov) 。- クエリプランの式マージが無効な場合 (query_plan_merge_expressions = 0 または query_plan_enable_optimizations = 0) に、ALIAS カラムに対してスキップ索引 (および主キー条件) が適用されない問題を修正しました。#98960 (Peng).
- 非同期 INSERT で
InsertQueryProfileEvent が増加するようにしました。#98626 をクローズしました。#98962 (Narasimha Pakeer)。 - 主キーに NaN の浮動小数点値が含まれる場合にデバッグビルドで発生する例外 “Inconsistent KeyCondition behavior” を、
accurateLessとaccurateEqualsが ClickHouse のソート順に従って NaN を一貫して処理するようにすることで修正しました。#98075 をクローズします。#98964 (Alexey Milovidov). - SummingMergeTree では、Bool (およびその他の domain 型) のカラムは合計されなくなりました。Bool の値は算術的に合計されず、そのまま保持されます。#98976 (Yash ).
optimize_const_name_sizeが有効で、enable_scalar_subquery_optimization= 0 の状態でリモート分片にクエリを実行した際に発生していたScalar doesn't exist例外を修正しました。リモートクエリ内で大きな定数が__getScalar参照に置き換えられていたにもかかわらず、それらが分片に送信されていなかったため、クエリが失敗していました。#98979 (andriibeee).GROUP BYと、Dictionary の逆引きルックアップ、Date/DateTime変換の比較、タプル比較を含む式を使用する一部のクエリで発生していたNOT_FOUND_COLUMN_IN_BLOCKを修正しました。#98888 をクローズします。#98980 (Nihal Z. Miaji).- MergeTreeエンジンで、version/sign/is_deletedカラムを
EPHEMERALまたはALIASに変更した際に発生する未定義動作 (nullポインタの逆参照) を修正しました。こうした変更は、現在は適切に拒否されるようになりました。#98985 (Alexey Milovidov). system.grantsのaccess_objectカラムで、URLおよびS3の権限に対する正規表現パラメータが省略されていた問題を修正しました。 #98987 (DQ).- Iceberg BigLake の読み取りを修正しました。ADC 認証情報が GCS S3 クライアントに転送されるようになり (403 エラーを解消) 、OAuth2 認証情報は送信前に URL エンコードされるようになったため (特殊文字を含むトークンでの認証失敗を解消) 、ネームスペースの走査処理も BigLake の HTTP 400 レスポンスで中断しなくなりました。#98998 (Nikita Fomichev) 。
TZ環境変数で POSIX のファイルパス構文 (例:TZ=:/etc/localtime) を使用している場合に、clickhouse-clientがタイムゾーンを切り替えられない問題を修正しました。#99000 (Yash ).startsWith、LIKE、NOT LIKEをFixedStringカラムに対して使用した際に、プルーニングが誤って行われる、または十分に行われない問題を修正しました。さらに、キー・カラムをFixedStringからStringにキャストした場合に、グラニュールのプルーニングができるようになりました。#98940。#99001 (Nihal Z. Miaji).- 重複イベントが検出された際に
strict_deduplicationで誤ったレベルが返されることがあったwindowFunnelを修正しました。#99003 (Yash ). - サブクエリ内の LIMIT 句と OFFSET 句が EXISTS によって無視され、オフセットまたは LIMIT が 0 のためにサブクエリが行を返さない場合に誤った結果となっていた不具合を修正しました。#88722 をクローズします。#99005 (andriibeee).
GROUPING SETS使用時に、フィルターのプッシュダウン最適化で、定数に短絡評価されるAND式に遭遇した際に発生する “Block structure mismatch” 例外を修正しました。#99010 (Alexey Milovidov) 。- クエリプランに
_part_offsetカラムがない場合に、パッチパート (論理更新) の読み取り時に発生する例外を修正しました。 #99023 (Alexey Milovidov). pk_idが主キーでString型の場合、SELECT * FROM table WHERE pk_id = ''のようなクエリでも、グラニュールの絞り込みに主キー索引が正しく使われるようになりました。#99027 (Shankar Iyer).- バックグラウンドスレッドがデータをストリーミング中に materialized view がデタッチされた場合に発生する、Kafkaエンジンの
DEPENDENCIES_NOT_FOUND例外を修正しました。#99028 (Alexey Milovidov). - 仮想カラム (例:
_part_offset) と同じ名前のEPHEMERALカラムを持つテーブルの作成時に発生する例外を修正しました。#99031 (Alexey Milovidov). - 存在しない圧縮ファイルを glob パターン付きの
url()テーブル関数で読み込む際に、誤解を招く “inflate failed: buffer error” が表示される問題を修正しました。http_skip_not_found_url_for_globsが有効な場合は、想定どおり空の結果を返すようになりました。#99034 (Alexey Milovidov). - スキーマ変更 (例: ADD COLUMN) 後、パッチパートに対して
ALTER TABLE ... DROP PARTを実行するとサーバーがクラッシュ (std::terminate) する問題を修正しました。原因は、空のカバレッジパートのメタデータにシステムカラム (_part) が欠けていたことで、NOEXCEPT_SCOPE 内で例外が捕捉されずに発生していたことです。#99036 (Peng). - ClickHouse server process は、cached disk read 中にメモリ制限超過例外が発生した場合、クラッシュする可能性がありました。これは修正されました。#99042 (Shankar Iyer) 。
dictGetを使用して ROW POLICY と ALIAS カラムの両方を持つテーブルにクエリを実行した際に発生するLOGICAL_ERRORを修正しました。この問題は、新しいアナライザで ALIAS カラムを解決する際、テーブル式に早い段階でアクセスしていたことが原因でした。#99065 (Peng).- データ形式に Avro フォーマットを使用する Iceberg テーブルで、仮想カラムのみをクエリしようとした際に発生する範囲外エラーを修正しました。非常にまれなケースのため、クリティカルとはしていません。#88238 を修正しました。 #99080 (alesapin).
remote()+view()を使用する再帰CTEで発生するセグメンテーションフォルトを修正しました。#99081 (Konstantin Bogdanov) 。- read-in-order 最適化が適用されている場合、不要な追加の索引解析をスキップします。#99084 (Vladimir Cherkasov) 。
- パッチパートの適用中にメモリ制限例外が発生した際に引き起こされるクラッシュを修正しました。 #99086 (Anton Popov).
- 再初期化リカバリ中に ZooKeeper のエントリが削除された際、古くなった
first_failed_task_nameが残ることで発生していたDDLWorkerのデバッグアサーションを修正しました。#99099 (Antonio Andelic) 。 - 有効期限 (TTL) を伴うマージ時のテキスト索引の再構築を修正しました。#99107 (Anton Popov).
- Iceberg テーブルエンジンの
ALTER TABLE ... REMOVE SETTINGSクエリで発生するクラッシュを修正しました。#86330 を修正しました。#99108 (alesapin). query_plan_convert_any_join_to_semi_or_anti_join最適化のバグを修正し、一致しない行に対して誤った結果が返される問題を解消しました。関連: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi).ASTColumnsExceptTransformer::transformで発生する LOGICAL_ERROR 例外を修正しました。#99119 (Pablo Marcos) 。- 必要なソースアクセス権限がないユーザーでも、テーブル関数 (
mysql(),postgresql(),sqlite(),arrowFlight(),jdbc(),odbc(), など) に対してDESCRIBE TABLEまたはCREATE TABLE ASを実行することでテーブル構造を取得できてしまう RBAC のバイパスを修正しました。リモートサーバーからスキーマを推論する関数では、これにより認可なしで外向き接続 (SSRF) をトリガーできる状態にもなっていました。#99122 (pufit). - 動的再構成およびリーダー移譲中に発生する Keeper のクラッシュ (NuRaft でのセグメンテーションフォルト) を修正。 #99133 (JIaQi Tang).
- 宛先が
SAMPLEに対応していない場合に Buffer table を使用するとクラッシュする問題を修正しました。 #99141 (Kseniia Sumarokova). - パッチパートのカラム順の不一致による LOGICAL_ERROR を修正。 #99164 (Pablo Marcos).
- Icebergテーブルに異なるフォーマット (ORC と Parquet) のファイルが混在している場合に、ごくまれに発生するクラッシュを修正しました。#88126。#99168 (alesapin).
- backup/restore で max_execution_time が適用されない問題を修正しました。 #99205 (Kseniia Sumarokova).
ORDER BY ALLのないINSERT SELECTクエリで、insert_deduplication_tokenが黙って無視される問題を修正しました。従来は、明示的にユーザーのトークンを指定していても、ソートされていないINSERT SELECTでは重複排除が完全に無効になっていました。現在は、insert_deduplication_tokenを指定するだけで、ORDER BY ALLの有無にかかわらず重複排除が有効になります。#99206 (Desel72).InverseDictionaryLookupPassの最適化中に発生していた過剰なアクセスチェックを修正しました。各訪問ノードごとではなく、パスの実行前にCREATE_TEMPORARY_TABLE権限を一度だけチェックするようにしました。#99210 (Mikhail Artemenko).clickhouse format --obfuscateが、スキップ索引の型、圧縮コーデック名、データベースエンジン名、Dictionary のレイアウト/ソース定義を難読化することで無効な SQL を生成していた問題を修正しました。 #99260 (Raúl Marín).- 一部のケースで Time[64] 型と DateTime[64] 型の比較がわかりにくくなっていた不具合を修正しました。現在は、このような場合、日付部分として
1970-01-01を追加して Time[64] の値を DateTime[64] に昇格させます。 #99267 (Yarik Briukhovetskyi). - distributed DDLクエリに対して、DDL workerで設定の制約内に収めるようにしました。 #99317 (Pablo Marcos).
- TOTP認証に関する軽微な問題を修正: パスワードが空の場合の
--one-time-passwordCLIオプション、および<digits>と<period>の設定値の検証。 #99322 (Vladimir Cherkasov). - Avroの出力フォーマットで、enumの定義に含まれない値を持つ
Enum8/Enum16カラムのシリアライズ時に発生するロジックエラーunordered_map::at: key not foundを修正しました。#99332 (Desel72). - Dynamic を含む Tuple 内でスパース シリアライゼーションを使用した CHECK TABLE の不具合を修正しました。#96588 をクローズしました。#99351 (Pavel Kruglov).
- テキスト索引のプリプロセッサに対する厳しすぎるバリデーションを修正した。#99359 (Anton Popov).
- 25.10 からそれ以降のバージョンへ、暗黙的な minmax インデックスを持つレプリケートテーブルをアップグレードする際の互換性を修正しました。#99392 (Raúl Marín) 。
- テキスト索引解析における否定形の関数 (
notEquals、notLike、notIn) のサポートを削除しました。これらの関数ではグラニュールをまったくスキップできなかったため、それらに対して索引解析を行っても、利点はなくオーバーヘッドが増えるだけでした。#99393 (Anton Popov) 。 INサブクエリ内でDistributedテーブルが使用された場合に、新しいアナライザでoptimize_skip_unused_shardsを修正しました。#99436 (Nikolai Kochetov) 。- クエリの結果でカラム名が重複した場合に
INTERSECT/EXCEPTで発生する heap-use-after-free を修正しました。#99471 (Alexey Milovidov). - part名に型付きのクエリパラメータを使用した場合に発生する
ALTER TABLE ... DROP PARTの論理エラーを修正しました。#99489 (Alexey Milovidov) 。 - テキスト索引の述語 (例:
hasAllTokens) がエイリアス経由でSELECT句とWHERE句の両方から参照されている場合に発生していたNOT_FOUND_COLUMN_IN_BLOCK例外を修正しました。#99504 (Anton Popov) 。 - 個別のテキスト索引を持つ複数のカラムにまたがって OR 条件で
hasAllTokensを使用した際に、誤った結果が返される問題を修正しました。#99505 (Anton Popov). clickhouse-localでページキャッシュを初期化し、page_cache_max_size設定が反映されるようにしました。#99510 (Alexey Milovidov) 。- まれに、
DETACH/ATTACH TABLEクエリの後に data part が誤って破損扱いとされ、デタッチされる不具合を修正しました。#99529 (Anton Popov). - HTTPインターフェイス経由でPrettyフォーマットを使って空のシステムテーブルにクエリを実行した際の
std::length_error例外を修正しました。#99541 (Alexey Milovidov) 。 ALTER TABLE ADD COLUMNを使用して、仮想カラムと同名のEPHEMERALカラム (例:_part_offset) を作成する際に発生していたLOGICAL_ERRORを修正しました。#99549 (Alexey Milovidov) 。- キャッシュキーの不一致が原因で、part の削除後も
VectorSimilarityIndexCacheのエントリが追い出されない問題を修正しました。 #99575 (Seva Potapov). - ローカルファイルから Google の認証情報を読み取ることを禁止しました。ファイルパスが判明しているとほかの認証情報まで読み取れてしまうため、この設定は安全ではありません。 #99584 (Konstantin Vedernikov).
- アナライザで発生していた性能低下を修正しました。ARRAY JOINから未使用のカラムを除外するようにしました。#99587 (Dmitry Novik) 。
- 既存の論理削除と行ポリシーが設定されたテーブルにおける、テキスト索引の読み取りを修正しました。 #99661 (Anton Popov).
- filter-in-decoder パスでフィルタリング除外されたページに遭遇した際に、Parquet リーダーで発生する nullptr のデリファレンスを修正。 #99676 をクローズ。 #99677 (Alexey Milovidov).
- O_DIRECT 使用時の AsynchronousReadBufferFromFileDescriptor における誤ったシークを修正しました。#99358 をクローズします。#99678 (Pavel Kruglov) 。
- 不正な圧縮データの展開時に
CompressionCodecT64で発生するヒープバッファオーバーフローと、CompressionCodecMultipleで発生するプロセスの異常終了を修正しました。いずれの問題も、新しい libFuzzer ターゲットによって発見されました。これらのコーデックは、クラッシュする代わりに例外を送出するようになりました。#99680 (Rahul). - サーバーがすべてのテーブルの読み込みを完了するまで、処理を遅らせる。#99700 (Seva Potapov) 。
- インライン DDL パラメータで
RemoteHostFilterをバイパスしていた MySQL Dictionary ソースの問題を修正しました。#99720 (Shaohua Wang) 。 system.tables内のデータレイクテーブルの反復処理時に発生する論理エラーを修正しました。#99739 (Konstantin Vedernikov) 。- プリプロセッサ付きのテキスト索引における、
IN関数を含む述語の解析を修正しました。あわせて、テキスト索引で検索対象のトークンが衝突し、不正確な結果を招く可能性がある問題を修正しました。 #99755 (Anton Popov). - 負の次元を持つ
Npyフォーマットのファイルを読み込む際に発生する無限ループを修正しました。#99812 (Desel72). - クエリプランのヘッダー計算時に、
FixedString引数に対するCRC32関数を行数ゼロで評価すると発生する global-buffer-overflow を修正しました。#99835 (Alexey Milovidov). - Iceberg テーブルに対して
ALTER TABLE ... MODIFY COLUMN ... COMMENTを実行した際に発生するクラッシュ (ヌルポインタ逆参照) を修正しました。#99838 (Desel72) 。 aggregate_functions_null_for_empty設定を修正し、ArrayやMapなどの非Nullable型を返す集約関数 (例:groupArray、sumMap) でも正しく動作するようにしました。#99839 (Alexey Milovidov) 。- 符号付き/符号なし整数型が混在する引数で呼び出した際に
midpoint関数で発生する LOGICAL_ERROR 例外を修正しました。#99867 (Alexey Milovidov). - フィルタ式に、NULL を生成する関数でラップされた集計と
materialize(0)の両方が含まれる HAVING 句を持つクエリで発生していた「Block structure mismatch」例外を修正しました。#99915 (Alexey Milovidov). - データ引数が、キーが配列である Map やその他のネストされた配列型である場合に、
sipHash128Keyed(および同様のキー付きハッシュ関数) で発生するアサーション失敗を修正しました。#99921 (Alexey Milovidov) 。 convertAnyJoinToSemiOrAntiJoinによるクエリプラン最適化中にIN関数で発生するLOGICAL_ERROR例外 “Not-ready Set” を修正しました。 #99939 (Alexey Milovidov).
ビルド/テスト/パッケージングの改善
- 重いヘッダーのインクルードを削減し、高コストなテンプレートのインスタンス化をヘッダーから切り出すことで、コンパイル時間を短縮しました。 #97893 (Raúl Marín).
- テンプレートのディスパッチマトリクスを縮小し、重いインクルードを削減することで、算術関数と関連ヘッダーのコンパイル時間を短縮しました。 #98204 (Raúl Marín).
mongo-c-driver2.2.2 を採用しました。 #98304 (Konstantin Bogdanov).postgresREL_18_3 を採用しました。 #98306 (Konstantin Bogdanov).- glibc malloc のメモリ回収効率の低さによる RSS の蓄積を避けるため、UBSan ビルドで jemalloc アロケータを有効化しました。 #98444 (Alexey Milovidov).
- パーサーコンビネータライブラリによるシンボル名の肥大化を抑えるため、Rust v0 のシンボルマングリングを採用し、PRQL ライブラリから内部シンボルを削除しました。 #98446 (Alexey Milovidov).
tests/benchmarksに TPC-H ベンチマークスイートと TPC-DS README を追加しました。 #98495 (Raufs Dunamalijevs).- TPC-DS の 99 個すべてのクエリに対する正当性テストを追加しました。 #99204 (Raufs Dunamalijevs).
- オフラインレプリカで発生する DDL CREATE TABLE + ALTER のバグ (#44070) を再現するインテグレーションテストを追加し、想定される失敗としてマークしました。 #99259 (Raufs Dunamalijevs).
- jemalloc を
je_プレフィックス付きで統合し、リンカーの —wrap の使用を廃止しました。 #99342 (Azat Khuzhin).
後方互換性を持たない変更
- デフォルトで、すべての insert に対して重複排除が ON になりました。以前は、非同期 INSERT と MV では OFF でしたが、同期 insert では ON でした。これは、どちらの insert 方法でもデフォルト設定を統一するためです。クラスターで重複排除を明示的に無効化している場合、従来の動作を維持するには
deduplicate_insert='backward_compatible_choice'を明示的に設定する必要があります。deduplicate_blocks_in_dependent_materialized_viewsについても同様です。#95970 (Sema Checherinda). - 統計情報の保存フォーマットが改善され、すべての統計情報が1つのファイルに保存されるようになりました。#93414 (Anton Popov)。
table statisticsを明示的に有効にしていない場合は、この項目は無視して構いません。 - S3(Azure)Queue のインメモリメタデータに制限を導入。システムテーブルの名称が
azure_queueからazure_queue_metadata_cacheに、system.s3queueからs3queue_metadata_cacheに変更されました。#95809 (Kseniia Sumarokova) 。 - 以前は、
Variantカラムに関数を適用した際、バリアントのサブタイプがその関数に適合しない場合でも暗黙的に NULL が返されていましたが、現在は例外がスローされるようになったため、この暗黙的な NULL の挙動に依存していたクエリが動作しなくなる可能性があります。 #95811 (Bharat Nallan). - PostgreSQL の
DATEカラムは、ClickHouse でDate32と推論されるようになりました (以前のバージョンではDateと推論されていましたが、その結果、狭い範囲を超える値でオーバーフローが発生していました) 。Date32の値を PostgreSQL に再度挿入できるようになりました。#73084 をクローズしました。#95999 (Alexey Milovidov). do_not_merge_across_partitions_select_final設定の意味が、より明確になりました。以前は、構成ファイルでこの設定を明示的に指定していない場合でも、この機能が自動的に有効になることがありました。そのためたびたび混乱を招き、残念ながら本番環境でいくつかの問題も引き起こしていました。現在はルールがよりシンプルになっています。do_not_merge_across_partitions_select_final=1を指定すると、この機能は無条件で有効になります。do_not_merge_across_partitions_select_final=0の場合、自動判定が使われるのは、新しい設定enable_automatic_decision_for_merging_across_partitions_for_final=1のときだけで、それ以外では使われません。従来の動作をできるだけ維持するため、デフォルト値はdo_not_merge_across_partitions_select_final=0およびenable_automatic_decision_for_merging_across_partitions_for_final=1に設定されました。#96110 (Nikita Taranov).- 明示的にカラムを指定して S3テーブルを作成する際、ClickHouse はそれらのカラム名が実際にリモートファイルのスキーマに存在するかを検証するようになりました。以前はカラム名が一致していなくても動作していたクエリは、今後はテーブル作成時に失敗します。これにより #96089 が修正されます。 #96194 (Konstantin Vedernikov).
- ORDER BY およびその他のテーブルのキー式でサブクエリを使用することを禁止しました。#96847 (Alexey Milovidov) 。
- デフォルトで
apply_row_policy_after_finalを有効化しました。もともとoptimize_move_to_prewhere_if_final=0の場合、ROW POLICY と PREWHERE はどちらも FINAL を考慮し、FINAL の後に適用されていました。#87303 によりこの挙動が壊れ、ROW POLICY フィルターではoptimize_move_to_prewhere_if_finalが無視されるようになっていました。これを修正するため、この PR では #91065 で導入された設定apply_row_policy_after_finalを有効にしています。apply_row_policy_after_finalを有効にすると、従来どおり、ROW POLICY はデフォルトで引き続き FINAL を考慮します。この PR はoptimize_move_to_prewhere_if_final=1の場合の挙動を変更するため、後方互換性のない変更です。今後、ROW POLICY を FINAL の前に適用するには、optimize_move_to_prewhere_if_finalではなくapply_row_policy_after_finalを使用する必要があります。#97279 (Nikolai Kochetov). Date型は、Arrow/ArrowStream フォーマットでuint16ではなく、Arrow ネイティブのdate32型としてシリアライズされるようになりました。これにより、PyArrow などのツールでこのカラムが日付型として正しく認識されるようになります。従来の動作は、output_format_arrow_date_as_uint16設定で復元できます。Dateカラムにuint16を使用していた古い Arrow ファイルの読み取りも引き続きサポートされます。#96860 (Alexey Milovidov).
新機能
- ユーザーは ClickHouse から直接 ClickStack (オブザーバビリティ UI) を使えるようになり、デバッグやローカル開発に便利になりました。#96597 (Aaron Knudtson).
- 認証方式として、時間ベースのワンタイムパスワード (TOTP) をサポート。 #71273 (Vladimir Cherkasov).
lazy_load_tablesデータベース設定を追加しました。有効にすると、データベースの起動時にテーブルは読み込まれず、代わりに軽量なStorageTableProxyが作成され、実際のテーブルエンジンは初回アクセス時に実体化されます。#96283 (xiaohuanlin).input_format_max_block_wait_ms設定を追加し、タイムアウト時にデータブロックを出力できるようにするとともに、HTTP connection が予期せず閉じられた場合でも残りのデータを処理できるようにしました。#94509 (Mostafa Mohamed Salah).- Google BigLake カタログのインテグレーション。#95339 をクローズします。#97104 (Konstantin Vedernikov)。
- 利用可能なすべてのトークナイザーを表示する system table
system.tokenizersを追加しました。 #96753 (Robert Schulze) 。 - UDF のロード状況と設定を監視できるように、新しいシステムテーブル
system.user_defined_functionsを追加しました。#90340 (Xu Jia). - jemalloc でビルドされたサーバーのメモリ使用量を診断するため、jemalloc メモリアロケータの統計情報 (
malloc_stats_print経由) を公開するsystem.jemalloc_statsテーブルを追加しました。あわせて、これらの統計情報をインタラクティブに可視化するための/jemalloc.htmlHTTP エンドポイントを ClickHouse HTTP インターフェイスに追加しました。#97077 (Antonio Andelic). - jemalloc のヒーププロファイルを読み取って分析するための
system.jemalloc_profile_textテーブルを追加しました。出力フォーマットはjemalloc_profile_text_output_format設定で制御されます (raw、symbolized、collapsed。デフォルトは collapsed) 。インラインフレームの解決はjemalloc_profile_text_symbolize_with_inlineで制御されます (有効な場合、シンボル化は遅くなりますがインラインフレームが含まれます。無効な場合、より高速に出力するためインラインフレームはスキップされます) 。collapsed フォーマットでは、jemalloc_profile_text_collapsed_use_countによって、スタックの重み付けに live allocation count (true) を使うか、live bytes (false、デフォルト) を使うかを制御します。これにより、jemalloc ヒーププロファイルのメモリプロファイリングや flame graph による可視化が容易になります。#93248 を修正しました。#97218 (Antonio Andelic). default_dictionary_database設定を追加しました。これにより、ClickHouse は、database 修飾子を付けずに参照された external dictionaries を、指定したデフォルトの database 内で解決できるようになります。これにより、XML で定義されたグローバル Dictionary から、SQL で定義された database 単位の Dictionary への移行が容易になり、既存の dictionary クエリ (例: dictGet(‘name’, …)) も変更せずにそのまま動作させることができます。#91412 (Dmitrii Plotnikov).DatabaseReplicatedで補助 ZooKeeper のサポートを追加しました。#91683 (RinChanNOW).- 昇順の素数を提供する新しいテーブル関数
primesと、新しいシステムテーブルsystem.primesを実装しました。#90839 をクローズしました。#92776 (Nihal Z. Miaji). - 非同期 INSERT は並列クォーラムに対応しました。挿入されたデータはクォーラムまでレプリケートされます。重複が見つかった場合、クエリは先に挿入されたデータのレプリケーションも完了するまで待機します。#93356 (Sema Checherinda).
- 色の値を sRGB から OKLAB へ、またその逆方向に変換する関数
colorOKLABToSRGB、colorSRGBToOKLABを追加しました。#93361 (Pranav Tiwari) 。 - 新たに、
insert_deduplicateおよびasync_insert_deduplicateをオーバーライドするdeduplicate_insert設定を追加しました。 #94413 (Sema Checherinda). - サーバー設定
insert_deduplication_versionにより、共通の重複排除ハッシュへの移行が可能になりました。 #95409 (Sema Checherinda). xxh3_128ハッシュ関数が追加されました。#96055 (Raúl Marín) 。- 結果パーツをコミットせずにマージをシミュレートできる
OPTIMIZE <table> DRY RUN PARTS <part names>クエリを追加しました。これはテスト用途、つまり新しいバージョンでマージの正しさを検証したり、マージ関連の不具合を決定論的に再現したり、マージ性能を確実にベンチマークしたりするのに役立ちます。#96122 (Anton Popov). - テーブルで使用されている named collections が削除されるのを防ぐため、設定
check_named_collection_dependenciesによってデフォルトで有効になる新しいチェックを追加しました。#96181 (Pablo Marcos). - サーバー内の既存のフェイルポイントと、それらが有効かどうかを確認するための
system.fail_pointsが追加されました。これにより、テストの自動化がしやすくなります。#96762 (Pedro Ferreira). - Glue カタログへのロールベースアクセスを追加。設定
aws_role_arnと、必要に応じてaws_role_session_nameを使用します。#90825 (Antonio Andelic). - 有効にすると、すべての
Date、Date32、Time、Time64、DateTime、DateTime64カラムに対して minmax 索引を自動的に作成する設定add_minmax_index_for_temporal_columnsが追加されました。#93355 (Michael Jarrett) 。 - JOINでの拡張テーブル別名をサポートしました (
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = bのようなクエリ) 。#95131 をクローズしました。#95331 (Yarik Briukhovetskyi) 。 - Icebergテーブルで
ALTER TABLE RENAME COLUMNがサポートされました。これまではADD COLUMN, DROP COLUMN, and MODIFY COLUMNのみがサポートされていました。#97455 (murphy-4o).
実験的機能
- テキスト索引が GA になりました。 #96794 (Robert Schulze).
- 量子化されたビットパック形式のベクトル格納 (近似最近傍探索で使用) 向けの
QBitデータ型が一般提供となり、実験的な設定を有効にする必要がなくなりました。 #95358 (Raufs Dunamalijevs). - ClickHouse のベクトル検索で、クラスター内のレプリカを使ってベクトル索引パーツの検索負荷を_分散_できるようになりました。これにより、ClickHouse は単一の VM のメモリ容量を超える大規模なベクトル索引をサポートできます。 #95876 (Shankar Iyer).
ast_fuzzer_runsおよびast_fuzzer_any_query設定で制御されるサーバー側 AST fuzzer を追加しました。有効にすると、サーバーは各クエリの通常実行後に、そのランダム化した改変版を実行し、結果は破棄します。 #97568 (Alexey Milovidov).- 実験的な KQL ダイアレクトに
iif関数を追加しました。 #94790 (happyso). - スキーマ推論で
allow_experimental_nullable_tuple_typeが考慮されるようになりました。有効にすると、推論された Tuple 型でNullable(Tuple(...))を使えるようになるため、欠落したネストされたオブジェクトをNULL要素の Tuple ではなくNULLとして扱えます。 #95525 (Nihal Z. Miaji). use_statistics_cache設定がデフォルトで有効になり、カラム STATISTICS がメモリに cache されるようになりました。これにより、各パーツから毎回再読み込みしなくてもクエリ最適化を高速化できます。 #95950 (Han Fei).
パフォーマンス改善
- 主キー内の任意の決定論的な式をデータスキップに使用できるようになりました (例:
ORDER BY cityHash64(user_id)/ORDER BY length(user_id)) 。決定論的な式については、ClickHouse はその式をクエリ定数に適用し、その結果を主キー索引で=,IN,hasなどの述語に利用できます。さらに、その式が単射でもある場合 (例:ORDER BY hex(p)またはORDER BY reverse(tuple(reverse(p), hex(p)))) 、否定形である!=,NOT IN,NOT hasでも索引を効果的に利用できます。#10685 を解決。#82161 を解決。#92952 (Nihal Z. Miaji). - 統計情報の保存フォーマットが改善され、すべての統計情報が単一のファイルに保存されるようになりました。#93414 (Anton Popov).
- ファイルシステムキャッシュで、リモートテーブルエンジン/関数の並列読み込みに対応しました。#71781 (Kseniia Sumarokova).
- ローカルファイルおよびオブジェクトストレージのテーブル関数で、ユーザー空間ページキャッシュを使用できるようになりました。#77874 (Michael Kolupaev).
- ユーザー空間のページキャッシュで不要な memcpy を回避。#77884 (Michael Kolupaev).
concurrent_threads_schedulerのデフォルトが、fair_round_robinからmax_min_fairに変更されました。これにより、高負荷時には割り当てスロット数の少ないクエリが優先されるようになり、公平性が向上します。その結果、短時間で終わるクエリが長時間実行されるクエリのせいで不利になることがなくなります。#95300 (Sergei Trifonov).FINALクエリで、フィルタリングに主キーの条件を使用し、ほかの条件にはスキップ索引を使用した場合、PrimaryKeyExpandの処理ステップでは、最初に絞り込まれた主キー範囲についてのみ交差を確認するようになりました。#94903 (Shankar Iyer).s3(...)のようなテーブル関数で並列レプリカを使用する場合、テーブル関数を単一のサブクエリでラップしたクエリも、以前はテーブル関数への直接参照のみが並列化の対象だったのに対し、現在ではレプリカ間で自動的に並列化されるようになりました。#92264 をクローズしました。#96332 (phulv94)。- cache内のデータファイルとシステムファイルを、それぞれ別のセグメントに分割できるようにしました。 #87834 (MikhailBurdukov).
ColumnVector::replicateの動的ディスパッチを実装し、一部のハッシュ結合処理を高速化しました。#79573 (Raúl Marín) 。- 複雑な述語条件がある場合の並列ハッシュ結合の性能を改善しました。従来は結合されなかった行を1つのスレッドで処理していましたが、これは最適ではなかったため、この最適化ではそれらの行の処理を複数のスレッドに並列化します。
parallel_non_joined_rows_processing設定で切り替えできます。デフォルトで有効です。#92068 (Yarik Briukhovetskyi). - JSON型のパースを若干最適化しました。#93614 (Pavel Kruglov).
- AST のメモリ使用量を削減。ハイライト表示が使われず、VALUES のパースも行われない場合はフィールドが使用されないため、この最適化は有効です。#93974 (Ilya Yatsishin).
- named Tuple ASTオブジェクトのメモリ消費を最適化しました。カラム名を汎用的なASTリテラルノードに保持するのではなく、tupleオブジェクト内に文字列として格納するようにしました。#94704 (Ilya Yatsishin).
- 追加のリンカオプションにより、デバーチャライゼーションが向上しました。 #94737 (Nikita Taranov).
- ZooKeeper リクエストをバッチ化することで、多数のパーツを持つ ReplicatedMergeTree テーブルのレプリカのクローン作成時の性能を改善。 #94847 (c-end).
- read step にすでに PREWHERE フィルタがある場合、新しいフィルタは追加できませんでした。この変更により、PREWHERE の最適化は JOIN ランタイムフィルタ最適化の後まで延期され、ランタイムフィルタも PREWHERE にプッシュできるようになりました。 #95838 (Alexander Gololobov).
- x86で動的ディスパッチを用いることで、
T64codecの圧縮を高速化。#95881 (Raúl Marín). - 可能な場合 (
NULL不可、-Ifではない、GROUP BY なし、IPv6 または String ではない) に、insert のバッチ化によって数値型に対するuniqを高速化しました。#95904 (Raúl Marín) 。 - Keeper 向けの低レベル最適化:
ZooKeeper::observeOperationsが、ZooKeeper の受信スレッドにおける CPU 使用量の 20% 超を占めていることが判明しました。この変更では、次の点に対応しています。1.AggregatedZooKeeperLog::statsでは、SipHashの代わりに 10 倍以上高速なCityHash64を使用します。2.Coordination::ErrorCounterでは、std::unordered_mapとstd::mutexの代わりにstd::array<std::atomic<UInt32>, N>を使用します。#95962 (Miсhael Stetsyuk) 。 - メモリを節約するため、ProfileEvents::Counter の 64 バイト境界へのアラインメントを廃止しました。#96097 (Azat Khuzhin) 。
- メモリ最適化:
CachedOnDiskReadBufferFromFile構造体のサイズを50分の1に削減しました。#96098 (Azat Khuzhin). - 空のハッシュテーブルをリサイズする際に、古いデータをコピーしないようにしました。#96180 (Raúl Marín) 。
RIGHT OUTERJOIN での JOIN ランタイムフィルタをサポート。 #96183 (Hechem Selmi).- 最適化設定
enable_join_runtime_filtersがデフォルトで有効になりました。#89314 (Alexey Milovidov) 。 - 従来、テキスト索引の direct read 最適化は、すべてのパーツにマテリアライズ済みのテキスト索引がある場合にのみ適用されていました。この PR では部分的なサポートが追加され、一部のパーツにマテリアライズ済みのテキスト索引がある場合はそれらのパーツでそれが使用され、マテリアライズ済みのテキスト索引がないパーツでは元のフィルタ式を実行する形にフォールバックします。#96411 (Anton Popov).
- フィルタリングを高速化するため、systemログテーブルの時間カラムに
minmaxセカンダリ索引を、query_id/initial_query_idカラムにbloom_filter索引を追加しました。 #96712 (Alexey Milovidov). - 遅延マテリアライゼーションの最適化が、
UNION ALLクエリの最初の分岐だけでなく、すべての分岐に適用されるようになりました。これにより、異なるMergeTreeテーブルからの複数のソート済み・件数制限付きの読み取りをUNION ALLで組み合わせるクエリでは、すべての分岐で必要になるまでカラムの読み取りが遅延され、I/O が削減されます。#96832 (Federico Ginosa). - 不要なデータコピーをなくし、数値カラムでベクトル化された最小値/最大値計算を有効にすることで、INSERT 時の minmax スキップ索引の計算を最適化しました。 #97392 (Raúl Marín).
- ストレージ
DeltaLakeは、Delta Lake のメタデータからcount()の結果を取得するようになり、system.tables に正しいテーブル統計情報 (合計バイト数/行数) が表示されるようになりました。 #96190 (Kseniia Sumarokova). - 未使用のカラムは、MergeTree から読み取る場合、読み取りステップからも除外されます。特に、フィルタが
PREWHEREにプッシュダウンされる場合に有効です。#89982 (János Benjamin Antal). - テーブル名のみを取得することで
SHOW TABLESクエリの処理を改善し、getLightweightTablesIteratorがテーブル名のみを含む構造を返すようにしました。#93835 を解決しました。#94467 (Smita Kulkarni). - キーカラムがこれらの関数でラップされている場合でも、範囲述語に対して主キーおよびスキップ索引のプルーニングを有効にできるよう、
assumeNotNull、coalesce、ifNullを改善しました。#94689 をクローズしました。#94754 (Nihal Z. Miaji). - getChildren Keeper リクエストに with_data と with_stat を追加しました。これにより、子の一覧だけでなく、その
statやdataも 1 回の操作でまとめて取得できるようになります。#94826 (Nikolay Degterinsky) 。 - 最終的にローカルプランを実行する場合でも、並列レプリカを使用するプランを実行する場合でも、索引解析は (ほとんどの場合) 一度しか行われません。 #94854 (Nikita Taranov).
- パーツ数 (
distributed_index_analysis_min_parts_to_activate) と索引のサイズ (distributed_index_analysis_min_indexes_size_to_activate) に応じて、分散索引解析を有効化できるようにしました。#95216 (Azat Khuzhin) 。 - IcebergテーブルでのPREWHERE最適化を有効化。 #95476 (Konstantin Vedernikov).
- 一部のASTクラスのメモリ消費量を削減しました。#95514 (Raúl Marín) 。
split_intersecting_parts_ranges_into_layersを有効にした際に生成されるパイプラインストリームの数を制限します。これにより、メモリの過剰な消費を防ぐことができます。#96478 (Nikita Taranov).- 複数の JOIN に対する等価集合最適化を実装しました。複数の
INNER JOINを連続して含むクエリで、filter pushdown 最適化が強化されました。テーブルが等価なカラム同士で結合されている場合 (例:t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10) 、この chain 内のいずれかのテーブルに適用されたフィルタは、自動的にすべてのテーブルにプッシュダウンされます。#96550 をクローズしました。#96596 (Vladimir Cherkasov) 。 - Delta Lake のメタデータスキャンを最適化しました。delta-kernel の PR https://github.com/delta-io/delta-kernel-rs/pull/1827 の変更を利用しています。 #96686 (Kseniia Sumarokova).
- Replicated database では、ダミークエリのたびにキャッシュされたクラスターを更新しないようにしました。#96897 (Tuan Pham Anh) 。
- プレフィックスが ASCII 文字のみで構成されている場合、
startsWithUTF8によるフィルタリングで主キー索引を使用します。#97055 (vkcku).
改善
- Keeper へのリクエストに対する OpenTelemetry トレーシングを追加しました。 #91332 (Miсhael Stetsyuk).
- 新しい設定オプション:
logger.startup_console_levelとlogger.shutdown_console_levelが追加され、それぞれ ClickHouse の起動時および停止時のコンソールログレベルを上書きできるようになりました。#95919 (Garrett Thomas). - 設定の再読み込み時に、コマンドラインで指定したオーバーライドを尊重するようにしました。#80294 をクローズ。#80295 (Alexey Milovidov) 。
mongodbテーブル関数で、名前付きコレクションのパラメーターに対するキー・バリューによる上書きを許可しました。#89616 (vanchaklar).- Iceberg テーブル向けの read-in-order 最適化で、単純なカラム参照だけでなく、
icebergBucketやicebergTruncateのような複雑なソート関数も利用できるようになりました。#90256 (Konstantin Vedernikov) 。 - 診断機能を向上させるため、system.mutations に parts_postpone_reasons という新しいカラムを追加しました。これにより、パーツが延期された理由を確認できます。#92206 (Shaohua Wang).
DataflowStatisticsCacheで、読み取る行数の変化 (insert/delete や query condition cache の使用によるもの) を追跡できるようになりました。 #93636 (Nikita Taranov).- SYSTEM RESET DDL WORKER [ON CLUSTER] クエリに対応しました。このクエリは、メインスレッド内の DDLWorker の状態をリセットします。ホスト ID が更新された際に、レプリカの active 状態を更新するのに役立ちます。#93780 (Tuan Pham Anh) 。
- イベントタイプ
MUTATE_PARTおよびMUTATE_PART_STARTについて、system.part_logでmutation_idsをサポートしました。#93811 (Shaohua Wang). - バックグラウンド操作 (Mutate、Merge) を ‘background’ プロファイルで個別に設定できるようになりました。従来、これらの操作は ‘default’ プロファイルを介して通常のクエリと同じ設定を共有していました。#93905 (Arsen Muk).
system.crash_logに、さらに多くの情報を追加しました。#94112 #95857 (Miсhael Stetsyuk) 。- 実行中の非内部クエリ数を追跡するため、新しい
QueryNonInternalメトリクスを追加しました。このメトリクスはClickHouseMetrics_QueryNonInternalとして公開され、非内部クエリにのみ適用されるmax_concurrent_queries制限に対して、運用担当者がクエリの同時実行数を監視するのに役立ちます。#94284 (Ashwath Singh). RuntimeDataflowStatisticsCacheUpdaterで、compact パーツ内のカラムに対する入力バイトの統計情報収集をサポートしました。#94626 (Nikita Taranov).- Keeper の設定不備によってクラスターの構築に失敗するケースを検出するチェックを追加しました。#60932 をクローズします。#94682 (Konstantin Bogdanov)。
- partの読み込み時におけるJSONプレフィックスのデシリアライゼーションを改善しました。#94848 (Pavel Kruglov) 。
- 書き込み処理を完全なINSERTパイプラインを使用するようにリファクタリングし、ターゲットテーブル上のmaterialized viewがトリガーされるようにしました。 #94890 (Kai Zhu) 。
- 検索対象のカラムに索引がある場合にのみ、ベクトル類似度検索のプラン最適化を適用するようにしました。 #94998 (Eduard Karacharov).
- ユーザー認証の前に合計メモリ制限を確認し、合計制限が許容値を超えている場合は
(total) memory limit exceededをスローします。#95003 (Nikolai Kochetov). throw_on_unmatched_row_policies設定オプションが追加されました。このオプションを有効にすると、ユーザーが行ポリシーの設定されたテーブルにクエリを実行した際、そのユーザーに適用される行ポリシーが1つもない場合に例外がスローされます。これにより、アクセス制御の設定ミスによって全行が返されるという曖昧な挙動を防げます。#95014 (Vitaly Baranov).- Unity Catalog を使用する長時間実行されるクエリで、S3 アクセストークンを動的に更新できるようになりました。これにより #93981 がクローズされました。#95069 (Konstantin Vedernikov).
- ClickHouse が
memory_worker_decay_adjustment_period_msミリ秒の間、継続的にメモリ逼迫状態にある場合、jemalloc のダーティページ減衰を無効にします。ClickHouse が同じ時間だけ通常状態で動作している場合は、jemalloc のダーティページ減衰を再度有効にします。#95145 (Antonio Andelic). - S3Queue で、s3Queue の
keeper_path設定を使用する補助的な Zookeeper サポートを追加。#95203 (Diego Nieto) 。 - TTL の drop パーツマージで
max_parts_to_merge_at_onceを適用するようにしました。 #95315 (Kseniia Sumarokova)。 - 物理的な接続を反映するため、query_log に
connection_addressとconnection_portを追加しました (proxy 経由で接続され、auth_use_forwarded_address=1 の場合、addressとportは置き換えられます) 。#95471 (Yakov Olkhovskiy) 。 - クエリ条件cacheにおける誤ったメモリ使用量の計上を修正しました。主な問題は、複数の文字列 (part_name、テーブルID、SQL条件全体など) で構成されるcacheキーが考慮されていなかったことです。 #95478 (Nikita Mikhaylov).
- 埋め込み configuration で起動したサーバーでは、通常の設定と同様に、Users と grants を操作し、それらを
accessdirectory に保存できるようになりました。これにより、テストがしやすくなります。さらに、埋め込み configuration と clickhouse-local で access_control_improvements がすべて有効になりました。 #95481 (Alexey Milovidov). - S3 認証のエラーメッセージを改善し、アクセス拒否時に credentials を確認するよう促すヒントを含めました。#95648 (Gerald Latkovic).
- 統計キャッシュを有効にし、キャッシュの更新間隔を300秒に設定しました。#95841 (Han Fei) 。
system.aggregated_zookeeper_logにコンポーネント名を追加しました。#95882 (Antonio Andelic) 。system.tablesからDeltaLakeテーブルをクエリする際、オブジェクトストレージの読み取りをスキップするようにしました。 #95899 (Antonio Andelic).compatibility設定が26.2以上の場合、デフォルトでenable_max_bytes_limit_for_min_age_to_force_mergeを有効化しました。#95917 (Christoph Wurm).- Delta Lake が macOS で利用可能になりました。#95979 を解決しました。#95985 (Alexey Milovidov) 。
- 以前のバージョンでは、UPDATE および RENAME COLUMN を含む競合する ALTER 式を組み合わせると、適切な例外ではなく論理エラーがスローされていました。#70678 を修正しました。#96022 (Alexey Milovidov).
- すべての ClickHouse アプリケーションのヘルプ出力を改善し、いくつかの修正を加えるとともに
--no-sudoオプションを追加しました。これは、Ilya Yatsishin による #58244 の続きです。#96025 (Alexey Milovidov) 。 - 他のすべての距離関数にはすでにこの形式のエイリアスがあるため、
cosineDistanceのエイリアスとしてdistanceCosineを追加しました。#96065 (Raufs Dunamalijevs) 。 with_dataKeeper 拡張機能のサポートを追加し、Database Replicated におけるテーブルのフェッチを改善しました。#96090 (Nikolay Degterinsky) 。- chdig を v26.2.1 に更新 (新機能の追加および MacOS 対応) 。#96113 (Azat Khuzhin) 。
numbersとprimesの filter pushdown を改善しました。ClickHouse は、正確な境界を導き出せない場合でもWHERE条件から保守的な値の範囲を導き出し、それに応じてシーケンス生成を制限できるようになりました (たとえばWHERE number % 5 < 2 AND number > 100 AND number < 300の場合、ClickHouse は 100 から 300 までの数値だけを生成してから predicate を適用します) 。これにより、範囲が限定されないスキャンを回避できます。#84853 をクローズ。#93913 をクローズ。#96115 (Nihal Z. Miaji) 。- 以前は、パース時の曖昧さを避けるため、
COMMENT句がある場合、フォーマッタはSELECTを括弧で囲んでいました。代わりに、COMMENTをAS SELECTの前に出力することで、括弧を使わずに曖昧さを解消するようになりました。 #96293 (Alexey Milovidov). allow_impersonate_user設定は、単独のサーバー設定ではなく、access_control_improvementsセクション内に配置されるようになりました。#96451 (Vitaly Baranov) 。core_dump.size_limit設定をホットリロード可能にし、設定変更を反映するためにサーバーを再起動しなくても済むようにしました。#96524 (Miсhael Stetsyuk) 。- ソケットタイムアウト時の CPU およびリアルタイムプロファイラの相互運用性を改善しました。#96601 (Sergei Trifonov).
- DROP COLUMN mutation の直後に ADD COLUMN を短時間で実行した場合に、削除済みデータが復活するのを防ぎます。 #96713 (Alexey Milovidov).
system.instrumentationのfunction_idの型を LowCardinality(Int32) から Int32 に変更。#96726 (Copilot)。- ミューテーションの同期的な待機で、クエリのキャンセルや時間制限が反映されるようになりました。#96756 (Alexey Milovidov).
- delta-kernel のログを変更できるようにするシステムコマンド
SYSTEM RELOAD DELTA KERNEL TRACING <level>を追加しました。これはデバッグ時に役立つ場合があります。#96763 (Kseniia Sumarokova). - IP アドレスファミリーに基づくフィルタリング、つまり
dns_allow_resolve_names_to_ipv4/ipv6設定は、DNS cache が無効になっている場合でも適用されます。 #96810 (c-end). - jemalloc のイントロスペクションを改善。 #96840 (Azat Khuzhin).
- システムテーブルにクエリを実行した際に、
/playWeb UI でQUERY_CACHE_USED_WITH_SYSTEM_TABLEがスローされる問題を修正しました。#96869 (Alexey Milovidov). - Web UI を改善: 実行中のクエリであることがわかるように favicon を変更し、補助クエリ (database と table の読み込み) で発生した error を黙って無視せず表示するようにしました。Closes #85055. #96883 (Alexey Milovidov).
/playUI の左パネルをクリックして、データベース一覧の表示/非表示を切り替えられるようにしました。#96884 (Alexey Milovidov) 。DROP DATABASEは、データベースにロード時の依存関係を持つテーブル (例:joinGetを使用するDistributedテーブル) が含まれている場合に、依存関係の逆順でテーブルを削除するようになり、クラッシュ安全性が向上しました。#97057 (Alexey Milovidov).- 無効な YAML がスキップされないよう、yaml-cpp を更新しました。#97333 (Azat Khuzhin) 。
play.htmlのサイドバーでテーブルの取得中に読み込みインジケーターを表示するようにしました。#97531 (Alexey Milovidov) 。- 組み込みの Web UI (play.html) に、生のクエリ結果をクリップボードにコピーするボタンを追加しました。 #97532 (Alexey Milovidov).
- クエリ難読化ツール (
clickhouse-format --obfuscate) を修正し、より多くのケースで解析可能な SQL を生成できるようにしました。#97584 (Alexey Milovidov) 。
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- Enum の要素を拡張するなどのメタデータのみの ALTER の後、プロジェクションを用いた集約の最適化で例外が発生する場合があります。#84143 (Alexey Milovidov) 。
- materialized view は、作成されたデータベースを実行コンテキストとして使用するようになりました。これは次のことを意味します。 - view の SELECT クエリで参照される名前については、明示的なデータベース修飾を省略できます - 明示的なデータベース修飾が指定されていない場合は、materialized view が作成されたのと同じデータベースが使用されます。 #88193 (Dmitry Kovalev).
- ON CLUSTER 使用時の CREATE USER の認証方法におけるクエリパラメータの置換を修正しました。認証方法内のクエリパラメータ (例: password) が置換されず、リモートノードで UNKNOWN_QUERY_PARAMETER エラーが発生していました。#92777 (xiaohuanlin).
has、mapContainsKey、mapContainsValue関数におけるテキスト索引解析の不整合を修正しました。これまでは、これらの関数を使用するクエリで、式がテキスト索引を使って評価されるかどうかによって、結果が異なることがありました。 #93578 (Anton Popov).- スタックのアンワインド中に
dropReplicationSlotが例外を送出した場合、MaterializedPostgreSQLデータベースにテーブルをアタッチするとクラッシュする問題を修正しました。#96871 (Alexey Milovidov). - 同じファイルを巡って競合するバックアップを多数同時実行すると、サーバーがクラッシュする可能性がありました。#93659 (Alexey Milovidov).
- 並列レプリカを使用するクエリおよび non-MT テーブルとの JOIN に関する問題を修正しました。#92056 をクローズします。#93902 (Igor Nikonov).
- 名前にドットを含む Iceberg のカラムで、値が NULL として返される問題を修正しました。#94335 (Mikhail Koviazin) 。
stringJaccardIndexUTF8における UTF8 文字列の処理を修正し、パフォーマンスを改善しました。#94613 (Joanna Hulboj) 。WITH FILL STALENESSで発生しうるオーバーフロー (UB や無限ループの原因となるもの) を修正しました。大きな値の飛びによって発生しうる無限ループを修正しました。旧アナライザのサポートを追加しました (主にストレステスト向け) 。#94663 (Azat Khuzhin).- ホスト名が複数のアドレスに解決され、リモートのレプリカがフリーズした際に、分散クエリがハングする可能性がある問題を修正しました。 #94726 (c-end).
- 複数のテーブル式を結合する際に、左端のテーブル式が
-Clusterテーブル関数である場合に不正な結果が返される問題を修正しました。#89996 を解決しました。#94748 (Konstantin Bogdanov) 。 toWeek、toYearWeek、toStartOfWeek、toLastDayOfWeek、toDayOfWeekを含む述語における主キーおよびスキップ索引のプルーニングの不具合を修正し、LowCardinality(String)を使用した有効なクエリでこれらの関数の一部が例外を発生させる問題も修正しました。#94816 (Nihal Z. Miaji).- SQL Security を持つビューに対する
ATTACHクエリで、不要に権限チェックをスキップしていた処理を削除しました。これにより、必要なアクセス権を検証せずに definer 付きのビューをアタッチした場合に起こり得る権限昇格を防止します。#94865 (pufit). ReplicatedMergeTreeの起動時に、delete_tmp_*ディレクトリが並行して削除されることで発生していたクラッシュを修正しました。#94892 (myeongjun).- materialized view を持つ Iceberg table への
INSERTで deduplication 情報が失われて例外が発生していた問題を修正しました。#94938 (Daniil Ivanik) 。 SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME>を実行すると、クラスター上のcache全体が削除されてしまう不具合を修正しました。#94978 (Rory Crispin).- Vertical merges 後も一定の索引粒度 (use_const_adaptive_granularity) を維持するようにしました (Nested の修正を含む v2 および一般的なケース) 。 #95013 (Azat Khuzhin).
- [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764) の後、バージョン26.1におけるファイルシステムキャッシュの競合状態を修正しました。#95042 (Kseniia Sumarokova).
- clickhouse-client での KILL QUERY およびクエリのキャンセル (Ctrl+C) による postgresql() テーブル関数のキャンセル処理を修正しました。 #95136 (Roman Vasin).
- 複数の JOIN で
USING句を使用した場合の、ソーステーブル由来の修飾付きカラムに対する型推論を修正しました。以前は、そのカラムが後続の JOIN に関与していない場合でも、基になるソースカラムの型が誤って共通スーパータイプに更新されていました (たとえばSELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a)では、t2.aカラムが使われるのは最初の JOIN のみなので、その型はt1.aとt2.aのスーパータイプであるべきであり、t3.aは含まれません) 。この問題により、関数が実際の実行プランに現れるカラム型とは異なる型を想定した場合、論理エラーやクラッシュが発生する可能性がありました。#95157 (Vladimir Cherkasov). - manifest の .avro リストおよびファイルの内容を取得する際、カラム変換が 1 回だけ行われるようにしました。#95164 (Daniil Ivanik).
- 過剰なメモリ使用量や誤ったカラム STATISTICS を招く可能性があった、JSONカラムサイズの誤計算を修正しました。 #95207 (Azat Khuzhin).
- 論理更新後に大きなパッチパートを適用する際、メモリ使用量の計上が不正確になる問題を修正しました。従来は、大きなパッチパートを適用するとメモリ使用量が過大になり、OOMキラーによってサーバープロセスが強制終了されることがありました。 #95231 (Anton Popov).
max_parallel_replicasを使用する分散クエリが、索引解析中にローカルレプリカへフォールバックした際に、誤った結果を返したり例外が発生したりする可能性のある未定義動作を修正しました。#95263 (Azat Khuzhin).group_by_overflow_modeがanyに設定されている場合の、sumおよび時系列におけるスパースなカラムの集約を修正しました。 #95301 (Mikhail Koviazin).plain_rewritableディスクポリシーで、メタデータファイルの unlink の途中にネットワークエラーが発生するとストレージが不整合な状態に陥る可能性があった、信頼性の問題を修正しました。#95302 (Mikhail Artemenko).- Iceberg では Date を Date32 に置き換えました。 #95322 (Konstantin Vedernikov).
redisテーブル関数の password 引数は、今後、logs およびシステムテーブル (例:query_log) でマスクされるようになりました。#95325 (János Benjamin Antal) 。- テーブルに対する分散クエリの実行中に、そのテーブルが削除または変更され、例外や誤った結果を引き起こす可能性があった不具合を修正しました。 #95356 (Azat Khuzhin) 。
- 分散クエリで負の
LIMIT/OFFSETを使用した一部のケースで発生していた論理エラーを修正しました。#95357 (Nihal Z. Miaji) 。 - ssh を使用して接続する際に、clickhouse-client がパスワードを 2 回求める不具合を修正しました。#95372 (Isak Ellmer) 。
- ストレージ S3(Azure)Queue におけるデータ競合を修正。#95385 (Kseniia Sumarokova).
- prewhere 内のラムダ式が原因で発生していた prewhere フィルタのエラーを修正しました。#95395 (Xiaozhe Yu) 。
optimize_syntax_fuse_functionsを修正し、集約引数がNullableの場合はsum/count/avgをsumCount()に書き換えないようにしました。#95390 を修正。#95441 (Nihal Z. Miaji).- キャンセル時に分散クエリでクラッシュする可能性を回避しました。#95466 (Aleksandr Musorin) 。
- S3(Azure)Queue engine からのストリーミングにおける重複排除の問題を修正しました。#95467 (Kseniia Sumarokova).
- 分散クエリにおいて、初期ユーザーに割り当てられた行ポリシーの更新に関する不具合を修正しました。#95469 (Vitaly Baranov) 。
- plain_rewritable 上の暗号化ディスクに対する判定を修正 (
It is not possible to register multiple plain-rewritable disks with the same object storage prefixが発生する可能性がある問題を修正) 。 #95470 (Azat Khuzhin). mergeTreeProjectionテーブル関数ではアクセスチェックが抜けていたため、テーブルに対する SELECT 権限を持たないユーザーでも (テーブル関数に対する権限があれば) 、そのプロジェクションからデータを読み取れていました。この修正では、mergeTreeIndexとmergeTreeAnalyzeIndexesにすでに実装されているものと同じアクセスチェックが追加されます。#95480 (Alexey Milovidov) 。- Dynamic/JSON 型の動的サブカラムから size サブカラムを読み取る際に発生する可能性のある論理エラーを修正しました。 #95573 (Pavel Kruglov) 。
- #94262で導入された (実験的な) ゼロコピー・レプリケーションの回帰不具合を修正しました。この不具合では、他のレプリカが共有パーツの取得を完了する前に、そのパーツが削除される可能性がありました。#95597 (filimonov) 。
- JSON 配列に
tupleElementを適用した際に発生するクラッシュを修正しました。#95581 をクローズ。#95647 (Pavel Kruglov). - USING を伴う JOIN の VALUES 句内で、ラムダ関数の中でマッチャー (
*) を使用した際に発生する論理エラー例外を修正しました。#93675 をクローズしました。#95661 (Vladimir Cherkasov) 。 - 分散 DDL の完了待機中に Replicated database を同時に削除した場合に発生していた、
There was an error: Cannot obtain error messageという論理エラーを修正しました。#95539。#95664 (Alexander Tokmakov). transform_null_inが有効な場合に、IN関数がNULL値に対して誤った結果を返す不具合を修正しました。#65776 をクローズしました。#95674 (Nihal Z. Miaji).- 設定
cast_keep_nullableが有効な場合、CASTで LowCardinality Nullable 型が正しく処理されるようにしました。#95670 を修正しました。#95747 (Alexey Milovidov). - パーティション化された Delta Lake データのまとめ処理を修正。 #95773 (Kseniia Sumarokova).
- ランタイムフィルタにおけるNullableなJOINカラムのレースコンディションを修正しました。 #95775 (Hechem Selmi).
USINGカラムの型がテーブルと SELECT リストで異なる場合に、matcher (*、table.*) およびanalyzer_compatibility_join_using_top_level_identifierを含むクエリで発生する可能性のある論理エラーを修正しました。#90477 をクローズしました。#95808 (Vladimir Cherkasov).- タスクのスケジューリング中にエラーが発生した際に例外を引き起こす可能性があった、並列スレッドプール処理 (バックアップ、集約、分散クエリ) におけるメモリ安全性の不具合を修正しました。 #95818 (Raúl Marín).
- 削除対象のワークロードを使用するクエリと同時実行中に DROP WORKLOAD を実行した際に発生するクラッシュを修正しました。#95856 (Alexey Milovidov) 。
- 多数のデータベースに対して限られた権限しか持たないユーザーがシステムテーブルにクエリを実行した際の性能低下を修正しました。#89371 をクローズしました。#95874 (pufit).
- ネストしたパスを持つ JSON に対する tupleElement の実行を修正しました。これまでは誤ったクエリ結果につながる可能性がありました。 #95907 (Pavel Kruglov).
- 空のMergeTreeテーブルに対して
directJOINアルゴリズムを使用した際に発生する可能性のあったNOT_SUPPORTEDエラーを修正しました。 #95935 (Vladimir Cherkasov). - クライアントが設定の別名を候補表示したり自動補完したりしない問題を修正し、#92190 をクローズしました。#95945 (phulv94).
- system.asynchronous_metric_log の event_date を修正。#95947 (Raúl Marín) 。
- JSON data type における skipping path を修正しました。従来は
JSON(SKIP path)を使用すると、pathをプレフィックスに持つすべての JSON キーがスキップされ、"pathpath"のようなキーまで対象になっていたため、insert時にそれらのパスでデータが失われる可能性がありました。現在は修正され、"path"キーのみがスキップされます。 #95948 (Pavel Kruglov). - 不明なプロジェクションを含むパートは、永久に失われたものとしてマークされるべきではありません。 #95952 (Mikhail Artemenko).
Nullable(String)キーを持つJointable で、空文字列がNULLになってしまう問題を修正。#71414 をクローズ。#96002 (Alexey Milovidov).- これで、PostgreSQLエンジンが
BOOLEAN[]を正しく読み取れるようになりました。#72754 を修正しました。#96006 (Alexey Milovidov) 。 - 空のファイルを読み取る際の
ProtobufListフォーマットを修正しました。#70059 をクローズしました。#96007 (Alexey Milovidov). - 空のテーブルで
ProtobufListフォーマットがゴーストレコードを生成してしまう問題を修正。#72596 をクローズ。#96010 (Alexey Milovidov). - 型推論を伴う、分散クエリおよび PREWHERE の特殊なケースで発生する、
UInt64とInt32間のif関数の型不一致を修正しました。#70017 をクローズします。#96012 (Alexey Milovidov). Bool型を含むJITコンパイル済みクエリを修正しました。 #96013 (Alexey Milovidov).- SQLite の TEXT カラムから UUID カラムを読み取る際の論理エラーを修正しました。#71263 をクローズしました。#96016 (Alexey Milovidov).
- SQLite engineにおける
DateTime、Date、UUID、およびその他の型の変換を修正しました。#73481 をクローズします。#96017 (Alexey Milovidov). - 外部データベース (SQLite および PostgreSQL) へのクエリで、
FixedStringの値が誤ってエスケープされていました。#73519 をクローズします。@jh0x と共同で作成。#96019 (Alexey Milovidov). - PRECEDING オフセットが大きい場合に WindowTransform で発生するアサーション失敗を修正しました。#75852 をクローズしました。#96026 (Alexey Milovidov).
- 同じパラメータ名を使用していても異なる値を含む同時実行の非同期 INSERT で、データ破損が発生する可能性がある不具合を修正しました。 #96035 (Seva Potapov) 。
- global profiler の周期 (
global_profiler_real_time_period_nsおよびglobal_profiler_cpu_time_period_nsで制御) を修正しました。設定した値ではなく切り捨てられた値が使用されていたため、profiler が意図した以上に頻繁に起動していました。#96048 (Antonio Andelic) 。 - 以前は、position delete 用の Iceberg マニフェストファイル内で、reference data file がエントリとして存在していても NULL の場合、対応する data files の正しい境界値を取得できませんでした。この PR でこのバグを修正しました。#96061 (Daniil Ivanik) 。
- デフォルトロールの取り消しに関する不具合を修正しました。#96103 (Vitaly Baranov) 。
use_primary_keyが無効で、かつ索引を利用する条件の論理和が非常に多いというまれな条件の組み合わせで発生する、索引解析における use-after-free を修正しました。#96112 (Alexey Milovidov) 。Gorillaコーデックで、明示的に指定されたサイズがデータ型のサイズと一致せず、かつバッファサイズが小さすぎる場合に発生するリグレッションを修正しました。以前のバージョンでは、伸長時に例外が発生していました。#78253 をクローズします。#96118 (Alexey Milovidov).- あるDictionaryが、それを再帰的に参照するMergeテーブルを参照している場合に、そのDictionaryの読み込み時に発生するデッドロックを回避しました。Closes #78360. #96120 (Alexey Milovidov).
- MySQL や JODA スタイルなどの非固定幅フォーマッタを使用した
formatDateTimeでの未初期化の値の使用を修正しました。#96133 (Alexey Milovidov) 。 use_const_adaptive_granularityとindex_granularity_bytesの設定の組み合わせ (つまり「非適応粒度」) により、読み取る行数の計算が誤り、例外が発生していました。#96143 (Alexey Milovidov) 。- S3 や Azure などのオブジェクトストレージ上のファイルライクなテーブルに対して無効な ALTER UPDATE mutation を実行すると、nullptr のデリファレンスが発生する可能性がありました。#92994 をクローズしました。#96162 (Alexey Milovidov).
- 部分的な権限取り消し時に
AccessRights::containsが誤った結果を返す問題を修正しました。 #96170 (pufit). - 誤ったクエリ結果を引き起こす可能性があった、CTE の folded constants におけるクエリ条件 cache のハッシュ衝突を修正しました。#96060 をクローズしました。#96172 (Alexey Milovidov).
- ProcessList で発生する可能性のあるデッドロックを修正しました。これは、キャンセルチェッカーにタスクを追加しているタイミングでメモリオーバーコミットトラッカーが作動すると、ロック順序の逆転が起こり得るためです。 #96182 (Antonio Andelic) 。
- 複数の INNER JOIN と組み合わせた外部結合 (LEFT、RIGHT、または FULL) を含むクエリで、無効な JOIN の並べ替えにより誤った結果が返される不具合を修正しました。外部結合の ON 条件が、先に結合された複数のテーブルのカラムを参照している場合、オプティマイザがすべてのテーブル依存関係を考慮できず、JOIN を誤った順序に並べ替えてしまい、その結果、一部の行が欠落することがありました。Close #95972. #96193 (Vladimir Cherkasov).
- テーブルに統計情報が定義されていない場合、ClickHouse はそれらを読み込もうとしないようにしました。これにより、統計情報ファイルが存在するかどうかを確認するためのオーバーヘッド (100ms 超) を回避できます。 (issue #96068) 。#96233 (Han Fei) 。
optimize_syntax_fuse_functionsを修正し、集約引数がLowCardinality(Nullable)の場合はsum/count/avgをsumCount()に書き換えないようにしました。#95390 をクローズ。#96239 (Nihal Z. Miaji) 。- 一部のケースで、
not INおよびnot has関数で発生していた誤ったパーティションプルーニングを修正しました。#96241 (Nihal Z. Miaji) 。 - ベクトル類似度索引での
stack-use-after-scopeを修正しました。 #96259 (Alexey Milovidov). - クエリの前にSQLコメントがある場合に、テストランナーが error hint comments を認識しない問題を修正しました。#96336 (Yakov Olkhovskiy).
- テーブルの主キーが Nullable で、クエリで第1引数が定数の
coalesce関数を使用している場合に発生する KeyCondition の論理エラーを修正しました。 #96340 (Alexey Milovidov). GROUPING SETS、group_by_use_nulls、および内部にLowCardinalityを含むTupleデータ型の組み合わせにより、クエリパイプライン内で予期しないブロック構造が生じ、論理エラーにつながる可能性がありました。これはNullableTupleの導入後に発生したものです。#96358 (Alexey Milovidov).- 空の式
()を索引とするテーブルを作成できてしまい、無効なメモリアクセスが発生していました。#96363 (Alexey Milovidov). - 古いアナライザで、JOIN と重複する別名がある場合に発生していたクラッシュを修正しました。 #96405 (Ilya Golshtein) 。
- Variant カラムに対する誤ったインプレースフィルタリング最適化により発生していた
Nested columns sizes are inconsistent with local_discriminatorsエラーを修正。 #96410 (Alexey Milovidov). CREATE TABLE ... CLONE AS ...がソーステーブルの完全修飾名を無視する問題を修正しました。#96415 (Hasyimi Bahrudin).mysqlテーブル関数が、KILL QUERY や clickhouse-client でのクエリキャンセル (Ctrl+C) で正しくキャンセルされない問題を修正しました。#96437 (Roman Vasin).max_execution_timeの値が大きいクエリで発生する、キャンセル確認スレッドのライブロックを修正しました。#96450 (Sergei Trifonov).- 分散クエリで小数の
LIMIT/OFFSETを使用した際に、一部のケースで発生していた論理エラーを修正しました。#96475 (Nihal Z. Miaji). - ラムダ関数を含む特定の式におけるヌルポインタの逆参照を修正しました。 #96479 (Alexey Milovidov).
LowCardinalityカラムがNullableに変換された際に、誤った結果が返される不具合を修正しました。#96483 (Nihal Z. Miaji).- 存在しないカラムを参照する、または位置引数を使用する
ORDER BY句を含む Iceberg テーブルの作成時に発生するクラッシュを修正しました。#93280 をクローズします。#96484 (Konstantin Vedernikov). - Nullable のサブフィールドを持つ Tuple カラムで発生するランタイムフィルタの例外を修正しました。 #96509 (Alexey Milovidov).
PREWHEREフィルターカラムにブール値ではない UInt8 値が含まれている場合に、Parquet V3 ネイティブリーダーで発生するLOGICAL_ERROR例外を修正しました。#96594 (Alexey Milovidov) 。- メタデータの変更時にレプリケートテーブルで暗黙的に索引が再生成される問題を修正。 #96600 (Raúl Marín).
- DROP WORKLOAD のデータレースを修正しました。#96614 (Sergei Trifonov).
- パーティション化された insert により、パーティションファイル間でデータが不正に分散されることがある Iceberg table への書き込みのバグを修正しました。 #96620 (Konstantin Vedernikov) 。
- 制約付きの
CREATE TABLEにおけるheap-use-after-freeを修正しました。#96669 (Nikita Taranov). - バッファオーバーフローを防ぐため、bech32 の witness バージョンを検証するようにしました。 #96671 (Raúl Marín).
- 無効な
auth_header設定でデータレイク REST カタログを作成した場合に、system.tablesがエラーを返す問題を修正しました。#96680 (Han Fei) 。 - TTL マージ後、ブロック内のすべての行がフィルタで除外されると、
_minmax_count_projection経由でmin(timestamp)が epoch (1970-01-01) を返してしまう問題を修正しました。 #96703 (Raquel Barbadillo). - パストラバーサルを防ぎ、指定されたメタデータファイルがテーブルディレクトリ内にあることを確実にするため、
iceberg_metadata_file_path設定の検証を改善しました。#96754 (Daniil Ivanik) 。 GROUP BYで使われるVariant引数を取るifNullのクラッシュを修正しました。#96790 (Alexey Milovidov) 。table_disk=1設定が有効なテーブル間で発生していたキャッシュキーの衝突を修正しました。#96818 (Raufs Dunamalijevs) 。- 競合状態により MemoryWorker のパージ用スレッドが停止したままになる不具合を修正しました。#96819 (Antonio Andelic) 。
- Iceberg カタログで認証情報を含むデータをログ出力しないようにしました。 #96831 (Konstantin Vedernikov).
- サーバーエラー発生後の clickhouse-client の終了ステータスを修正しました。#96841 (Vitaly Baranov) 。
- CROSS JOIN を含み、並列レプリカが有効なクエリで、誤った結果が返される可能性がありました。#74337 を修正しました。#96848 (Igor Nikonov).
- 以前に同じカラムに対して論理更新が行われていた場合、
ALTER TABLE DROP COLUMNクエリが失敗する問題を修正しました。#96861 (Anton Popov). plain_rewritableオブジェクトストレージディスクへのアーカイブベースのバックアップ (.zip、.tzst) 作成時に発生するスタックオーバーフロー (クラッシュ) を修正しました。 #96872 (Alexey Milovidov).- 宛先のファイルシステムでディスクフルやその他のI/Oエラーが原因でバックアップに失敗した際に、サーバーがクラッシュする問題を修正しました。 #96873 (Alexey Milovidov).
EXCEPT ALLとINTERSECT ALLが行の重複回数を無視し、それぞれのDISTINCT版と同様に動作してしまう問題を修正しました。#96876 (Alexey Milovidov).- 互換性のない型で
indexOfAssumeSortedを呼び出したときに発生するstd::terminate例外を修正しました (例:IPv4配列に対して整数の検索値を指定した場合) 。#96877 (Alexey Milovidov). group_by_use_nulls = 1と CUBE/ROLLUP/GROUPING SETS を使用したウィンドウ関数で発生する例外Bad cast from type DB::ColumnNullable to DB::ColumnStringを修正しました。#96878 (Alexey Milovidov) 。- JIT コンパイルされた式で
DateTimeからDateTime64への変換時に誤った結果になる問題を修正しました (たとえば、CASE/if/multiIfでDateTime型が混在する場合) 。値が適切にスケーリングされずに再解釈されていたため、式のコンパイルが有効になると誤ったタイムスタンプが生成されていました。#96879 (Alexey Milovidov). CoalescingMergeTreeで、スキップ索引の式が定数カラムを生成する場合 (例: 整数カラムに対するifNotFinite(1, c0)のbloom_filter) に発生する論理エラー例外を修正しました。 #96880 (Alexey Milovidov).- 誤って HTTP で TLS 対応のネイティブプロトコルポートに接続した場合に表示されるエラーメッセージ内の誤ったポート番号を修正しました。#96881 (Alexey Milovidov).
- CTEやサブクエリで、サブクエリごとの
SETTINGSがfileのようなテーブル関数に適用されない不具合を修正しました。#96882 (Alexey Milovidov). - X509 証明書の読み取り時に発生する BIO オブジェクトのメモリリークを修正しました。 #96885 (Alexey Milovidov).
- 具体的な値が必要な箇所 (たとえば
arrayFoldのアキュムレータ引数) にラムダ式が渡された場合に、クエリアナライザでLOGICAL_ERROR例外が発生する問題を修正しました。 #96892 (Alexey Milovidov). - 複雑にネストされた型 (Nullable Enum 値を持つ Map を含む Nullable Tuple の Array) をキャストする際に発生する
ColumnNullable is not compatible with original例外を修正しました。#96924 (Alexey Milovidov). - 分片化された
HASHEDDictionary の並列ロードにおける race condition を修正し、まれに一部の行が読み込まれないことがある問題を解消しました。 #96953 (Alexey Milovidov). REPLACE PARTITIONとバックグラウンドミューテーションの間で発生する競合状態を修正し、置換後に古いデータと新しいデータの両方が見えてしまうことがある問題を解消しました。 #96955 (Alexey Milovidov).- INNER JOIN および WHERE 句と組み合わせて使用した際に
arrayJoin関数が重複した行を生成する問題を修正しました。これは、部分的な述語プッシュダウン最適化によって、arrayJoinを含むフィルタが誤って JOIN の下にプッシュダウンされていたことが原因です。#96989 (Alexey Milovidov). BlockIO::operator=がquery_metadata_cacheを move しないことが原因で発生していたclearCachesのクラッシュ (SEGFAULT) を修正しました。これにより、cache されたストレージスナップショットが早期に破棄され、MergeTreeDataストレージで use-after-free が発生していました。#96995 (Alexey Milovidov).ifまたはtransform関数がNullable(String)を返す場合 (例:GROUP BY ... WITH CUBEでgroup_by_use_nulls = trueのとき) に、IfTransformStringsToEnumPassで発生するアサーション失敗を修正しました。#97002 (Alexey Milovidov).INSERT ... SELECTでUNION ALLおよびJOINを使用した際に、block をまとめる処理の後で定数文字列カラムに誤った値が入ることがあり、その結果不正なデータが書き込まれる問題を修正しました。#97019 (Hasyimi Bahrudin) 。ALTER TABLE MODIFY COLUMNによってカラムの型が変更された後、カラム STATISTICS の構築時に発生するassert_cast例外 (またはリリースビルドでのサイレントなデータ破損) を修正しました。 #97027 (Alexey Milovidov).- Azure Blob Storage、SSHプロトコル、およびArrow Flightインターフェイスでの未初期化メモリの読み取りを修正しました。 #97053 (Alexey Milovidov).
- 索引が、ROW POLICY/PREWHERE および FINAL を含むクエリの結果に影響していたケースを修正しました。#97076 (Yarik Briukhovetskyi).
MergeTreeテーブルにおけるREPLACE PARTITIONとバックグラウンドミューテーションの間に残っていた race condition を修正し、古いデータが再び現れる可能性を解消しました。#97105 (Alexey Milovidov).- エイリアスカラムを含む暗黙的インデックスを修正し、作成前に完全な検証を行うようにしました。 #97115 (Raúl Marín).
arrayROCAUCのように const 引数が必要な関数におけるFunctionVariantAdaptorの論理エラーを修正しました。#97116 (Bharat Nallan).PartCheckThreadが、すでにミューテーション適用済みのパーツに対するGET_PARTを再度キューに追加し、parts_to_doに実体のないエントリが残ることでミューテーションが停滞する問題を修正しました。#97162 (Alexey Milovidov).ORDER BY ... LIMITを含むサブクエリのクエリプランにおける行数推定を修正しました。これにより、オプティマイザが最適でない JOIN 順序を選択する可能性がありました。 #97193 (Alexander Gololobov).- Variant カラムを扱う関数が
Nothing型を返した際にFunctionVariantAdaptorで発生するLOGICAL_ERROR例外を修正しました。これは、UNION ALLクエリ内の空の配列で発生することがあります。#97213 (Alexey Milovidov). - 同時アクセス時に例外を引き起こす可能性があった、S3 のマルチパートコピー処理 (例: S3 への
BACKUP/RESTORE) 中のデータ競合を修正しました。#97227 (Azat Khuzhin). WHERE句内のarrayJoinがJOINの両側のカラムを参照している場合に発生するLOGICAL_ERROR例外を修正しました。#97239 (Alexey Milovidov).- PREWHERE を伴う Tuple 内のスパースな
Nullable(String)で、.sizeサブカラムの読み取り時に発生するLOGICAL_ERROR例外を修正しました。 #97264 (Alexey Milovidov). LazyMaterializingTransformで、非アダプティブインデックス粒度 (index_granularity_bytes = 0) のテーブルをORDER BY ... LIMITで読み取る際に発生する例外 “lazy chunk の行数が offsets の数と一致しない” を修正しました。#97270 (Alexey Milovidov) 。SYSTEM RESTART REPLICAで、テーブルの再作成が ZooKeeper 以外の例外 (たとえばメモリ制限) で失敗した場合に、データベースからテーブルが消失し、DatabaseReplicatedでメタデータダイジェストの不一致が発生する問題を修正しました。 #97276 (Alexey Milovidov).system.merge_tree_settingsのフィールドreadonlyが、特定の MergeTree 設定 (例:index_granularity) が無条件で readonly であることを正しく反映するようになりました。 #97277 (Robert Schulze).- データなしでストレージのスナップショットが作成された場合に、
MergeTreeテーブルでのcount()最適化中にクラッシュする問題を修正しました。#97281 (Pablo Marcos). - スタックトレースのデバッグ情報から関数名を解決する際に発生する可能性のあるクラッシュを修正しました。 #97294 (Azat Khuzhin).
- analyzer_compatibility_join_using_top_level_identifier と ALIAS カラムに関する論理エラーを修正しました。#96228 をクローズしました。#97297 (Vladimir Cherkasov).
QUALIFY句でテキスト索引付きのカラムを使用した際にapplyOrderで発生するLOGICAL_ERROR例外を修正しました。#97313 (Alexey Milovidov).- システムテーブル
system.functionsで、内部関数のcategoriesが''ではなく'Internal'と表示されるようになりました。#97315 (Robert Schulze). - RIGHT JOIN の連鎖と有効化された並列レプリカを使用するクエリで、誤った結果が返される可能性がありました。この問題を修正しました。#74341。#97316 (Igor Nikonov).
- テーブル名が変更された場合に、リフレッシャブルmaterialized viewやその他のシナリオで発生することがあった、誤った
TABLE_UUID_MISMATCHエラーを修正しました。 #97323 (Azat Khuzhin). - 遅延バックアップのバッチ処理で、ダングリングしたストレージポインタに対するuse-after-freeが原因で発生していた
StorageKeeperMapバックアップのセグメンテーションフォルトを修正しました。 #97336 (Alexey Milovidov). mutations_execute_subqueries_on_initiatorが有効な場合の、ALTER UPDATE/DELETE内でスカラー サブクエリを含むexists関数を修正しました。スカラー サブクエリが誤って評価されていたため、エラーが発生したり、次回のサーバー再起動時にテーブルを読み込めなくなる破損した mutation コマンドが生成されたりする可能性がありました。#97347 (Kirill Kopnev) 。- LowCardinality 型を含む Variant カラムと NULL を比較した際に発生する論理例外
Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8)))を修正しました。#97379 (Alexey Milovidov). - 分片クエリキャッシュが有効な状態で
EXCHANGE TABLESを並行実行した際に発生し得る競合状態を修正しました。 #97411 (Konstantin Vedernikov). - 外側の
Tupleラッパーのnullable_sourceによって、変換後の配列カラムが不一致なカラム型に置き換えられた場合に発生する、ArrayからQBitへの変換時のLOGICAL_ERROR例外を修正しました。#97389 をクローズします。#97413 (Alexey Milovidov). - 括弧内のエイリアス付きタプルリテラルにおける AST フォーマットのラウンドトリップの不整合を修正しました。たとえば、
(('a', 'b') AS x)が誤ってtuple(('a', 'b') AS x)に再フォーマットされていました。#97418 (Alexey Milovidov). - パースの失敗により 0 行の空ブロックが生成された場合に、重複排除を伴う非同期挿入中に発生していた例外を修正しました。#97460 (Sema Checherinda) 。
- 非アダプティブインデックス粒度 (
index_granularity_bytes = 0) のテーブルをORDER BY ... LIMITで読み取る際に、LazyMaterializingTransformで発生する例外 “lazy chunk の行数が offsets の数と一致しない” を修正しました。#97482 (Alexey Milovidov) 。 - Iceberg への insert に関する設定を修正。
allow_experimental_insert_into_iceberg設定の別名を追加。#97483 (Konstantin Vedernikov). optimize_inverse_dictionary_lookup最適化がdictGet(...)の述語を書き換える際、CREATE TEMPORARY TABLE権限を持たないユーザーでACCESS_DENIEDが発生する問題を修正しました。ClickHouse はこの書き換えをスキップし、元の式を実行するようになりました。#97269 をクローズしました。#97484 (Nihal Z. Miaji).- 内部にスパースなサブカラムを持つカラム (例: スパースなシリアライゼーションプロファイルが異なる MergeTree パーツの
Tupleカラム) の処理時に、SetとMergeTreeIndexSetで発生するアサーション失敗 (デバッグ/サニタイザービルドでは例外) を修正しました。 #97493 (Alexey Milovidov). - StorageKafka2 における、use-after-free が発生する可能性のある不具合を修正しました。 #97520 (Bharat Nallan).
- 出力パスにディレクトリが含まれる場合の、
TRUNCATEおよびinto_outfile_create_parent_directories設定を使用したINTO OUTFILEの不具合を修正しました。#97549 (Alexey Milovidov) 。 - アナライザが有効な状態で、
merge()テーブル関数を介して ALIAS カラム内にラムダ式を含むテーブルをクエリした際に発生するBAD_ARGUMENTSエラーを修正しました。#97551 (Alexey Milovidov). - Keeper の zxid が 0 のときに
system.zookeeper_infoで発生する例外を修正しました。#97553 (Alexey Milovidov) 。 - キーの型が String でない場合に
ip_trieDictionary で発生する可能性がある論理エラーを修正しました。 #97555 (Bharat Nallan). - ベースの
RestCatalogで REST カタログの OAuth 認証が機能しない問題を修正しました (それまではOneLakeCatalogのような派生カタログでしか機能していませんでした) 。この不具合により、BigLake カタログの導入後、デフォルトの REST カタログが使えない状態になっていました。#97561 (Konstantin Vedernikov). - Geometry 関数 (
perimeterSpherical、areaSphericalなど) は、GeometryVariant 型に加えて、個別のジオメトリサブタイプ (Polygon、Ring、Pointなど) も受け付けるようになりました。#97571 (Alexey Milovidov). Nullable(Tuple(... Nullable(T) ...))型のサブカラムに対してisNull/isNotNullを使用した際に発生するLOGICAL_ERROR例外を修正しました。#97224 をクローズしました。#97582 (Alexey Milovidov).- 論理更新時にパッチパートを適用する際のヌルポインタの逆参照を修正しました。 #97583 (Alexey Milovidov).
BaseSettings::readBinaryは、accessor.findが返したインデックスを、未検出を示す番兵値 (つまり-1) かどうか確認せずにfield_infos[]に渡しており、その結果std::vectorの範囲外アクセスを引き起こす可能性があります。この問題は libcxx hardening によって発見されました。これはおそらく、新しいサーバーが古いサーバーに未知の設定を送信した際のクエリプランのデシリアライズ中に発生していました。文字列ベースの読み取りメソッドではすでにこれを正しく処理していましたが、readBinaryには同じチェックが欠けていました。#97585 (Miсhael Stetsyuk) 。- 一方のブランチに常に偽となる条件がある
UNION ALLクエリで、本来は何も返さないはずのブランチが誤ってデータを読み込んでしまい、不正なクエリ結果を返していた問題を修正しました。 #97620 (Bharat Nallan). - 単一カラム参照を含む
IN (col)がUNSUPPORTED_METHODエラーで失敗する不具合を修正しました。#97646 (Alexey Milovidov) 。 GROUP BY ... WITH ROLLUP/CUBE実行時に、キーにNullable(Tuple(...))内のLowCardinality(Nullable(...))が含まれる場合に発生していた logical error 例外を修正しました。#97647 (Alexey Milovidov) 。NOT (1, 1, 1)に対する AST のフォーマットの不整合を修正し、デバッグビルドでLOGICAL_ERRORが発生する可能性がある問題を解消しました。 #97653 (Alexey Milovidov).- 空の ZooKeeper トランザクションログファイルを検出した際に発生する
keeper-converterの例外を修正しました。 #97673 (Alexey Milovidov) 。
ビルド/テスト/パッケージングの改善
- ClickHouse を clang-23 (master) でビルドできるようになりました。#95578 (Alexey Milovidov) 。
- 修正:
bind_hostが設定されている場合はis_localを強制的に false にし、これをインテグレーションテストに置き換えました。#74741 のフォローアップです。#93109 #96018 (Zhigao Hong). - ストレステスト: CI におけるストレステストとアップグレードテストを修正し、
no-{build}タグを無視するようにしました。互換性のランダム化を追加しました。#94693 (Nikita Fomichev). - ビルドから parser_memory_profiler バイナリを公開しました。AST のメモリ使用量を分析するために利用できるツールです。#95826 (Ilya Yatsishin).
- 結果内のシンボルを解決した
.heap.symファイルを生成するparser_memory_profilerツールに、--symbolizeフラグを追加しました。#96477 (Ilya Yatsishin). - 結合テストでサードパーティ製のDockerイメージを特定のバージョンに固定。 #96500 (Alexey Milovidov).
OpenSSLを動的にリンクできるようにするオプションを復活させました。これは推奨されておらず、どの本番ビルドでも使われていませんが、インターネット上の愛好家向けにこの選択肢は引き続き残されています。#96506 (Govind R Nair).Coordination::OpNum向けの型別特殊化を用いることで、magic_enumの範囲を [-100, 1000] からデフォルトの [-128, 127] に縮小し、ビルド時間を短縮しました。#96632 (Alexey Milovidov) 。- ビルド時間を削減するため、Function クラスから不要な C++ テンプレートを削除しました。#96646 (Alexey Milovidov) 。
- ビルドの並列性を向上させるため、
StorageSystemLicensesの生成を configure 時ではなく構成時に行うようにしました。#96697 (Alexey Milovidov). - ライセンススキャンの並列化。 #96727 (Raúl Marín).
- SSH プロトコル対応のためのステートレスな機能テストを追加しました。 #96996 (Alexey Milovidov).
- Kafka 3.9.0 をステートレス機能テスト用のインフラストラクチャに追加し、ClickHouse Keeper を ZooKeeper として使って Kafka および Kafka2 テーブルエンジンを直接テストできるようにしました。新たに追加された 6 件のステートレステストでは、基本的な produce/consume、仮想カラム、INSERT、複数のフォーマット、破損メッセージの処理、Keeper ベースのオフセット保存をカバーしています。#96997 (Alexey Milovidov).
- PGO+BOLT で最適化した clang ツールチェーンをビルドする CI ワークフローを追加しました。 #96991 (Alexey Milovidov).
- CI では PGO 最適化済みの LLVM/Clang ビルドを使用し、ビルド速度が 20..30% 向上する見込みです。#97031 (Alexey Milovidov) 。
- glibc の数学関数を llvm-libc の実装へ置き換えました。#90151 (Konstantin Bogdanov) 。
- Boostを1.83から1.90に更新し、デバッグビルドで発生していた
devectorのアサーション失敗を修正しました。#97037 (Alexey Milovidov) 。 postgresを REL_18_1 に更新しました。#95189 (Konstantin Bogdanov) 。libexpat2.7.3 を使用するようになりました。 #95218 (Konstantin Bogdanov).OpenSSL3.5.5 を使用します。 #95345 (Konstantin Bogdanov).simdjsonv4.2.4 を使用する。 #97129 (Konstantin Bogdanov).libarchive3.8.5 を使用。 #97131 (Konstantin Bogdanov).fast_floatv8.2.3 を採用。#97133 (Konstantin Bogdanov) 。abseil-cpp20260107.1 とs2geometryv0.13.1 を使用。#97134 (Konstantin Bogdanov) 。libxml2を 2.15.1 にアップデート。 #95574 (Robert Schulze).- EOL に達した、または削除されたベースイメージを使用していた 7 個の Tier-3 統合テスト用 Docker イメージを、現在サポートされているバージョンに更新しました。#97314 (Rahul).
- TPC-DSベンチマーククエリを追加しました。#97349 (Raufs Dunamalijevs) 。
- 個別の x86 命令セット向けの cmake オプション (
ENABLE_SSSE3、ENABLE_AVX2、NO_SSE3_OR_HIGHER、ARCH_NATIVEなど) を、実行時ディスパッチシステムですでに使用されている標準的な x86-64 マイクロアーキテクチャレベルに合わせて、単一の数値オプションX86_ARCH_LEVEL(1/2/3/4) に置き換えました。#97354 (Raúl Marín) 。 FunctionBinaryArithmeticで、除算以外の演算についてはdivision_by_nullable=trueのテンプレートバリアントをインスタンス化しないようにし、コンパイル時間とバイナリサイズを削減しました。#97496 (Raúl Marín).typeid_cast.h、assert_cast.h、Context_fwd.h、IDataType.h、および各種 Column ヘッダーなどの広く参照されるヘッダーからException.hを हटし、include の影響範囲を縮小しました。#97497 (Raúl Marín) 。- ホストコンパイラのヘッダーではなく、常にバンドル版の
compiler-rtヘッダー (sanitizer および XRay インターフェイス) を使用し、デフォルトでcompiler-rtライブラリをソースコードからビルドするようにしました。#97499 (Raúl Marín) 。 long doubleを十分に利用できるプラットフォームでは、wide_integer_impl.hにboost/multiprecisionのヘッダーを含めないようにし、ビルド時間を短縮しました。#96633 (Alexey Milovidov).- LLVM コードカバレッジジョブを実装し、まずは master ブランチでのみ有効化しました。#90952 (Alexey Bakharew) 。
- リリースビルドで libcxx の高速ハードニングを有効にしました。これは主に範囲外アクセスのチェックに必要です。Performance tests の結果から、性能への目立った影響はないと見込まれます。#94757 (Miсhael Stetsyuk).
後方互換性を持たない変更
- フォーマッタ内での別名の誤った置換によって生じていたフォーマットの不整合を修正しました。これにより #82833 をクローズします。これにより #82832 をクローズします。これにより #68296 をクローズします。この変更は後方互換性に影響する可能性があります: アナライザが無効な場合、別名を参照する IN を含む一部の CREATE VIEW クエリは処理できません。この非互換性を回避するには、アナライザを有効にしてください (24.3 以降はデフォルトで有効です) 。#82838 (Alexey Milovidov).
- コーデック
DEFLATE_QPLおよびZSTD_QATは削除されました。既存のDEFLATE_QPLまたはZSTD_QATで圧縮されたデータは、アップグレード前に別のコーデックへ変換しておくことを推奨します。なお、これらのコーデックを使用するには、設定enable_deflate_qpl_codecおよびenable_zstd_qat_codecを有効にしておく必要がありました。 #92150 (Robert Schulze). system.query_log.exceptionで stderr のキャプチャを有効にし、UDF のデバッグを改善しました。これまで UDF の stderr はファイルにしか記録されず、クエリログには出力されなかったため、デバッグは事実上不可能でした。現在は stderr がデフォルトで例外をトリガーし、送出前に最大 1MB まで完全に蓄積されるようになったため、完全な Python トレースバックとエラーメッセージがsystem.query_log.exceptionに記録され、より効果的にトラブルシューティングできるようになりました。#92209 (Xu Jia).JOIN USING ()句の空のカラムリストは、現在では構文エラーと見なされます。以前は、クエリ実行時にINVALID_JOIN_ON_EXPRESSIONとして扱われる想定でした。Joinストレージとの結合など一部のケースでは、LOGICAL_ERRORを引き起こしていました。これにより #82502 をクローズします。#92371 (Vladimir Cherkasov).- JSON型では、デフォルトで SKIP REGEXP に部分一致を使用するようになりました。#79250 をクローズ。#92847 (Pavel Kruglov).
- “Allow INSERT into simple ALIAS columns” を元に戻しました (ClickHouse/ClickHouse#84154 を差し戻し) 。カスタムフォーマットでは動作せず、設定でも制御されていません。#92849 (Azat Khuzhin).
- データレイクのカタログがオブジェクトストレージにアクセスできない場合に、エラーを発生させる設定。 #93606 (Konstantin Vedernikov).
Lazyデータベースエンジンは削除され、現在は利用できません。#91231 をクローズ。#93627 (Alexey Milovidov).metric_logのtransposed_with_wide_viewモードは、バグのため使用できないことから削除されました。今後、このモードでsystem.metric_logを定義することはできなくなります。これは #78412 を部分的に差し戻すものです。#93867 (Alexey Milovidov) 。- ワークロード向けのCPUスケジューリングは、デフォルトでプリエンプティブ方式になりました。
cpu_slot_preemptionサーバー設定を参照してください。#94060 (Sergei Trifonov) 。 - 破損したパーツを防ぐため、索引ファイル名をエスケープするようにしました。この変更により、以前のバージョンで作成され、名前に非 ASCII 文字を含む索引は ClickHouse で読み込めなくなります。これに対処するには、MergeTree の設定
escape_index_filenamesを使用できます。#94079 (Raúl Marín). - フォーマット設定
exact_rows_before_limit、rows_before_aggregation、cross_to_inner_join_rewrite、regexp_dict_allow_hyperscan、regexp_dict_flag_case_insensitive、regexp_dict_flag_dotall、dictionary_use_async_executorは、通常の (フォーマット設定ではない) 設定に変更されました。これは完全に内部的な変更であり、Iceberg、Delta Lake、Kafka、S3、S3Queue、Azure、Hive、RabbitMQ、Set、FileLog、または NATS のテーブルエンジン定義でこれらの設定のいずれかを指定していた (可能性は低い) 場合を除き、ユーザーに見える副作用はありません。こうした場合、これらの設定は以前は無視されていましたが、現在はそのような定義でエラーになります。#94106 (Robert Schulze). joinGet/joinGetOrNull関数では、基になる Join table に対してSELECT権限が必要になりました。この変更により、joinGet('db.table', 'column', key)を実行するには、ユーザーに Join table で定義されたキーカラムと、取得する attribute カラムの両方に対するSELECT権限が必要です。これらの権限がない queries は、ACCESS_DENIEDで失敗します。移行するには、テーブル全体へのアクセスにはGRANT SELECT ON db.join_table TO userを、カラム単位のアクセスにはGRANT SELECT(key_col, attr_col) ON db.join_table TO userを使用して、必要な permissions を付与してください。この変更は、これまで明示的なSELECTgrants を設定していなかった、joinGet/joinGetOrNullに依存するすべての users および applications に影響します。#94307 (Vladimir Cherkasov).CREATE TABLE ... AS ...クエリではSHOW COLUMNSをチェックするようになりました。以前はSHOW TABLESをチェックしていましたが、この種の権限チェックに必要な権限としては不適切でした。#94556 (pufit).Hash出力フォーマットがブロックサイズに依存しないようになりました。#94503 (Alexey Milovidov) 。この変更により、従来のバージョンと比べて出力されるハッシュ値が変わる点に注意してください。
新機能
- ClickHouse Keeper 向けの HTTP API と内蔵 Web UI。#78181 (pufit と speeedmaster) 。
- 非同期 INSERT の重複排除が、依存する materialized view でも機能するようになりました。block_id の衝突が発生すると、元の block は block_id に関連付けられた行を除外するようにフィルタリングされ、残りの行には関連するすべての materialized view の SELECT クエリが適用されて変換されます。これにより、競合する行を含まない元の block が再構築されます。#89140 (Sema Checherinda)。materialized view が関係する場合でも、非同期 INSERT で重複排除を使用できるようになりました。#93957 (Sema Checherinda)。
- projection索引機能を簡素化し、拡張するための新しい構文とフレームワークが導入されました。これは https://github.com/ClickHouse/ClickHouse/pull/81021 のフォローアップです。#91844 (Amos Bird).
Arrayカラムでのテキスト索引のサポートを追加しました。#89895 (Jimmy Aguilar Mena).- デフォルトで
use_variant_as_common_typeが有効になり、Array内、UNIONクエリ内、およびif/multiIf/caseの分岐で互換性のない型を使用できるようになりました。#90677 (Alexey Milovidov). - 新しいシステムテーブル
zookeeper_info。 #88014 を実装しました。 #90809 (Smita Kulkarni) 。 - すべての関数が
Variant型をサポート。 #90900 (Bharat Nallan). - Prometheus の
/metricsエンドポイントに、主にバージョン情報を含むClickHouse_Infoメトリクスを追加し、詳細なバージョン情報を時系列で追跡するチャートを作成できるようにしました。 #91125 (Christoph Wurm). - Keeper に、クラスター構成を変更できる新しい4文字コマンド
rcfgを追加しました。このコマンドでは、標準のreconfigureリクエストよりも柔軟に構成を変更できます。引数にはjson文字列を取ります。TCP インターフェイスに送信するバイト列全体は、rcfg{json_string_length_big_endian}{json_string}のようになります。コマンドの例:{"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}。#91354 (alesapin). - 指定した区切り文字で区切られた文字列内の部分文字列の順序を反転する関数
reverseBySeparatorを追加しました。#91463 をクローズしました。#91780 (Xuewei Wang). - 挿入時のブロック生成をより細かく制御できる新しい設定
max_insert_block_size_bytesを追加しました。 #92833 (Kirill Kopnev). ignore_on_cluster_for_replicated_database設定が有効な場合、Replicatedデータベースに対してON CLUSTER句を付けた DDLクエリを実行できます。この場合、クラスター名は無視されます。#92872 (Kirill).- 関数
mergeTreeAnalyzeIndexesを実装。 #92954 (Azat Khuzhin). - 新しい設定
use_primary_keyを追加しました。falseに設定すると、主キーに基づくグラニュールのプルーニングを無効にできます。#93319 (Nihal Z. Miaji). icebergLocalClusterテーブル関数が追加されました。#93323 (Anton Ivashkin) 。- 2点間の余弦距離を近似的に計算する
cosineDistanceTransposed関数が追加されました。#93621 (Raufs Dunamalijevs) 。 - 各データパートに含まれるファイル数を表示する
filesカラムを system.parts テーブルに追加しました。#94337 (Match) 。 - 同時実行制御向けに、max-min fair スケジューラが追加されました。これは、多数のクエリが限られた CPU スロットをめぐって競合する高オーバーサブスクリプション環境で、より高い公平性を実現します。長時間実行クエリが時間の経過とともにより多くのスロットを蓄積していても、短時間実行クエリが不利になることはありません。
concurrent_threads_schedulerサーバー設定をmax_min_fairに設定することで有効になります。#94732 (Sergei Trifonov) 。 - ClickHouse client で、サーバーへの接続時に TLS SNI を上書きできるようになりました。#89761 (Matt Klein) 。
joinGet関数の呼び出しで一時テーブルをサポート。 #92973 (Eduard Karacharov).DeltaLaketable engine で削除ベクターをサポートするようになりました。 #93852 (Kseniia Sumarokova).deltaLakeClusterが deletion vectors に対応しました。#94365 (Kseniia Sumarokova) 。- データレイク向けの Google Cloud Storage のサポート。#93866 (Konstantin Vedernikov) 。
実験的機能
QBitを Experimental から ベータに昇格しました。#93816 (Raufs Dunamalijevs).Nullable(Tuple)のサポートを追加しました。有効にするにはallow_experimental_nullable_tuple_type = 1を設定してください。#89643 (Nihal Z. Miaji).- https://github.com/ClickHouse/ClickHouse/pull/84423 に続き、Paimon REST カタログをサポートしました。#92011 (JIaQi Tang).
パフォーマンス改善
- 設定
use_skip_indexes_on_data_readは、デフォルトで有効になりました。この設定により、読み込みと同時にストリーミング方式でフィルタリングできるようになり、クエリのパフォーマンスと起動時間が向上します。#93407 (Shankar Iyer). LowCardinalityカラムに対するDISTINCTのパフォーマンスを改善しました。#5917 をクローズしました。#91639 (Nihal Z. Miaji) 。distinctJSONPaths集約関数を最適化し、JSONカラム全体ではなく、データパーツから JSON パスのみを読み取るようにしました。#92196 (Pavel Kruglov) 。- JOIN へのプッシュダウンに対応するフィルタが増えました。#85556 (Nikita Taranov).
- filter が片側の入力のみを使う場合に、join の ON 条件からの push down に対応するケースをさらに拡大しました。
ANY、SEMI、ANTIjoin のサポートを追加しました。#92584 (Dmitry Novik). SEMI JOINのフィルタをプッシュダウンするために、同等の集合を使用できるようにしました。#85239 をクローズしました。#92837 (Dmitry Novik) 。- 右側が空の場合、ハッシュ結合の左側の読み取りをスキップするようになりました。以前は、最初の空でないブロックに到達するまで左側を読み取っていたため、フィルタリングや集約の負荷が高い場合には多くの処理が発生する可能性がありました。#94062 (Alexander Gololobov).
- クエリパイプライン内でデータをパーティション化するために、“fastrange” (Daniel Lemire) 方式を採用しました。これにより、並列ソートやJOINが改善される可能性があります。#93080 (Alexey Milovidov).
- PARTITION BY がソートキーと一致する場合、またはそのプレフィックスである場合のウィンドウ関数の性能を向上させました。 #87299 (Nikita Taranov).
- 外側のフィルタがビューにプッシュダウンされるようになり、ローカルノードとリモートノードの両方でPREWHEREを適用できるようになりました。#88189 を解決しました。#88316 (Igor Nikonov) 。
- より多くの関数でJITコンパイルを実装しました。#73509 をクローズしました。#88770 (Alexey Milovidov、Taiyang Li と共同) 。
FINALクエリで使用されるスキップ索引が主キーの一部であるカラム上にある場合、他のパーツで主キーの積集合を確認する追加ステップは不要となり、現在は実行されなくなりました。#85897 を解消しました。#93899 (Shankar Iyer) 。- 小数値の
LIMITおよびOFFSETに対するパフォーマンスとメモリ使用量を最適化しました。#91167 (Ahmed Gouda) 。 - Parquet リーダー V3 のプリフェッチャーで、より高速なランダム読み取りロジックを使用するように修正しました。#90890 をクローズしました。#91435 (Arsen Muk) 。
icebergClusterのパフォーマンスを改善。#91462 をクローズ。#91537 (Yang Jiang).- 定数フィルターでは仮想カラムで絞り込まない。#91588 (c-end).
- adaptive write buffers を有効にすることで、非常に列数の多いテーブルにおける wide パーツでの INSERT/merges のメモリ使用量を削減します。暗号化ディスクに対する adaptive write buffers のサポートを追加しました。 #92250 (Azat Khuzhin).
- 索引内で検索するトークン数を削減し、テキスト索引と
sparseGramsトークナイザーを用いた全文検索の性能を向上させました。#93078 (Anton Popov). - Function
isValidASCIIは、すべてASCIIの入力値で有効になるケース向けに最適化されました。#93347 (Robert Schulze) 。 - read-in-order 最適化は、WHERE 条件によって ORDER BY カラムが定数になるケースを認識し、逆順での読み取りを効率的に実行できるようになりました。これにより、
WHERE tenant='42' ORDER BY tenant, event_time DESCのようなマルチテナントクエリでは、フルソートを行わずに InReverseOrder を利用できるようになります。”. #94103 (matanper). - メモリ使用量を最適化するため、値パラメータを ASTLiteral の子ノードではなく (string, integer) のペアとして格納する Enum AST 専用クラスを導入しました。 #94178 (Ilya Yatsishin).
- 複数のレプリカでの分散索引解析。共有ストレージや、クラスター内の大量のデータで効果を発揮します。これは SharedMergeTree (ClickHouse Cloud) に適用でき、共有ストレージ上の他の種類の MergeTree テーブルにも適用可能になる場合があります。#86786 (Azat Khuzhin) 。
- 以下の場合は joinランタイムフィルタを無効化してオーバーヘッドを削減: - bloom filter でセットされるビットが多すぎる場合 - 実行時に除外される行が少なすぎる場合。 #91578 (Alexander Gololobov).
- 相関サブクエリの入力にインメモリバッファを使用し、複数回評価するのを防ぎます。#79890 の一部。#91205 (Dmitry Novik).
- すべてのレプリカが、並列レプリカ読み取り時に孤立した範囲を並行して引き取れるようになりました。これにより、負荷分散が改善され、ロングテールレイテンシが低減されます。#91374 (zoomxi).
- 外部集約/ソート/結合で、あらゆるコンテキストでクエリ設定
temporary_files_codecが適用されるようになりました。Grace Hash Join のプロファイルイベントが欠落していた問題を修正しました。#92388 (Vladimir Cherkasov). - 集約/ソート時にディスクへスピルする際のクエリのメモリ使用量検出を、より堅牢にしました。#92500 (Azat Khuzhin) 。
- 集約キーカラムについて、総行数と NDV (異なる値の数) の統計を推定します。 #92812 (Alexander Gololobov) 。
- simdcomp によりポスティングリストの圧縮を最適化しました。#92871 (Peng Jian) 。
- バケットを用いて S3Queue Ordered モードの処理をリファクタリングしました。これにより、Keeper へのリクエスト数が減り、パフォーマンスの向上も見込まれます。#92889 (Kseniia Sumarokova) 。
- 関数
mapContainsKeyLikeとmapContainsValueLikeは、それぞれmapKeys()またはmapValues()に対するテキスト索引を利用できるようになりました。#93049 (Michael Jarrett) 。 - Linux 以外のシステムでのメモリ使用量を削減しました (jemalloc のダーティページの即時パージを有効にしました) 。#93360 (Eduard Karacharov) 。
- ダーティページサイズと
max_server_memory_usageの比率がmemory_worker_purge_dirty_pages_threshold_ratioを超えた場合、jemallocアリーナを強制的にパージするようになりました。 #93500 (Eduard Karacharov). - AST のメモリ使用量を削減。 #93601 (Nikolai Kochetov).
- 一部のケースで、ClickHouse がテーブルの読み取り時にメモリ制限を守らないことが確認されていました。この動作は修正されました。#93715 (Nikita Mikhaylov).
- Keeper 拡張機能
CHECK_STATおよびTRY_REMOVEをデフォルトで有効にしました。#93886 (Mikhail Artemenko). - 対応するデータファイルをより適切に選択できるよう、Iceberg マニフェストファイルのエントリから position delete に対応するファイル名の下限・上限を解析するようにしました。 #93980 (Daniil Ivanik).
- JSON カラム内の動的サブカラムの最大数を制御するための設定が、さらに 2 つ追加されました。1 つ目は MergeTree 設定
merge_max_dynamic_subcolumns_in_compact_partで (すでに追加されているmerge_max_dynamic_subcolumns_in_wide_partと同様) 、compact パーツへのマージ時に作成される動的サブカラム数を制限します。2 つ目はクエリレベルの設定max_dynamic_subcolumns_in_json_type_parsingで、JSON データのパース時に作成される動的サブカラム数を制限します。これにより、INSERT 時の上限を指定できるようになります。#94184 (Pavel Kruglov). - 一部のケースでJSONカラムをまとめる処理をわずかに最適化しました。#94247 (Pavel Kruglov) 。
- 本番運用の経験に基づき、スレッドプールのキューサイズを引き下げました。MergeTreeからデータを読み込む前に、明示的なメモリ使用量チェックを追加しました。#94692 (Nikita Mikhaylov).
- CPU 枯渇時にスケジューラが MemoryWorker スレッドを優先するようにし、ClickHouse プロセスを致命的な脅威から保護します。 #94864 (Nikita Mikhaylov).
- jemalloc の dirty page のパージを、MemoryWorker のメインスレッドとは別のスレッドで実行するようにしました。パージに時間がかかると RSS 使用量の更新が遅れ、その結果、プロセスが OOM キルされる可能性があります。総メモリ使用量の割合に基づいて dirty page のパージを開始するための新しい設定
memory_worker_purge_total_memory_threshold_ratioを導入しました。 #94902 (Antonio Andelic).
改善
- Azure Blob Storage で
system.blob_storage_logを利用できるようになりました。#93105 (Alexey Milovidov) 。 - Local と HDFS 向けに
blob_storage_logを実装しました。S3Queueがblob_storage_logへのログ出力でディスク名以外を使用していた場合に発生するエラーを修正しました。blob_storage_logにerror_codeカラムを追加しました。ローカルでのテストを簡単にするため、テスト用の設定ファイルを分割しました。 #93106 (Alexey Milovidov) 。 clickhouse-clientとclickhouse-localで、入力中の数値リテラル内の桁区切り (千、百万など) が強調表示されるようになりました。これにより #93100 が解決されました。#93108 (Alexey Milovidov).clickhouse-clientで、等号の前後にスペースを含むコマンドライン引数をサポートしました。#93077 をクローズしました。#93174 (Cole Smith) 。<interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>を使用すると、CLI クライアントで従来どおり Ctrl-R による通常検索に戻せるようになり、Ctrl-T ではあいまい検索を行えます。#87785 (Larry Snizek) 。- cache をクリアするためのステートメント
SYSTEM DROP [...] CACHEは、そのステートメントが cache を無効にするかのような誤解を招いていました。ClickHouse は現在、より意味が明確なステートメントSYSTEM CLEAR [...] CACHEをサポートしています。古い構文も引き続き利用できます。#93727 (Pranav Tiwari). EmbeddedRocksDBで、複数カラムの主キーをサポートしました。#32819 をクローズ。#33917 (usurai).- スカラー値に対して非定数の IN を使用できるようになりました (
val1 NOT IN if(cond, val2, val3)のようなクエリ) 。#93495 (Yarik Briukhovetskyi) 。 - 未サポートのため、
x-amz-server-side-encryptionヘッダーがHeadObject、UploadPart、CompleteMultipartUploadの S3 リクエストに伝播されないようにしました。#64577 (Francisco J. Jurado Moreno) 。 - S3Queue の ordered モードで Hive パーティション化の追跡に対応しました。#71161 を解決しました。#81040 (Anton Ivashkin).
- ファイルシステムキャッシュの領域予約を最適化しました。
FileCache::collectCandidatesForEvictionは、unique lock を使用せずに実行されるようになりました。#82764 (Kseniia Sumarokova). - サーバーログで複合ローテーション戦略 (サイズ + 時間) をサポートしました。 #87620 (Jianmei Zhang).
- CLI クライアントで、コマンドラインの
--no-warningsの代わりに<warnings>false</warnings>を指定できるようになりました。#87783 (Larry Snizek) 。 avg集約関数で、Date、DateTime、Time型の値を引数としてサポートしました。#82267 をクローズしました。#87845 (Yarik Briukhovetskyi).- 最適化
use_join_disjunctions_push_downは、デフォルトで有効になっています。#89313 (Alexey Milovidov) 。 - 相関サブクエリで、より多くのテーブルエンジンとデータソースの種類をサポートしました。#80775 をクローズしました。#90175 (Dmitry Novik).
- パラメーター化ビューのスキーマが明示的に指定されている場合は、それが表示されます。#88875、#81385 をクローズしました。#90220 (Grigorii Sokolik) 。
- ログが最後にコミットされた索引より前にある場合に、Keeper のログエントリの欠落を正しく処理します。 #90403 (Antonio Andelic).
- JBODボリュームでも正しく動作するよう、
min_free_disk_bytes_to_perform_insert設定を改善しました。#90878 (Aleksandr Musorin) 。 S3table engine とs3table function の named collections でstorage_class_name設定を指定できるようになりました。#91926 (János Benjamin Antal) 。system.zookeeper経由で補助 ZooKeeper への insert をサポートしました。#92092 (RinChanNOW).- Keeper向けに、新たに
KeeperChangelogWrittenBytes、KeeperChangelogFileSyncMicroseconds、KeeperSnapshotWrittenBytes、KeeperSnapshotFileSyncMicrosecondsのプロファイルイベントと、KeeperBatchSizeElementsおよびKeeperBatchSizeBytesのヒストグラムメトリクスを追加しました。 #92149 (Miсhael Stetsyuk). - 新しい設定
trace_profile_events_listを追加し、trace_profile_eventによるトレースを指定したイベント名のリストに限定できるようにしました。これにより、大規模なワークロードでも、より精密なデータ収集が可能になります。#92298 (Alexey Milovidov). - 一時停止可能な failpoint に対する SYSTEM NOTIFY FAILPOINT のサポートを追加しました。 - SYSTEM WAIT FAILPOINT fp PAUSE/RESUME のサポートを追加しました。 #92368 (Shaohua Wang).
system.data_skipping_indicesにcreation(暗黙/明示) カラムを追加しました。#92378 (Raúl Marín) 。- YTsaurus dyn tables のカラムの説明を Dictionary ソースに渡せるようになりました。#92391 (MikhailBurdukov).
- #63985 では、TLS 設定に必要なすべてのパラメータをポート単位で指定できるようにし (コンポーザブルプロトコル を参照) 、グローバルな TLS 設定に依存しなくて済むようにしました。ところが、この実装では依然としてグローバルな
openSSL.server設定セクションが存在することを暗黙的に前提としており、ポートごとに異なる TLS 設定が必要な構成とは相性がよくありません。たとえば keeper-in-server デプロイメントでは、keeper 間の通信と clickhouse client 接続向けに、それぞれ別個の TLS 設定が必要です。 #92457 (Miсhael Stetsyuk) 。 - 悪意のあるペイロードへの対策として、バイナリフォーマットでデコードできる型ノードの総数を制限する新しい設定
input_format_binary_max_type_complexityを導入しました。 #92519 (Raufs Dunamalijevs) 。 system.background_schedule_pool{,_log}に実行中のタスクが反映されるようにしました。ドキュメントを追加。#92587 (Azat Khuzhin).- 履歴に一致する項目が見つからない場合、クライアントの Ctrl+R 検索で現在のクエリを実行するようになりました。 #92749 (Azat Khuzhin).
EXPLAIN indices = 1をEXPLAIN indexes = 1の alias としてサポートしました。#92483 をクローズしました。#92774 (Pranav Tiwari).- Parquet リーダーで、Tuple または Map カラムを JSON として読み取れるようになりました。
select x from file(f.parquet, auto, 'x JSON')は、f.parquet内のカラムxの型が tuple または map であっても動作します。#92864 (Michael Kolupaev)。 - Parquet リーダーで空のタプルをサポートしました。 #92868 (Michael Kolupaev).
- Azure Blob Storage で
nativecopy が BadRequest (例:無効な block list) で失敗した場合、read-write copy にフォールバックするようにしました。これまでは、異なるストレージアカウント間でブロブをコピーする際に発生していた Unauthorized エラーに対してのみ、この処理を行っていました。しかし、“The specified block list is invalid” エラーが発生することもあります。そのため、すべてのnativecopy の失敗で read & write にフォールバックするよう、条件を更新しました。#92888 (Smita Kulkarni). - EC2 インスタンスプロファイルの認証情報を使用して多数の同時実行 S3 クエリを実行する際に発生する、EC2 メタデータエンドポイントのスロットリングを修正しました。以前は各クエリがそれぞれ独自の
AWSInstanceProfileCredentialsProviderを作成していたため、EC2 メタデータサービスへの同時リクエストが発生し、その結果、タイムアウトやHTTP response code: 403エラーを引き起こすことがありました。現在は、認証情報プロバイダーがキャッシュされ、すべてのクエリで共有されます。 #92891 (Sav). - 後方互換性を維持できるよう、
insert_select_deduplicate設定を見直しました。#92951 (Sema Checherinda) 。 - タスクのログが過剰に出力されるのを防ぐため、平均より遅いバックグラウンドタスクのみをログに記録するようにしました (
background_schedule_pool_log.duration_threshold_milliseconds=30) 。#92965 (Azat Khuzhin). - 以前のバージョンでは、一部の C++ 関数名が
system.trace_logおよびsystem.symbolsで誤って (「mangled」のまま) 表示され、demangle関数でもそれらをうまく処理できませんでした。#93074 をクローズします。#93075 (Alexey Milovidov). - リフレッシャブルmaterialized view のバックアップをスキップするためのバックアップ設定
backup_data_from_refreshable_materialized_view_targetsが導入されました。APPEND リフレッシュ戦略の RMV は常にバックアップされます。 #93076 (Julia Kartseva). #93658 (Julia Kartseva) - 関数のような負荷の高い翻訳単位では、デバッグ情報をなくすのではなく、最小限のデバッグ情報を使用するようにしました。#93079 (Alexey Milovidov).
- MinIO 固有のエラーに対応するエラーコードマッピングを実装し、AWS S3 C++ SDK に MinIO 互換性のサポートを追加しました。この変更により、AWS S3 ではなく MinIO デプロイメントを使用する場合でも、ClickHouse が MinIO サーバーのエラーを適切に処理して再試行できるようになり、セルフホストの MinIO クラスター上でオブジェクトストレージを運用するユーザーの信頼性が向上します。 #93082 (XiaoBinMu).
- シンボル化済みの jemalloc プロファイルを出力できるようになり、heap profile の生成時にバイナリが不要になりました。#93099 (Azat Khuzhin) 。
clickhouse git-importツールを復活させました。大きなコミットや不正なコミットで正常に動作しなくなっていたためです。https://presentations.clickhouse.com/2020-matemarketing/ を参照してください。 #93202 (Alexey Milovidov).- クエリログに、URLストレージのパスワードを表示しないようにしました。 #93245 (Konstantin Vedernikov).
flipCoordinatesでGeometry型をサポートしました。#93303 (Bharat Nallan) 。- SYSTEM INSTRUMENT ADD/REMOVE の UX を改善: 関数名に String リテラルを使用し、一致するすべての関数にパッチを適用できるようにし、
REMOVEで function_name を使えるようにしました。#93345 (Pablo Marcos). - マージ時の統計情報のマテリアライズを有効/無効にする新しい設定
materialize_statistics_on_mergeを追加しました。デフォルト値は1です。#93379 (Han Fei) 。 - ClickHouse で、
DESCRIBE SELECTクエリにおいてSELECTを括弧で囲まなくても解析できるようになりました。#58382 を修正しました。#93429 (Yarik Briukhovetskyi). - 一定の確率で cache の正確性チェックをランダムに行うようにしました。#93439 (Kseniia Sumarokova) 。
- JSON において、一方がリテラルでもう一方がネストされたオブジェクトである場合に、重複したパスを許可する設定
type_json_allow_duplicated_key_with_literal_and_nested_objectを追加しました。例:{"a" : 42, "a" : {"b" : 42}}。https://github.com/ClickHouse/ClickHouse/pull/79317 で重複パスに対するこの制限が追加される前に作成されたデータが存在する可能性があり、現在ではそのようなデータをさらに操作するとエラーが発生することがあります。この設定を使用すると、そのような古いデータも引き続きエラーなく使用できます。#93604 (Pavel Kruglov). - Pretty JSON では、単純型の値を個別の行に出力しないようにしました。#93836 (Pavel Kruglov) 。
alter table ... modify setting ...ステートメントが多数ある場合、5秒間ロックを取得できないことがあります。logical errorではなくtimeoutを返すようにしたほうが適切です。 #93856 (Han Fei).- 構文エラー時の過剰な出力を防止しました。この変更以前は SQL スクリプト全体が出力されており、多数のクエリが含まれている可能性がありました。#93876 (Alexey Milovidov).
- Keeper において、統計情報付きの
checkリクエストのバイトサイズを正しく計算するようにしました。#93907 (Mikhail Artemenko). - join の並べ替えで実行時のハッシュテーブルサイズの統計を使用するかどうかを制御するため、
use_hash_table_stats_for_join_reordering設定が追加されました。この設定はデフォルトで有効になっており、collect_hash_table_stats_during_joinsの既存の動作は維持されます。#93912 (Vladimir Cherkasov). - ユーザーは、
system.server_settingsテーブルでネストされたグローバルなサーバー設定 (例:logger.level) を部分的に確認できるようになりました。これは、固定された構造を持つ設定 (リスト、列挙、繰り返しなどがないもの) のみを対象としています。#94001 (Hechem Selmi). QBitが等価比較できるようになりました。#94078 (Raufs Dunamalijevs) 。- Keeper が破損したスナップショットや不整合な変更ログを検出した場合は、手動で中断したりファイルを自動的にクリーンアップしたりする代わりに、例外をスローするようになりました。これにより、手動での介入を前提とした、より安全な Keeper の動作が実現されます。#94168 (Antonio Andelic).
CREATE TABLEの失敗時に不要な残骸が残る可能性がある問題を修正しました。 #94174 (Azat Khuzhin).- パスワードで保護された TLS 秘密鍵の使用時に発生する、未初期化メモリへのアクセス (OpenSSL のバグ) を修正しました。#94182 (Konstantin Bogdanov).
- chdig を v26.1.1 に更新しました。#94290 (Azat Khuzhin) 。
- S3Queue ordered mode で、より汎用的なパーティション化をサポートしました。 #94321 (Bharat Nallan).
- 設定
allow_statistics_optimizeのエイリアスとしてuse_statisticsを追加しました。これにより、既存の設定use_primary_keyおよびuse_skip_indexesとの整合性が高まります。#94366 (Robert Schulze). - Numbers から Enums への変換時に要素が存在するかどうかを確認するための設定
input_format_numbers_enum_on_conversion_errorを有効にしました。#94384 (Elmi Ahmadov) 。 - S3(Azure)Queue の ordered mode で、追跡制限に基づいて失敗したノードをクリーンアップするようになりました (以前は、失敗済みノードと処理済みノードの両方について Unordered mode でのみ行われていましたが、今後は Ordered mode でも失敗したノードに限って行われます) 。 #94412 (Kseniia Sumarokova).
- clickhouse-local の
defaultユーザーでアクセス管理を有効にしました。clickhouse-localのデフォルトユーザーには access_management 権限がなかったため、本来は無制限であるべきにもかかわらず、DROP ROW POLICY IF EXISTSのような操作がACCESS_DENIEDエラーで失敗していました。#94501 (Alexey Milovidov). - YTsaurus の辞書およびテーブルで named collection を有効にしました。#94582 (MikhailBurdukov).
- S3 および Azure Blob Storage 向けの BACKUP/RESTORE で、SQL で定義した named collection をサポートしました。#94604 をクローズします。#94605 (Pablo Marcos) 。
- ordered モードの S3Queue で、パーティションキーに基づくバケット分けをサポートしました。#94698 (Bharat Nallan) 。
- 最も長時間実行されているマージの経過時間を示す非同期メトリクスが追加されました。#94825 (Raúl Marín) 。
- IcebergBitmapPositionDeleteTransform を使用して位置削除を適用する前に、対象ファイルの確認を追加しました。 #94897 (Yang Jiang).
- これで
view_duration_msは、グループ内の各スレッドの継続時間の合計ではなく、グループがアクティブだった時間を示すようになりました。 #94966 (Sema Checherinda). - 64 個に制限されていた
hasAnyTokensおよびhasAllTokens関数の検索トークン数上限を削除しました。例:SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]);検索トークンが 65 個あるため、このクエリはBAD_ARGUMENTSエラーになっていました。この PR により、この上限は完全に撤廃され、同じクエリもエラーなしで実行できるようになりました。#95152 (Elmi Ahmadov). - 要素が存在するかどうかを確認するため、Numbers から Enums への変換に対する設定
input_format_numbers_enum_on_conversion_errorを追加しました。Closes: #56144。#56240 (Nikolay Degterinsky) 。 - Icebergテーブルでデータファイルと position delete file を読み込む際にフォーマットパーサーのリソースを共有することで、メモリ割り当てを削減しました。 #94701 (Yang Jiang).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 事前定義されたクエリハンドラーで、insert時に末尾の空白がデータとして扱われてしまう不具合を修正しました。 #83604 (Fabian Ponce).
- Joinストレージに対し、outer join から inner join への最適化が適用された場合に発生する INCOMPATIBLE_TYPE_OF_JOIN エラーを修正しました。#80794 を解決します。#84292 (Vladimir Cherkasov) 。
allow_experimental_join_right_table_sortingが有効な状態でハッシュ結合を使用した際に発生する例外 “Invalid number of rows in Chunk” を修正しました。 #86440 (yanglongwei).- ファイルシステムが大文字・小文字を区別しない場合、MergeTree では常にファイル名をハッシュに置き換えるようにしました。従来は、大文字・小文字を区別しないファイルシステム (MacOS など) を使用している環境で、複数のカラム名/サブカラム名が大文字・小文字だけ異なる場合に、データ破損につながる可能性がありました。 #86559 (Pavel Kruglov).
- materialized view 内の元となるクエリに対し、作成時に完全な権限チェックを行うようにしました。#89180 (pufit).
- 定数引数で
icebergHash関数がクラッシュする問題を修正しました。 #90335 (Michael Kolupaev). - トランザクションを伴わない mutation がアクティブなトランザクション内のパーツを変更し、そのトランザクションが最終的にロールバックされる場合に発生する論理エラーを修正しました。#90469 (Shaohua Wang) 。
- 通常のデータベースを atomic データベースに変換した後、
system.warningsが正しく更新されるよう修正しました。 #90473 (sdk2). - Parquet ファイルの読み取り時に、prewhere 式の一部がクエリ内の別の箇所でも使われている場合に発生していたアサーションを修正しました。#90635 (Max Kainov).
- Iceberg を split-by-buckets モードで読み取る際に、単一ノード構成のクラスターでクラッシュする問題を修正しました。これにより、#90913 をクローズしました。#91553 (Konstantin Vedernikov).
- サブカラムの読み取り中に Log エンジンで発生する可能性がある論理エラーを修正しました。 #91710 をクローズします。 #91711 (Pavel Kruglov).
- ATTACH AS REPLICATED 実行時に発生する論理エラー: ‘Storage が transaction をサポートしていません’ を修正しました。 #91772 (Shaohua Wang).
- LEFT ANTI JOIN に追加の条件がある場合に、ランタイムフィルタが正しく機能しない問題を修正しました。#91824 (Alexander Gololobov).
- Nothing 型を含む null-safe な比較で発生するエラーを修正しました。#91834 をクローズしました。#84870 をクローズしました。#91821 をクローズしました。#91884 (Yarik Briukhovetskyi).
- 同じ文字列が大量に繰り返されるデータに影響する、ネイティブの Parquet リーダーにおける DELTA_BYTE_ARRAY のデコードの不具合を修正しました。 #91929 (Daniel Muino).
- スキーマ推論時に、globs 内のすべてのファイルではなく、推論元のファイルに対してのみスキーマを cache するようにしました。#91745 をクローズしました。#92006 (Pavel Kruglov).
- 不正なアーカイブエントリサイズのヘッダーが原因で発生していた
Couldn't pack tar archive: Failed to write all bytesエラーを修正しました。#89075 の修正です。#92122 (Julia Kartseva). - HTTP接続が閉じられないようにするため、INSERT SELECT 内でリクエストストリームを解放しました。#92175 (Sema Checherinda).
USING句とjoin_use_nullsを使用する複数の JOIN を含むクエリで発生する論理エラーを修正しました。#92251 (Vladimir Cherkasov).- join_use_nulls を使用した join の並べ替え時に発生する論理エラーを修正し、https://github.com/clickhouse/clickhouse/issues/90795 をクローズしました。#92289 (Vladimir Cherkasov) 。
- negate リテラルを含む arrayElement の AST フォーマットの不整合を修正しました。#92288 をクローズ。#92212 をクローズ。#91832 をクローズ。#91789 をクローズ。#91735 をクローズ。#88495 をクローズ。#92386 をクローズ。#92293 (Pavel Kruglov).
join_on_disk_max_files_to_merge設定で発生する可能性があるクラッシュを修正しました。#92335 (Bharat Nallan) 。- 関連 issue #https://github.com/ClickHouse/support-escalation/issues/6365。 #92339 (Tuan Pham Anh) 。
SYSTEM SYNC FILE CACHEで不足していたアクセスチェックを修正しました。#92101 をクローズします。#92372 (Kseniia Sumarokova).- ウィンドウ関数および複数引数に対する
count_distinct_optimizationパスの不具合を修正しました。#92376 (Raúl Marín) 。 - ウィンドウ関数で特定の集約関数を使用した際に発生する “Cannot write to finalized buffer” エラーを修正しました。#91415 をクローズ。#92395 (Jimmy Aguilar Mena).
CREATE TABLE ... AS urlCluster()とデータベースエンジンReplicatedに関する論理エラーを修正しました。#92216 をクローズ。#92418 (Kseniia Sumarokova) 。- MergeTree での mutation 中に、元のパートのシリアライゼーション情報設定を継承するようにしました。これにより、データ型のシリアライゼーションを変更した後に、mutation 済みパートに対するクエリで誤った結果が返る可能性がある問題を修正しました。 #92419 (Pavel Kruglov).
- 同名のカラムとサブカラムの競合により、誤ったシリアライゼーションが使われてクエリが失敗する可能性があった問題を修正しました。Closes #90219。Closes #85161。#92453 (Pavel Kruglov).
- outer join を inner join に変換する際、クエリプランが意図せず変更されることで
LOGICAL_ERRORが発生していた問題を修正しました。あわせて、JOIN 時に集約キーへ単射関数が適用される場合にもこの最適化を適用できるよう、要件を緩和しました。#92503 (János Benjamin Antal) 。 - 空のタプルカラムのソート中に発生する可能性があるエラー
SIZES_OF_COLUMNS_DOESNT_MATCHを修正しました。#92422 をクローズしました。#92520 (Pavel Kruglov). - JSON type 内の互換性のない型付き path をチェック。 #91577 をクローズ。 #92539 (Pavel Kruglov).
- Backup データベースでの SHOW CREATE DATABASE のデッドロックを修正しました。#92541 (Azat Khuzhin).
- hypothesis 索引の検証時に、適切なエラーコードを使用するようにしました。#92559 (Raúl Marín).
- アナライザで、カラムの別名内にある動的サブカラムの解決を修正しました。以前は、カラムの別名内の動的サブカラムが
getSubcolumnでラップされていたため、場合によってはまったく解決できないことがありました。#91434 をクローズします。#92583 (Pavel Kruglov). - 第2引数が NULL の場合に tokens() でクラッシュする問題を防止しました。#92586 (Raúl Marín) 。
- 基盤となる const PREWHERE カラムへのインプレース mutation が原因で発生し得るクラッシュを修正しました。これは、カラムの縮小時 (
IColumn::shrinkToFit) またはフィルタリング時 (IColumn::filter) に、複数のスレッドから同時にトリガーされることで発生する可能性がありました。#92588 (Arsen Muk). - 大きなパーツ (4,294,967,295行超) を含むテーブルでは、テキスト索引の作成およびマテリアライズが一時的に無効化されています。現在の索引実装はこのような大きなパーツをまだサポートしていないため、この制限により誤ったクエリ結果が生じるのを防ぎます。 #92644 (Anton Popov).
- JOIN の実行中に発生する論理エラー
Too large size (A) passed to allocatorを修正しました。#92043 をクローズしました。#92667 (Yarik Briukhovetskyi). ngrambf_v1索引で、ngram の長さ (第1パラメーター) が 8 を超えると例外が発生していた不具合を修正しました。#92672 (Robert Schulze) 。- ZooKeeperストレージの使用時に、バックグラウンドで named collections を再読み込みすると発生する未捕捉例外を修正しました。https://github.com/ClickHouse/clickhouse-private/issues/44180 をクローズしました。#92717 (Kseniia Sumarokova).
- ワイルドカード付きの grant に対するアクセス権チェックの誤ったロジックを修正しました。以前の修正 https://github.com/ClickHouse/ClickHouse/pull/90928 では重大な脆弱性に対処したものの、制限が厳しすぎたため、無関係な権限の取り消しによって一部のワイルドカード
GRANT文が失敗していました。#92725 (pufit). WHEREでnot match(...)を使用した場合に誤った結果を招いていた、データスキップロジックのバグを修正しました。#92492 をクローズしました。#92726 (Nihal Z. Miaji).- MergeTree テーブルが読み取り専用ディスク上に作成されている場合、起動時に一時ディレクトリの削除を試行しないようにしました。 #92748 (Alexey Milovidov).
- ALTER TABLE REWRITE PARTS (v2) での “Cannot add action to empty ExpressionActionsChain” エラーを修正しました。 #92754 (Azat Khuzhin).
- 切断された
Connectionの読み取り時にクラッシュする問題を回避しました。#92807 (Raufs Dunamalijevs) 。 OrderedモードのS3Queueストレージにおける論理エラーFailed to set file processing within 100 retriesを修正し、このエラーは警告に置き換えられました。このエラーは、Keeper セッションの有効期限が切れた場合に 25.10 より前のバージョンで発生することがありましたが、Orderedモードで処理の並行度が高い場合には理論上このエラーが発生する可能性が依然としてあるため、25.10 以降のバージョンでも警告のままとなります。#92814 (Kseniia Sumarokova).- 以前は、偽の条件で PK 分片を使用する一部のクエリが失敗していましたが、現在は失敗しなくなりました。https://github.com/ClickHouse/ClickHouse/pull/89313 に必要です。#92815 (Yarik Briukhovetskyi).
system.partsテーブルにおけるテキスト索引の非圧縮サイズの計算を修正しました。 #92832 (Anton Popov).WHERE句の述語にサブクエリを含むIN句がある論理更新における、プライマリインデックスの使用を修正しました。#92838 (Anton Popov).- JSON の path ‘skip’ に対する型ヒント生成を修正しました。#92731 をクローズします。#92842 (Pavel Kruglov).
- S3テーブルエンジンでは、非決定論的関数が含まれる場合、パーティションキーをキャッシュしないようにしました。#92844 (Miсhael Stetsyuk) 。
ratio_of_defaults_for_sparse_serialization=0.0を指定したスパースカラムのミューテーション後に発生する可能性のあるエラーFILE_DOESNT_EXISTを修正しました。#92633 をクローズしました。#92860 (Pavel Kruglov).- JSON カラムが Tuple カラムの後に来る場合に、古い Parquet リーダー (デフォルトでは使用されません) での Parquet スキーマ推論を修正。空のタプルで失敗していた古い Parquet リーダー (デフォルトでは使用されません) を修正。 #92867 (Michael Kolupaev).
- 定数条件での複数の join と
join_use_nullsに関する論理エラーを修正し、#92640 をクローズしました。#92892 (Vladimir Cherkasov) 。 - パーティション式にサブカラムを含むテーブルへの insert 時に発生する可能性がある
NOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#93210 をクローズ。#83406 をクローズ。#92905 (Pavel Kruglov). - 別名を持つテーブルに対する Merge エンジンで発生するエラー
NO_SUCH_COLUMN_IN_TABLEを修正しました。#88665 をクローズします。#92910 (Pavel Kruglov). - LowCardinality(Nullable(T)) カラムに対する full_sorting_join で、NULL != NULL となるケースを修正しました。 #92924 (Vladimir Cherkasov).
MergeTreeテーブルのテキスト索引のマージ処理中に発生していた複数のクラッシュを修正しました。#92925 (Anton Popov) 。- 必要に応じて、TTL 集約時に SET 式の結果の LowCardinality ラッパーを復元し、テーブル最適化中の例外発生を防ぐようにしました。 #92971 (Seva Potapov).
- 空の配列を
has関数で使用した際に、索引解析中に発生する論理エラーを修正しました。#92906 をクローズしました。#92995 (Nihal Z. Miaji). - 終了処理中のバックグラウンドスケジュールプールでハングする可能性がある問題を修正しました (シャットダウン時にサーバーがハングする原因となる場合があります) 。 #93008 (Azat Khuzhin).
- alter で設定
ratio_of_defaults_for_sparse_serializationを1.0に変更した後、スパースカラムの mutation 後に発生する可能性がある FILE_DOESNT_EXIST エラーを修正しました。#93016 (Pavel Kruglov) 。 - WHERE 句で
not materialize(...)またはnot CAST(...)を使用した際に、誤った結果を引き起こしていたデータスキップロジックの不具合を修正しました。#88536 をクローズします。#93017 (Nihal Z. Miaji). - 共有パーツでの TOCTOU 競合により、古いパーツが使用される可能性があった問題を修正しました。 #93022 (Azat Khuzhin).
- 範囲外のオフセットを含む不正な
groupConcat集約状態のデシリアライズ時に発生するクラッシュを修正しました。#93028 (Raufs Dunamalijevs). - 分散クエリの事前キャンセル後に、接続が壊れた状態のまま残る問題を修正しました。#93029 (Azat Khuzhin) 。
- 右側の join キーがスパースなカラムである場合の join 結果を修正しました。これにより #92920 をクローズします。バグを再現できるのは
set compatibility='23.3'の場合のみです。バックポートすべきかどうかは不明です。#93038 (Amos Bird). estimateCompressionRatio()でCannot finalize buffer after cancellationが発生する可能性がある問題を修正しました。修正: #87380。 #93068 (Azat Khuzhin).- 複雑な式 (
concat(col1, col2)など) に基づいて構築されたテキスト索引のマージ不具合を修正しました。#93073 (Anton Popov). - フィルターにサブカラムが含まれている場合のプロジェクションの適用を修正しました。#92882 をクローズしました。#93141 (Pavel Kruglov).
- クエリプランに join ランタイムフィルタが追加されたときに一部のケースで発生していた論理エラーを修正しました。原因は、join の片側から重複した const カラムを誤って返していたことでした。#93144 (Alexander Gololobov) 。
- JOIN ランタイムフィルタで使用される特別な関数
__applyFilterが、有効な一部のケースで ILLEGAL_TYPE_OF_ARGUMENT を返していました。#93187 (Alexander Gololobov) 。 - 補間されたカラムが実質的に同じカラムの別名である場合に、ブロック内で異なる補間済みカラムが同一カラムに集約されてしまうのを防止しました。#93197 (Yakov Olkhovskiy) 。
- すでに補完済みの右側テーブルとの結合時には、ランタイムフィルタを追加しないようにしました。#93211 (Alexander Gololobov) 。
- 切断されたセッションの後に Keeper の永続ウォッチが適切にクリーンアップされない問題を修正しました。これにより #92480 を解決します。#93213 (Konstantin Vedernikov) 。
- Iceberg の ORDER BY tuple を修正しました。これにより #92977 をクローズしました。#93225 (Konstantin Vedernikov).
- S3Queue 設定
s3queue_migrate_old_metadata_to_bucketsのバグを修正しました。#93392、#93196、#81739 をクローズしました。#93232 (Kseniia Sumarokova). - マージ時にプロジェクションが再構築される際、未使用のカラムを削除するようにしました。これにより、メモリ使用量が減り、作成される一時パーツも少なくなります。 #93233 (Nikolai Kochetov).
- スカラー相関サブクエリがある場合に、サブクエリから未使用のカラムが削除されてしまう問題を修正しました。修正前は、カラムが相関サブクエリ内でのみ使用されていると削除されることがあり、その結果クエリは
NOT_FOUND_COLUMN_IN_BLOCKエラーで失敗していました。#93273 (Dmitry Novik). - ソーステーブルのALTER中に、MVでサブカラムが欠落する可能性がある不具合を修正しました。#93231 をクローズしました。#93276 (Pavel Kruglov) 。
- ローカルおよびリモート/
Distributedテーブルのマージ時に、hostName()に対してILLEGAL_COLUMNがスローされることがあった、アナライザによるMergeテーブルエンジンのクエリプランニングを修正しました。#92059 をクローズしました。#93286 (Jinlin). - 非定数の配列引数を伴う
NOT INが誤った値を返す場合がある問題を修正し、非定数の Array 関数をサポートしました。#14980 をクローズします。#93314 (Yarik Briukhovetskyi). use_top_k_dynamic_filtering最適化で発生するNot found columnを修正。 #93186 を修正。 #93316 (Nikolai Kochetov).- サブカラム上に作成されたテキスト索引の再構築に関する不具合を修正しました。 #93326 (Anton Popov).
hasAllTokensおよびhasAnyTokens関数で、第2引数に空の配列を指定した場合の処理を修正しました。#93328 (Anton Popov).- 右側テーブルに対する totals 付きクエリでランタイムフィルタ使用時に発生する論理エラーを修正しました。 #93330 (Alexander Gololobov).
- 関数
tokensが非 const のトークナイザーパラメータ (第 2、第 3、第 4 パラメータ) で呼び出された場合でも、server がクラッシュしなくなりました。たとえば、SELECT tokens(NULL, 1, materialize(1))。#93383 (Robert Schulze) 。 groupConcat状態のデシリアライズにおける整数オーバーフローの脆弱性を修正しました。この脆弱性により、細工された集約状態によってメモリ安全性の問題が発生する可能性がありました。#93426 (Raufs Dunamalijevs) 。- 索引にトークンが含まれない場合 (すべての配列が空であるか、すべてのトークンがトークナイザーによってスキップされる場合) に、配列カラムに対するテキスト索引の索引解析が正しく行われない問題を修正しました。 #93457 (Anton Popov).
- 接続文字列にユーザー名/パスワードが含まれている場合に、ClickHouse Client で OAuth ログインを回避するようにしました。 #93459 (Krishna Mannem).
- DataLakeCatalog における Azure ADLS Gen2 の払い出し認証情報のサポートを修正 - Iceberg REST カタログから
adls.sas-token.*キーをパースし、ABFSS URL のパースを修正しました。 #93477 (Karun Anantharaman). - アナライザにおける GLOBAL IN のサポートを修正しました (以前は Set がリモートノードで再度作成されていました) 。#93507 (Azat Khuzhin) 。
- デシリアライゼーション時に、サブカラムを直接スパースカラムに抽出する際の不具合を修正しました。 #93512 (Pavel Kruglov).
- 重複する検索クエリがある場合の、テキスト索引からの直接読み取りを修正しました。 #93516 (Anton Popov).
- ランタイムフィルタが有効な場合に、結合されたテーブルで同じカラムが複数回返されると発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました (例: SELECT a, a, a FROM t) 。 #93526 (Alexander Gololobov).
- ssh を使用して接続する際に、clickhouse-client がパスワードを 2 回要求する不具合を修正しました。 #93547 (Isak Ellmer).
- シャットダウン時に zookeeper の終了処理が確実に完了するようにしました (ごくまれにシャットダウン時にハングする可能性がある問題を修正) 。 #93602 (Azat Khuzhin).
- deduplication の競合により ReplicatedMergeTree の復元時に LOGICAL_ERROR が発生する問題を修正しました。#93612 (Pablo Marcos) 。
- 一部の入力フォーマットで、Sparse カラムに直接デシリアライズする際の有効期限 (TTL) 更新で Sparse カラムを使用する処理を修正しました。これにより、論理エラー
Unexpected type of result TTL columnが発生する可能性を解消しました。 #93619 (Pavel Kruglov). - 無効な入力で呼び出された際に、クラッシュしたりハングしたりすることがあった h3 index 関数の問題を修正しました。#93657 (Michael Kolupaev) 。
- 非UTF-8データに対して
ngram_bf索引を使用すると、未初期化メモリの読み取りが発生し、その値が結果として生成される索引構造に含まれる可能性がありました。#92576 をクローズしました。#93663 (Alexey Milovidov). - 展開後のバッファサイズが想定どおりであることを確認します。#93690 (Raúl Marín) 。
mergetable engine の使用時に、SHOW COLUMNS権限を確認せずにユーザーがテーブルのカラム一覧を取得できないようにしました。#93695 (János Benjamin Antal).- サブカラム上に作成されたスキップ索引のマテリアライズ処理を修正しました。#93708 (Anton Popov).
PipelineExecutorの存続中にIStorageオブジェクトが破棄されないよう、storage の共有ポインタをQueryPipeline::resources::storage_holdersに保持します。 #93746 (Miсhael Stetsyuk).- 再起動後に interserver host が変更された場合の Replicated DB のアタッチを修正しました。#93779 (Tuan Pham Anh) 。
- cache が有効な際に発生していた
ReadBufferFromS3の assert!read_until_positionを修正しました。#93809 (Kseniia Sumarokova) 。 Mapカラムで空のタプルが使われるまれなケースで発生する論理エラーを修正しました。#93784 をクローズしました。#93814 (Nihal Z. Miaji) 。- マージ中にプロジェクションが再構築される際に発生する
_part_offsetの破損を修正し、_part_offsetカラムの不要な読み取りを避け、プロジェクション計算で不要なカラムをスキップすることで、プロジェクション処理を最適化しました。これは、#93233で導入された最適化をさらに発展させたものです。#93827 (Amos Bird) 。 - ‘Bad version’ の処理を削除しました。#93843 (Anton Ivashkin).
- キーが符号付き整数型の場合に、分散クエリで
optimize_inverse_dictionary_lookupが機能しない問題を修正しました。#93259 をクローズしました。#93848 (Nihal Z. Miaji). - 分散
remote()クエリでlag/leadが動作しない不具合を修正しました。#90014 をクローズしました。#93858 (Nihal Z. Miaji). - system instrument のディスパッチに関するバグを修正。 #93937 (Pablo Marcos).
- https://github.com/ClickHouse/ClickHouse/pull/89173 では、
TraceSenderが内部パイプ経由で送信する構造にフィールドを 1 つ追加しました。しかし、バッファサイズが更新されていなかったため (こちら) 、buffer_sizeを超えるデータをバッファに書き込むことになり、その結果、フラッシュが複数回発生します。さらに、TraceSender::sendは異なるスレッドから呼び出されるため、それぞれのスレッドによるフラッシュが途中で入り交じる可能性があり、受信側 (TraceCollector) が前提としている不変条件が崩れてしまいます。#93966 (Miсhael Stetsyuk) 。 USING句を使用したストレージJoinのJOIN演算における、上位型への型変換を修正しました。#91672 を修正しました。#78572 を修正しました。#94000 (Dmitry Novik).- JOIN ランタイムフィルタが Merge テーブルに適用された際に、FilterStep が適切に追加されない不具合を修正しました。#94021 (Alexander Gololobov).
- 複数のカラムに対する述語を含み、bloom filter スキップ索引が設定され、かつ
OR条件とNOT条件の両方を含むSELECTクエリでは、結果が不整合になることがありました。現在は修正されています。#94026 (Shankar Iyer). - 依存インデックスのあるカラムに対する CLEAR の不具合を修正しました。#94057 (Raúl Marín) 。
ReadWriteBufferFromHTTPにおける未初期化の値の使用を修正しました。#94058 (Alexey Milovidov).- JSON 内の型付きパスに対する不適切なチェックを修正しました。このチェックは https://github.com/ClickHouse/ClickHouse/pull/92842 で導入されたもので、既存のテーブルの起動時にエラーを引き起こす可能性がありました。#94070 (Pavel Kruglov).
- OUTER JOIN がある場合に、filter の解析中にクラッシュする問題を修正しました。#90979。#94080 (Dmitry Novik).
- 並列実行時 (
max_threads> 1、デフォルト) に UInt8 集約キーを使用した場合のuniqThetaの正確性を修正しました。#94095 (Azat Khuzhin) 。 SCOPE_EXIT内のsocket.setBlocking(true)呼び出しで例外が送出されてクラッシュしていた問題を修正しました。 #94100 (Miсhael Stetsyuk).- ReplicatedMergeTree で、
DROP PARTITIONによって後続のログエントリで作成されたパーツまで削除されてしまうことで発生するデータ損失を修正。 #94123 (Tuan Pham Anh). - ページ境界をまたぐ Array を Parquet リーダー v3 が誤って処理する問題を修正しました。これは、たとえばページ統計やページ索引を有効にせずに Arrow で書き込まれたファイルで発生します。影響を受けるのは Array データ型のカラムのみです。症状としては、約 1 MB ごとに 1 つの配列が途中で切り詰められる可能性があります。この修正前は、回避策として次の設定を使用してください:
input_format_parquet_use_native_reader_v3 = 0。 #94125 (Michael Kolupaev). - ログエントリ待機中の ReplicatedMergeTree におけるウォッチ過多の問題を修正しました。 #94133 (Azat Khuzhin).
- 関数
arrayShuffle、arrayPartialShuffle、arrayRandomSampleが const カラムを実体化するようになり、異なる行で異なる結果が返るようになりました。#94134 (Joanna Hulboj). - materialized view で table function を評価する際のデータ競合を修正。 #94171 (Alexey Milovidov).
- (クエリが不正な場合に発生する)
PostgreSQLデータベースエンジンでの nullptr の逆参照を修正しました。#92887 をクローズしました。#94180 (Alexey Milovidov). - 複数のサブクエリを含む
SELECTクエリを使うリフレッシュ可能なマテリアライズドビューにおけるメモリリークを修正しました。 #94200 (Antonio Andelic). DataPartStorageOnDiskBase::removeとsystem.parts間のデータ競合を修正しました。#49076 をクローズしました。#94262 (Alexey Milovidov).- メモリ例外発生時にクラッシュ (
std::terminate) を引き起こす可能性がある、HashTable のコピー代入における誤ったnoexcept指定を削除しました。 #94275 (Nikita Taranov) 。 - 以前は、GROUP BY に重複したカラムを含む PROJECTION (例:
GROUP BY c0, c0) を作成してデータを挿入すると、optimize_row_orderが有効な場合にstd::length_errorが発生していました。#94065 を修正しました。#94277 (Alexey Milovidov) 。 - 接続時にZooKeeperクライアントで発生し、ハングやクラッシュを引き起こすわかりにくいバグを修正しました。#94320 (Azat Khuzhin).
- サブカラムに適用されていなかった function to subcolumns 最適化の問題を修正しました。#94323 (Pavel Kruglov).
enable_lazy_columns_replicationが有効な場合に、ネストされた RIGHT JOIN で誤った結果が返される可能性がある問題を修正しました。この不具合により、レプリケートされたカラム内のすべての行で、本来はそれぞれ異なる値が返されるべきところ、誤って同じ値が返されていました。#93891 をクローズしました。#94339 (Vladimir Cherkasov).- 等価集合を用いた SEMI JOIN の filter pushdown を修正しました。引数の型が変更されている場合は、filter pushdown を行わないようにしました。#93264 を修正しました。#94340 (Dmitry Novik) 。
- database DataLake データベースエンジン使用時の DeltaLake CDF の利用を修正しました (Delta Lake カタログのインテグレーション) 。#94122 を修正しました。#94342 (Kseniia Sumarokova).
SLRUcacheポリシー使用時に、メトリクスFilesystemCacheSizeLimitの現在の値が誤っていた問題を修正しました。#94363 (Kseniia Sumarokova) 。- 2 つ未満の引数で Backup データベースエンジンを作成した場合、返されるエラーメッセージがより分かりやすくなりました (
std::out_of_range: InlinedVector::at(size_type) const failed bounds check.ではなく、Wrong number of argumentsが返されます) 。#94374 (Robert Schulze) 。 - grant option を持つ権限について、データベースレベルでグローバル権限を取り消そうとする無効な操作を無視するようになりました。 #94386 (pufit).
- compact パーツからスパース オフセットを読み取る際の不具合を修正しました。#94385 をクローズしました。#94399 (Pavel Kruglov).
alter_column_secondary_index_modeのthrowモードを使用している場合でも、暗黙的な索引を使用するカラムに対する ALTER を妨げないようにしました。#94425 (Raúl Marín).Protocol::Client::IgnoredPartUUIDsを複数のreceivePacketsExpectQuery呼び出しで読み取る際に発生するTCPHandlerのクラッシュを修正しました。 #94434 (Miсhael Stetsyuk).system.functionsにおける機密データのマスキングの不具合を修正しました。#94436 (Vitaly Baranov) 。send_profile_eventsが無効な場合に発生する nullptr の逆参照を修正しました。この機能は最近、ClickHouse Python ドライバーに導入されました。#92488 を解決します。#94466 (Alexey Milovidov).- マージ中のテキスト索引
.mrkの非互換性を修正。 #94494 (Peng Jian). read_in_order_use_virtual_rowが有効な場合、索引が切り詰められているかどうかを確認せずに、主キー全体のサイズに基づいて索引カラムにアクセスしていたため、use-after-free / 未初期化メモリの使用が発生していました。#85596 をクローズしました。#94500 (Alexey Milovidov).- 型がNullableの場合に、GLOBAL IN を含むサブクエリ用の外部テーブル送信時に、型不一致によって発生するerrorを修正しました。 #94097 をクローズしました。 #94511 (Alexey Milovidov).
- 以前のバージョンでは、同じ式に対する複数の索引条件を持つクエリで、誤って
Not found column例外がスローされることがありました。#60660 を修正しました。#94515 (Alexey Milovidov). - ランタイムフィルタにおける Nullable の JOIN カラムの誤った処理を修正しました。 #94555 (Alexander Gololobov).
- 現在使用中の workload 内に別の workload を作成しても、クラッシュしなくなりました。#94599 (Sergei Trifonov) 。
- 存在しないカラムに対して
isNotNullが評価された際に、ANY LEFT JOIN の最適化中に発生するクラッシュを修正しました。#94600 (Molly). - 計算済みデフォルトを持つ他のカラムを参照する場合の、デフォルト式の評価を修正しました。#94615 (Alexey Milovidov).
- BACKUP/RESTORE 操作における権限の問題を修正しました。 #94617 (Pablo Marcos) 。
- データ型が
Nullable(DateTime64)の場合に、不正な型変換が原因で発生するクラッシュを修正しました。#94627 (Miсhael Stetsyuk) 。 - 特定の分散クエリで、
ORDER BY使用時にALIASカラムの値が入れ替わって返されることがある不具合を修正しました (つまり、カラムaにカラムbのデータが表示され、逆にカラムbにはカラムaのデータが表示される問題です) 。#94644 (filimonov) 。 - keeper-bench の結果をファイルに保存する際の不具合を修正しました。#94654 (Antonio Andelic) 。
- 負の浮動小数点値を含むカラムで、MinMax 型統計による推定が誤る問題を修正しました。 #94665 (zoomxi).
- map のキーが struct の場合に発生していた Parquet ファイル読み取りの問題を修正しました。#94670 (Konstantin Vedernikov) 。
- 複雑な ON 条件を使用した場合に、RIGHT JOIN の結果が誤る可能性がある問題を修正しました。#92913 をクローズしました。#94680 (Vladimir Cherkasov) 。
- Vertical merge後も、一定の索引粒度 (use_const_adaptive_granularity) を維持する。 #94725 (Azat Khuzhin).
- スカラーサブクエリとテーブルの依存関係に関する mutation のバグを修正しました。テーブルのカラムに対して依存関係 (索引またはプロジェクション) がある場合、スカラーサブクエリがデータなしで評価・キャッシュされ、その結果、誤った変更が行われる可能性がありました。#94731 (Raúl Marín).
- エラー発生時の AsynchronousMetrics cpu_pressure フォールバックを修正しました。 #94827 (Raúl Marín).
getURLHostRFC関数では、ポインタをデリファレンスする前の境界チェックが不足していました。空文字列がdomainRFCに渡されると、未初期化メモリを読み取り、MSan error がトリガーされていました。#94851 (Alexey Milovidov) 。- 暗号化ディスクが読み取り専用になる問題を修正しました。 #94852 (Azat Khuzhin).
- 分散テーブルで古いアナライザを使用した際に、小数の
LIMIT/OFFSETで発生する論理エラーを修正しました。#94712 をクローズしました。#94999 (Ahmed Gouda). - JOIN ランタイムフィルタがデフォルトで有効な場合に、一部の条件下で発生するクラッシュを修正しました。 #95000 (Alexander Gololobov).
- テーブルエンジン
URL()およびテーブル関数url()で使用される URL 内のパスワードのマスキングを改善しました。#95006 (Vitaly Baranov) 。 - 関数
toStartOfIntervalは、enable_extended_results_for_datetime_functionsが有効な場合、XがDay, Week, Month, Quarter, YearのtoStartOfXと同様に動作するようになりました。#95011 (Kirill Kopnev) 。 - 定数文字列の比較で、設定
cast_string_to_date_time_mode、bool_true_representation、bool_false_representation、およびinput_format_null_as_defaultが正しく反映されない問題を修正しました。#91681 をクローズしました。#95040 (Nihal Z. Miaji). - ファイルシステムキャッシュで発生するデータ競合を修正しました。 #95064 (Alexey Milovidov).
- Parquet リーダーでまれに発生するレースコンディションを修正しました。 #95068 (Alexey Milovidov).
LIMITがゼロのときに top K 最適化で発生するクラッシュを修正しました。#93893 を解決します。#95072 (Alexey Milovidov).- DateTime/整数から Time64 への変換では、単調ではない
toTimeを使用して時刻部分を抽出しますが、ToDateTimeMonotonicityテンプレートがこの変換を誤って単調と見なしていました。その結果、デバッグビルドで “MergeTreeSetIndex における無効な二分探索結果” 例外が発生していました。#95125 (Alexey Milovidov). - 必要な場合にのみマニフェストファイルのエントリ一覧を再作成するようにしました (以前は各イテレーションで行われていました) 。 #95162 (Daniil Ivanik).
ビルド/テスト/パッケージングの改善
- jemalloc のヒーププロファイリング機能を利用して、ClickHouse SQL パーサーにおけるメモリ割り当てをプロファイリングするためのツール群を追加しました。#94072 (Ilya Yatsishin).
- パーサーでのメモリ割り当てのデバッグを簡単にするツールを追加しました。このツールは、クエリを AST 表現にパースする前後で jemalloc の
stats.allocatedメトリックを使い、何が割り当てられたかを表示します。さらに、前後でプロファイルをダンプして、どこで割り当てが発生したかを示すレポートを作成できるメモリプロファイリングモードにも対応しています。#93523 (Ilya Yatsishin). - 推移的な libc++ インクルードを削除しました。#92523 (Raúl Marín).
- 一部の sequential テストを並列化しました: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
- 一部のビルドフラグを整理しました。#93679 (Raúl Marín).
- c-ares を v1.34.5 から v1.34.6 に更新しました。これにより、ClickHouse には影響しない c-ares の
CVE-2025-62408に対応しています。#94129 (Govind R Nair). curl8.18.0 を使用するようにしました。#94742 (Konstantin Bogdanov).