後方互換性を持たない変更
クエリおよび構文の変更
IN演算子は、Bool型に対して厳密な値のセマンティクスを使用するようになりました。つまり、集合内の0と1のみがBool値に一致します。以前は、IN集合内の255を超える数値が誤って true に丸め込まれていたため、SELECT CAST(1, 'Bool') IN (256)は1を返していました。現在は正しく0を返します。 #93115 (Ashrith Bandla).NOT演算子の優先順位を SQL 標準に合わせて修正しました。これにより、NOTはIS NULL、BETWEEN、LIKE、および算術演算子よりも弱く結合するようになりました。たとえば、NOT (x) IS NULLは、以前の(NOT x) IS NULLではなく、現在はNOT (x IS NULL)として解析されます。これにより、従来の (標準に準拠しない) 動作に依存していたクエリの結果が変わる可能性があります。 #97680 (Alexey Milovidov).SELECTは、WITH式リスト要素内で識別子を裸のまま記述する場合には使用できなくなりました。 #101059 (Aruj Bansal).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])は誤って1を返していました。現在は、どちらの場合も正しく0を返します。 #101812 (Nihal Z. Miaji).
データ型の変更
- データ型のシリアル化バージョンが、ネストしたデータ型にも伝播されるようになりました。たとえば、String のシリアル化バージョン
with_size_streamは、以前は最上位の String カラムと Tuple の要素にのみ適用されていましたが、現在は Array、Map、Variant、JSON などのネストした型内にあるあらゆる String 型にも適用されます。これは MergeTree 設定propagate_types_serialization_versions_to_nested_typesで制御されており、現在はデフォルトで有効です。この変更後、新しく作成されたデータパーツは古いバージョンでは読み取れませんが、古いパーツは新しいバージョンで読み取ることができます。アップグレードは安全ですが、ダウングレードは安全ではありません。#94859 (Pavel Kruglov). QBitのバイナリシリアライゼーションのエンディアンを修正し、リトルエンディアン形式を使用するようにしました。#101378 (Raufs Dunamalijevs).
ストレージと索引の変更
- 複数カラムのソートキーを持つプロジェクションが正しく認識されるよう、通常のプロジェクションのメタデータを修正しました。#91352 (Amos Bird).
- スキップ索引ファイルで
replace_long_file_name_to_hash設定が考慮されていなかった問題を修正しました。この問題により、名前の長い索引で “File name too long” エラーが発生し、索引の読み取りが壊れることがありました。スキップ索引のファイル名は、カラムファイルと同様に、max_file_name_lengthを超える場合はハッシュ化されるようになりました。これは後方互換性があります (新しいサーバーは古いパーツを読み取れます) が、ダウングレード時 (またはローリングアップグレード中の古いサーバー) には、名前の長い索引が無視される可能性があります。#97128 (Raúl Marín).
削除された機能
hypothesisスキップ索引タイプを削除しました。これはあまり知られておらず、実用性も限られた実験的な機能でした。現在、INDEX ... TYPE hypothesisを指定してテーブルを作成するとエラーになります。#96874 (Alexey Milovidov).- 実験的な
detectProgrammingLanguage関数を削除しました。#99567 (Alexey Milovidov).
設定および構成の変更
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).
INSERT と重複排除に関する変更
- 非同期 INSERT はデフォルトで有効になりました — ClickHouse はデフォルトですべての小さな INSERT をバッチ処理します。これは
compatibility設定で制御されます。compatibilityを 26.2 未満のバージョンに設定すると、以前のデフォルト値であるfalseに戻ります。非同期 INSERT は、config の users プロファイル、セッション、クエリ、または MergeTree テーブルの各レベルでオンまたはオフにできます。#97590 (Sema Checherinda).
システムテーブルの変更
system.query_logのskip_indexesカラムを復元しました。#101018 (Alexey Milovidov) 。
その他の後方互換性のない変更
mergeTreeAnalyzeIndexes{,UUID}は、正規表現ではなくパート名の配列を受け取るようになりました。正規表現は低速なためです (実験的機能) 。#98474 (Azat Khuzhin).- H3 ライブラリが v4 に更新され、長さや面積などの計算精度が向上しました。新しい結果は以前のものと異なるため、この変更には後方互換性がありません。#100348 (Alexey Milovidov).
Mergeテーブルにおける仮想カラムの扱いが変更されました。基になるテーブルに_tableまたは_databaseがある場合、これらのカラムはストレージから読み取られます。そうでない場合は、読み取りステップの後に expression ステップで補完されます。#101742 (Mikhail Artemenko).
新機能
関数
- 自然順ソートキー用の
naturalSortKey(s)関数を追加しました。#90322 (Nazarii Piontko). arrayAutocorrelation(arr [, max_lag])関数を追加しました。これは、数値 Array の各ラグに対する正規化自己相関を計算します。整数、浮動小数点、Decimal の Array 型をサポートします。#94776 (Wenyu Chen).Mapと同様に、JSON type でもパスの存在確認にhas()関数を使用できるようになりました。#96927 (DQ).mergeTreeTextIndex(database, table, index)テーブル関数を追加しました。これはテキスト索引からデータを直接読み取ります。イントロスペクションや、テキスト索引データに対する集計の実行に使用できます。#97003 (Anton Popov).obfuscateQuerySQL 関数を追加しました。#98305 (Xuewei Wang).- Unicode の case folding とダイアクリティカルマーク除去のための
caseFoldUTF8およびremoveDiacriticsUTF8関数を追加しました。#98973 (George Larionov). printf関数が非定数の format string をサポートするようになり、カラムの値に応じて行ごとに異なる format pattern を使用できるようになりました。#98991 (Yash).highlight()関数を追加しました。これは、テキスト文字列内で検索語が出現した箇所を HTML タグ (デフォルトは<em>/</em>) で囲みます。ASCII の大文字・小文字を区別しないマッチング、重複する一致箇所の自動マージ、カスタムの開始/終了タグをサポートします。#99131 (Peng).- NFKC_Casefold Unicode 正規化用の文字列関数
normalizeUTF8NFKCCasefoldを追加しました。これは NFKC 正規化と case folding を組み合わせたものです。#99276 (George Larionov). - 全文索引および
tokens関数向けにunicode_wordトークナイザーを追加しました。これは Unicode の単語境界規則に従ってテキストを分割します。ASCII の単語は connector characters (アンダースコア、コロン、ドット、シングルクォート) を含めて構成され、非 ASCII の Unicode 文字は 1 文字のトークンになります。設定可能な stop words のデフォルト値は一般的な CJK 句読点です。#99357 (Amos Bird). arrayTranspose関数を追加しました。これは二次元 Array (行列) を受け取り、転置します。#101214 (Vitaly Baranov).- フレーズ検索 (連続するトークン列) 用の
hasPhrase関数 (別名matchPhrase) を追加しました。検索はブルートフォースで行われ、テキスト索引ではまだサポートされていません。#101997 (Elmi Ahmadov). - ベクトル類似度索引でサポートされる距離関数として
dotProductを追加しました。誤った結果が黙って返されるのを防ぐため、すべての距離関数でソート方向が検証されるようになりました。#102254 (Renzo). stem関数が、String、FixedString、Array([Fixed]String)、Nullable、LowCardinality、Constカラム内のすべての単語/トークンをステミングできるようになりました。#99137 (Jimmy Aguilar Mena).stem関数は実験的機能ではなくなりました (以前はallow_experimental_nlp_functionsを有効にする必要がありました) 。 #102399 (Jimmy Aguilar Mena).JSONAllValues関数が追加されました。この関数は、JSONカラム内のすべての値をArray(String)として返します。値はテキスト表現でシリアライズされ、パス名順に並べられます。さらに、JSONカラム上のJSONAllValues式に対するテキスト索引のサポートも追加されました。JSONAllValues(json_column)にテキスト索引を作成すると、JSONサブカラムに対するクエリのフィルタリング (たとえばjson_column.key1 = 'value') に自動的に使用されます。 #100730 (Anton Popov).EXTRACT演算子に PostgreSQL 互換の単位EPOCH、DOW、DOY、ISODOW、ISOYEAR、WEEK、CENTURY、DECADE、MILLENNIUMが追加されました。あわせて、以前はエラーになっていたEXTRACT(WEEK FROM date)も修正されました。 #100274 (Alexey Milovidov).- SQL 標準の
OVERLAY関数構文に対する、パーサーのシンタックスシュガー経由でのtoDaysInMonth()関数サポートが追加されました。overlay関数自体はすでに存在していましたが、今回の追加により、PLACING、FROM、FORを区切りとして使うキーワードベースの形式がサポートされます。 #101681 (Desel72). 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設定に従って処理されます。 #102421 (Nihal Z. Miaji).
SQL とクエリ機能
- パラメーターが
Nullable型で、かつ値が指定されていない場合、その値はNULLとみなされるようになりました。#93869 (Vikash Kumar). - ClickHouse で、
SELECTクエリにおいて min/max 統計に基づいてデータパーツ全体をプルーニングできるようになりました。#94140 (zoomxi). - マテリアライズド CTE のサポートが追加されました。これにより、CTE はクエリ実行中に一度だけ評価され、その結果は一時テーブルに格納されます。#94849 (Dmitry Novik).
- 一部の関数を、SQL で括弧なしで使用できるようになりました。#95949 (Aly Kafoury).
JSON型に対して、複合サブカラム構文json.@pathが追加されました。パスが scalar を保持している場合はリテラル値をDynamicとして返し、パスがネストされた object を保持している場合は sub-object をDynamicとして返し、パスが存在しない場合はNULLを返します。#98788 (Pavel Kruglov).- サブクエリ式向けの
SOMEキーワードが追加されました。動作はANYと同一です。#99842 (Artem Kytkin). SET session_timezoneの別名としてSET TIME ZONE 'tz'をサポートしました。#99883 (phulv94).FROM句内のテーブル式として、SQL 標準のVALUES句のサポートが追加されました。例:SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val)。#100143 (Desel72).TO範囲修飾子を持つ SQL 標準の複合インターバルリテラルのサポートが追加されました。例:INTERVAL '1:30' HOUR TO MINUTE。内部的には複数のインターバルの合計に分解されます。#100453 (Desel72).- 順序付きモードおよび順不同モード向けに、
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'コマンドが追加されました。#100709 (Bharat Nallan).
テーブルエンジンとストレージ
Paimonテーブルエンジンでインクリメンタル読み取りをサポートしました。Keeper を利用したスナップショット進捗の追跡に加え、paimon_target_snapshot_idによる対象スナップショットの差分読み取りにも対応しています。 #93655 (XiaoBinMu).DatabaseReplicatedで補助的な ZooKeeper をサポートしました。 #95590 (RinChanNOW).- Iceberg v3 のナノ秒タイムスタンプ型 (
timestamp_nsおよびtimestamptz_ns) の読み取りをサポートし、それぞれDateTime64(9)およびDateTime64(9, 'UTC')にマッピングされるようになりました。これにより、ClickHouse はスキーマにこれらの型を含む Iceberg データを読み取れるようになります。ただし、これは Iceberg v3 全体の完全サポートを意味するものではなく、これらの型を使った Iceberg v3 への書き込みにも対応していません。 #97132 (Dmitry Kovalev). - Iceberg テーブル向けに
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')を追加しました。 #97904 (murphy-4o). - Parquet メタデータ向けの新しい SLRU キャッシュを追加しました。これにより、メタデータを読むためだけにファイルを再ダウンロードする必要がなくなり、読み取り性能が向上します。 #98140 (Grant Holly).
JSONAllPathsを使用した JSON カラム向けの MergeTree スキップ索引を追加しました。bloom_filter、tokenbf_v1、ngrambf_v1、およびtext(転置) 索引型に対応し、各グラニュールに含まれる JSON パスの集合に基づいてグラニュールをスキップできるようになります。 #98886 (Pavel Kruglov).- 挿入順にデータを再編成する
commit_orderprojection index を追加しました。 #99004 (Mikhail Artemenko). - MergeTree の
Mapカラムに bucketed serialization を追加しました (map_serialization_version = 'with_buckets') 。キーはハッシュベースの buckets に分割されるため、単一キー (m['key']) の読み取りではカラム全体ではなく 1 つの bucket のみを読み取ります。これにより、map のサイズに応じて単一キーのルックアップが 2~49 倍高速化されます。bucket の数と bucketing 戦略は、新しい MergeTree settingsmap_serialization_version、max_buckets_in_map、map_buckets_strategy、map_buckets_coefficient、map_buckets_min_avg_sizeで制御できます。設定map_serialization_version_for_zero_level_partsでは、書き込みオーバーヘッドを避けるため inserts では基本的なシリアライゼーションを維持しつつ、マージ済みパーツでは buckets を使用します。bucketed serialization ではmapKeys/mapValuesに対するスキップ索引がサポートされており、optimize_functions_to_subcolumnsは buckets が利用可能な場合にm['key']をキーごとの サブカラム 読み取りに Rewrite します。 #99200 (Pavel Kruglov).
挿入と重複排除
- 互換性設定
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).
設定と構成
- テーブルを読み取り専用としてマークし、insert や変更を防ぐための
table_readonlyMergeTree setting を追加しました。 #97652 (Alexey Milovidov). use_partition_pruningsetting (別名use_partition_key) を追加しました。falseに設定すると、パーティションキーに基づくパーティション pruning を無効にできます。 #97888 (Nihal Z. Miaji).<protocols>内の各type=httpエントリで、別個の<http_handlers_*>config セクションを指すカスタムの<handlers>key を指定できるようになり、ポートごとに異なる HTTP ルーティングルールを設定できるようになりました。 #98414 (Amos Bird).- 2 つの MergeTree settings、
replicated_fetches_min_part_levelとreplicated_fetches_min_part_level_timeout_secondsを追加しました。これにより、レプリカは新たに挿入されたばかりの (merge されていない) パーツの、他のノードからの fetch をスキップでき、負荷の高いインジェスト時のレプリケーション overhead を削減できます。 #98625 (tanner-bruce). restore_access_entities_with_current_grantsserver setting を追加しました。有効にすると、復元されたユーザー/ロールの grant は、復元を実行するユーザーが付与可能な範囲に制限されます (GRANT CURRENT GRANTSと同じ意味) 。これまでのようにACCESS_DENIEDで失敗することはありません。 #98795 (pufit).skip_unavailable_shardsが有効な場合に、警告なしでスキップできる分片の数を制限するためのmax_skip_unavailable_shards_numとmax_skip_unavailable_shards_ratiosettings を追加しました。利用不能な分片の数または比率が設定された threshold を超えると、不完全な結果をそのまま返す代わりに例外がスローされます。 #99369 (Alexey Milovidov).- 公開 ClickHouse service を悪用から保護するため、正規化クエリ hash による quota を実装しました。
NORMALIZED_QUERY_HASHは quota key type としてサポートされ、各一意の正規化クエリごとに個別の quota bucket を持つため、CREATE QUOTA q KEYED BY normalized_query_hashではそれぞれの異なるクエリが個別に追跡されます。QUERIES_PER_NORMALIZED_HASHは quota resource type としてサポートされ、interval 内で任意の単一の正規化クエリの最大実行回数を制限できるため、MAX queries_per_normalized_hash = 100により、1 つの query pattern が 100 回を超えて実行されるのを防ぎます。 #99586 (Alexey Milovidov). auto_statistics_typesMergeTree setting のデフォルトがminmax, uniqになり、新しいテーブルでは適切なすべてのカラムに対して minmax および uniq 統計が自動的に作成されるようになりました。materialize_statistics_on_insertのデフォルトはfalseになり、統計は insert time ではなく merge 時に構築されるため、insert overhead が軽減されます。以前の動作に戻すには、materialize_statistics_on_insert = 1を設定してください。 #101275 (Han Fei).- レプリカ間のレプリケーションラグによるデータ欠落を減らすため、materialized view の依存チェーン向けに
prefer_dependency_replicarefresh setting を追加しました。 #101591 (Seva Potapov).
認証
- LDAP クライアントがリファラルをたどるかどうかを制御する、サーバーごとの LDAP 設定オプション
<follow_referrals>(デフォルトはfalse) を追加しました。リファラル追跡を無効にすると、Active Directory のドメインルートであるベース DN から検索する際のタイムアウトやハングを回避でき、ログのノイズも軽減されます。#96765 (paf91).
システムテーブル
system.histogram_metric_logを追加しました。これは、すべてのヒストグラムメトリクス (例: S3/Azure のレイテンシ、Keeper リクエスト処理ステージの所要時間) を定期的にスナップショットとして保存する新しいシステムテーブルです。system.histogram_metricsのvalueカラムは、柔軟性と Prometheus のデータモデルとの互換性を高めるため、Float64になりました。#103046 (Miсhael Stetsyuk).
実験的機能
- ALP 浮動小数点圧縮コーデックを追加しました (圧縮できない倍精度浮動小数点数に対する ALP_rd フォールバックなし) 。#91362 (Nazarii Piontko).
- JSON カラム向けの実験的な遅延実行型ヒントを追加しました。
allow_experimental_json_lazy_type_hintsで有効にすると、型ヒントの追加または変更だけを行うALTER TABLE ... MODIFY COLUMN json JSON(path TypeName)は、過去のデータを書き換えることなく、メタデータのみの操作として即座に完了します。型ヒントは古いパーツにはクエリ時に適用され、INSERT時およびバックグラウンドマージ時に実体化されます。#97412 (tanner-bruce). polyglotライブラリを使用した外部 SQL方言のサポートを追加しました。#99496 (Alexey Milovidov).query_plan_optimize_join_order_randomize設定を追加しました。これは JOIN の並べ替えに使われる統計情報をランダム化するもので、テストに役立ちます。#100643 (Vladimir Cherkasov).- ClickHouse に AI 関数のサポートを追加し、ユーザーが SQL を使って OpenAI と Anthropic のエンドポイントを呼び出せるようにしました。最初の関数として
aiGenerateが含まれています。#100831 (George Larionov). - ClickHouse で LLM API を利用するための AI 関数
aiClassify、aiExtract、aiTranslateを追加しました。#100832 (George Larionov). - Delta Kernel を利用した Azure 上のデータレイクのサポートを追加しました。#102202 (Smita Kulkarni).
パフォーマンス改善
JOIN のパフォーマンス
HashJoinとConcurrentHashJoinに対して、いくつかの小規模な改善を行いました。#96663 (Yarik Briukhovetskyi).- オプティマイザの統計情報に基づいて、
ANTI、SEMI、FULLJOIN の左右を入れ替えられるようにしました。#97498 (Hechem Selmi). - 書き込み前に
JoinUsedFlagsが設定されているかを確認することで、RIGHTおよびFULLJOIN における cache の競合を軽減しました。#99274 (Hechem Selmi). - direct-index hash table を使用することで、範囲が小さい
Int32およびInt64キーでのハッシュ結合を高速化しました。#99275 (Hechem Selmi).
クエリ最適化
- 大きな Polygon に対する
pointInPolygonの granule skipping を最適化し、主キーのプルーニング中にpointInPolygonの索引解析で例外が発生する問題を修正しました。#91633 (Nihal Z. Miaji). optimize_read_in_orderが、projections の読み取り時にも適用されるようになりました。#95885 (Andrey Zvonov).- テキスト索引 Dictionary からの読み取りをわずかに最適化し、テキスト索引解析全体のパフォーマンスを向上させました。#97519 (Anton Popov).
- 索引付きカラムと索引なしカラムの両方を含む複合条件を持つクエリにおける、テキスト索引解析のパフォーマンスを改善しました。従来、このようなケースでは索引解析中の早期終了最適化が誤って無効化されていました。#98096 (Anton Popov).
- 非常に長い配列や Map を生成する定数式を含むクエリのパフォーマンスを改善しました。#98287 (Alexey Milovidov).
DateTime64の主キーを整数定数と比較した際のキー条件解析を修正しました。従来は、その結果 granule pruning が行われていませんでした。#98410 (Amos Bird).optimize_syntax_fuse_functions設定がデフォルトで有効になりました。#98424 (Alexey Milovidov).- predicate に任意の比較演算子 (
=,<,>,!=) が含まれ、かつ partition key が決定論的な function chain でラップされている場合に、partition pruning が可能になりました (たとえばPARTITION BY xの場合、cityHash64(x) % 5 > 2、toYYYYMM(x) < 2026、toYYYYMM(x) = 2026、toYYYYMM(x) != 2026のような predicates は、いずれも pruning に partition key を利用します) 。#98432 (Nihal Z. Miaji). CASTの対象型がNullableで、かつ変換が monotonic な場合に、read-in-order 最適化と主キーのプルーニングが可能になりました。たとえばPRIMARY KEY xの場合、ClickHouse はORDER BY x::Nullable(UInt64)に対して read-in-order 最適化を使用でき、WHERE x::Nullable(UInt64) > 500000のような predicates に対して主キーのプルーニングを使用できます。#98482 (Nihal Z. Miaji).- 整数カラムを浮動小数点リテラルと比較する場合に、index pruning と filter pushdown が可能になりました。たとえば
WHERE x < 10.5のような predicates で主キーを pruning に使用できるようになり、prime < 1e9やnumber < 1e5のような filters も、無制限に実行される代わりにprimes()およびnumbers()の table functions へ pushed down されるようになりました。#98516 (Nihal Z. Miaji). ^(abc-1|abc-2)のように、リテラル文字列に対する正規表現の選択肢を使って MergeTree の主キーカラムをフィルタするクエリで、選択肢が共通のプレフィックスを持つ場合に主キーのプルーニングを使用できるようになりました。#98988 (Yash).INTERSECT ALLとEXCEPT ALLを最適化しました。#99097 (Raufs Dunamalijevs).- 逆順読み取りに対する
read_in_order_use_virtual_row最適化のサポートを追加しました。#99198 (Vladimir Cherkasov). - 単一の Dictionary を持つ
LowCardinalityカラムに対する非連続なクエリが高速化されました。#99285 (Ivan Babrou). - 多数のコアを持つマシンで、集約を伴う短いクエリのスケーリング悪化を修正しました。クエリが少数のマークしか読み取らない場合、集約後にパイプラインが
max_threadsまで拡張されなくなり、ほぼ空のストリームによるオーバーヘッドを回避します。#99493 (Alexey Milovidov). - 読み取りタスクサイズを適切に選択することで、並列レプリカを使用するクエリの性能を向上させました。#99801 (Nikita Taranov).
ORDER BYプレフィックスでGROUP BYのすべてのキーがカバーされている場合、末尾の冗長なORDER BY要素を削除するようになりました。#100157 (Alexey Milovidov).LIMIT句をUNION ALLにプッシュダウンすることで、クエリを最適化しました。#100364 (Alexey Milovidov).ORDER BYにおけるStringおよびFixedStringカラム比較で JIT コンパイルのサポートを追加し、文字列主体のソートキーに対するマージフェーズのソート性能を 6~17% 向上させました。#100577 (Raúl Marín).- 新しい
read_in_order_use_virtual_row_per_block設定とともにread_in_order_use_virtual_rowが有効な場合、MergeTree から各 block を読み取るたびに virtual row の境界情報が出力されるようになりました。これにより、WHERE/PREWHERE/JOINによってデータが完全に絞り込まれるパーツについて、マージ処理がストリームの途中でソースの優先順位を付け替えられるようになります。#100603 (Vladimir Cherkasov). - 並列レプリカで実行されるシンプルなビュー (基盤となる MergeTree テーブル上) に対するクエリの並列化を改善しました。#100815 (Igor Nikonov).
parallel_replicas_allow_view_over_mergetree=1の場合、シンプルなビュー (MergeTreeテーブル上の対象となるUNION ALLビューを含む) に対する並列レプリカのサポートを追加しました。これにより、内側のクエリではなくビューの外側のクエリが並列化され、ノード間でのクエリ並列性が向上します。#100958 (Igor Nikonov).- クエリプランに
INを含むフィルターがある場合の、full_sorting_mergeにおける主キー順の読み取りを最適化しました。#101261 (Nikita Taranov). - 値がエスケープされた文字列 (例:
'{\'key\':1}') として渡される場合のMap、Array、Tupleカラムに対するINSERT VALUESの性能を改善し、SQL 式パーサーへの不要な fallback を回避するようにしました。#102119 (Joanna Hulboj).
関数と集約のパフォーマンス
levenshteinDistance関数のパフォーマンスを改善しました。#94543 (Joanna Hulboj).- 要素ごとの関数呼び出しを避けることで、Decimal 型のバッチ変換を最適化しました。#95923 (Konstantin Bogdanov).
LIKEクエリのパフォーマンスを改善しました。#98149 (Elmi Ahmadov).- 行ごとに aggregate state を介して store-forwarding する代わりにローカルアキュムレータを使用することで、
avgWeighted集約関数を最適化し、Nullable入力で最大 27% の性能向上を実現しました。#98793 (Antonio Andelic). - 内部ループの devirtualization により、
Float64カラムに対するvar*Stableおよびstddev*Stable関数を高速化しました。これによりコンパイラ最適化 (FMA/レジスタ) が有効になり、浮動小数点の結果が ULP レベルで変化します。#99460 (Riyane El Qoqui). - 32/64 バイトの入力では最適化された Firedancer の base58 エンコードを使用するようにし (
base58Encodeでは自動適用) 、デコード結果が 32/64 バイトの場合は最適化された base58 デコードも使えるようにしました (base58Decode('...', 32)で明示指定) 。#99461 (Joanna Hulboj). - 不要なメモリシフトを排除することで、
cutURLParameter関数を最適化しました。#100218 (Nikita Semenov). itoaの高速パスを dragonbox 互換の rounding に対応させることで、大きな整数値に対する float から文字列への変換を高速化しました。#100649 (Raúl Marín).- float から文字列への変換を 1.5~3 倍高速化するため、dragonbox を zmij に置き換えました。#100650 (Raúl Marín).
- ソフトウェア除算を Barrett reduction に置き換え、変換ループをアンロールすることで、
Int128/UInt128から文字列への変換を高速化しました。#100671 (Raúl Marín). UniqExactSetの並列マージで冗長なスレッド生成を回避しました。#100686 (Jiebin Sun).UniqExactSetにバッチ並列マージを追加しました。#100687 (Jiebin Sun).
ストレージと I/O のパフォーマンス
- 完了済みのミューテーションがある ReplicatedMergeTree テーブルにおいて、読み取り専用の操作中のロック競合を削減しました。#95771 (Eduard Karacharov).
- Iceberg で、テーブル作成時に
iceberg_metadata_async_prefetch_period_msを設定することで、メタデータを非同期に cache へ事前投入できるようになりました。Iceberg テーブルに対するSELECTクエリでは、iceberg_metadata_staleness_msパラメータを指定できるようになり、これにより、メタデータが指定した staleness より新しい場合は ClickHouse が cache 内のメタデータを利用し、そうでない場合は最新のメタデータを取得するためにリモートの Iceberg カタログに問い合わせます。これにより、リクエスト処理中の Iceberg カタログへの問い合わせを不要にでき、目に見える性能向上が得られます。#96191 (Arsen Muk). - S3Queue の ordered モードで、S3 の
ListObjectsV2StartAfterを使用してプレフィックス履歴全体の再一覧取得を回避するようになり、ListObjectsの呼び出し回数を削減しました。#96370 (Venkata Vineel). - YTsaurus テーブルエンジンで並列読み取りを有効にしました。#97343 (MikhailBurdukov).
- データレイクの性能を改善しました。以前のバージョンでは、オブジェクトストレージから読み取る際に、処理スレッド数に合わせてパイプラインのサイズが調整されていませんでした。#99548 (Alexey Milovidov).
- ユーザー空間 page cache を介してリモートファイルを読み取る際に、プリフェッチを許可しました。#99919 (Alexey Milovidov).
deduplicate_insert=enable(26.2 以降のデフォルト設定) で発生していた大幅な INSERT 性能低下を修正しました。これは、データ hash の計算を squashing から sink に遅らせ、updateHashWithValueRangeによるバッチ単位のカラムハッシュ計算を使用することで実現しており、22 カラム・500 万行での overhead を約 2.5 秒から約 0.5 秒に削減します。#101494 (Sema Checherinda).
メモリ最適化
- 同期 insert で、メモリを節約するために、元の block (重複排除に必要) を省略できるようになりました。#96661 (Sema Checherinda).
- 特定のシナリオにおける並列ウィンドウ関数と、大きな配列を含む
arrayFoldワークロードで、パフォーマンスを改善し、メモリ使用量を削減しました。これにより、影響を受けるクエリでは、ページフォールトの負荷が軽減され、厳しいメモリ制限下での安定性も向上する場合があります。#98892 (filimonov).
改善
クエリとSQL
- 集約プロジェクションがビューで正しくサポートされるようになりました。#88798 (Amos Bird).
optimize_aggregators_of_group_by_keysがGROUPING SETSクエリ内の集約関数を正しく最適化するようになりました。#93935 (Xiaozhe Yu).join_use_nulls使用時に、OUTERJOIN をINNERJOIN に変換する最適化をサポートしました。#95968 (Vladimir Cherkasov).cast_keep_nullableをDynamic/JSON型でも動作するように拡張しました。これを設定すると、Nullableにできる型からNULLをキャストした場合はNULLが返されます。設定しない場合、NULLはCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNエラーをスローします。#96504 (Seva Potapov).CREATE USERにROLE句を追加しました。#97074 (Vitaly Baranov).- 遅延フィルターに関する情報を、
EXPLAINクエリ出力に個別項目として追加しました (行ポリシー/PREWHERE と FINAL を使用する場合) 。#97374 (Yarik Briukhovetskyi). FROM句で、かっこ付きのテーブル JOIN 式をサポートしました。たとえばSELECT * FROM (t1 CROSS JOIN t2)のように使用できます。#97650 (Alexey Milovidov).- 分散索引解析でデータスキッピングインデックスを適用するようになりました。#97767 (Azat Khuzhin).
- テーブルのソートキーに
toDate(time)のような式を使用できるようになり、そのような式を遅延させないかどうかは、それらがフィルターの一部である場合に判断されるようになりました。#98237 (Yarik Briukhovetskyi). - JOIN 順序オプティマイザーが、既存の JOIN 条件から推移的な等値 JOIN 述語を推論するようになりました。たとえば
A.x = B.x AND B.x = C.xが与えられた場合、A.x = C.xという等価関係が認識され、推移的につながったテーブル間の直接 JOIN をオプティマイザーが検討できるようになります。これにより、スターおよびスノーフレークのスキーマで実行計画の品質が向上する可能性があります。この機能は、新しいenable_join_transitive_predicates設定で制御されます (デフォルトでは無効) 。#98479 (Alexander Gololobov). apply_row_policy_after_finalまたはapply_prewhere_after_finalが有効な場合、行ポリシーおよびPREWHEREの複合AND条件が分解され、主キー索引解析のためにソートキーの要素を抽出するようになりました。以前は、遅延フィルターにソートキーの述語と非ソートキーの述語が混在している場合 (たとえばx > 1 AND y != 'foo') 、式全体が索引解析から除外されていました。#98513 (Yarik Briukhovetskyi).- 分散索引解析には、“alive” (接続可能な) レプリカのみが参加するようになりました。#98521 (Azat Khuzhin).
- 自動 並列レプリカ ヒューリスティックで使用されるノード数を、
max_parallel_replicas設定だけでなく、クラスター内の実際のノード数に合わせて上限設定するようにしました。#98668 (Nikita Taranov). - 分散索引解析向けに、ヘッジドリクエストと非同期読み取りを実装しました。#98724 (Azat Khuzhin).
- 分散索引解析で
SAMPLE句をサポートしました。#98931 (Azat Khuzhin). - multiply の単調性をサポートし、
key * constant式に対する主キー pruning を有効にしました。#98983 (Amos Bird). - アナライザのエラーメッセージで、テーブルのすべてのカラムをダンプしなくなりました (これまでは 150KB 超の例外が発生する可能性がありました) 。カラム一覧は現在 10 件に制限されています。#99002 (Yash).
- join を含むサブクエリからの列統計が正しく返されるようになり、親クエリがそれを join の並べ替えに利用できるようになりました。#99096 (Alexander Gololobov).
ALTER TABLE MODIFY COLUMN x TTL ...で、カラム型を指定しなくても許可されるようになりました。#99208 (Nikolay Degterinsky).EXPLAIN PLAN pretty=1の出力を改善しました。最上位クエリの出力カラムを表示し、join relation のラベル/シンボルに推定結果行数と locality を表示し、join/source ステップごとの出力カラムも含まれるようになりました。#99462 (Kirill Kopnev).- すべての基盤となる distributed/remote テーブルに存在しないカラムをクエリした際に、
merge()table function がUNKNOWN_IDENTIFIERエラーで失敗する問題を修正しました。#99833 (Alexey Milovidov). - 条件が CNF でない場合、optimizer で
ConditionSelectivityEstimatorを使用しないようになりました (たとえばwhere a = 0のように、統計情報が役に立たない単一条件の場合) 。#100110 (Han Fei). distributed_index_analysis_min_indexes_bytes_to_activateをパーティション pruning の後に適用するようになりました。#100477 (Azat Khuzhin).EXPLAIN PIPELINEでdistributed=1setting をサポートし、リモートのパイプラインフラグメントを含められるようになりました。#100513 (Nikita Taranov).use_partition_pruning = 0は、パーティションキーに基づく pruning を無効化するだけでなく、パーティションキー カラムに対するMinMaxindex pruning と count 最適化も無効化するようになりました。#100904 (Nihal Z. Miaji).EXPLAIN [PLAN] pretty=1で、expression を人が読める形式で表示するようになりました。#100927 (Kirill Kopnev).accurateCastOrNullとaccurateCastOrDefaultがTupleの target type をサポートするようになり、Nullable要素を含むネストされたTuplesも対象になりました。これまではTupleをNullableの内側に置けなかったため、これらの function はTupletarget を拒否していました。#100942 (Nihal Z. Miaji).SELECTクエリの前のWITH句で、末尾のカンマを使用できるようになりました。#101093 (Aruj Bansal).- predicate の選択性が十分に高い場合、FINAL を伴う ReplacingMergeTree 向けにカラムの遅延 materialization を実装しました。#101647 (Nikolai Kochetov).
- 統計情報がない条件に対するデフォルトの選択率推定を、業界標準のヒューリスティクスに合わせて改善しました。
LIKE条件の選択率は 0.1、不明な条件の選択率は 0.33 です。#101653 (Alexander Gololobov). - VIEW に対してさらに多くの最適化を適用できるよう、クエリツリー内で VIEW サブクエリをインライン展開するようにしました。#100830 (Dmitry Novik).
関数
JSONExtract関数で native JSON/Object 入力を使用できるようになりました。#96711 (Fisnik Kastrati).- ワイルドカードの意味を踏まえて
LIKEパターンをトークン化するtokensForLikePatternSQL 関数を導入しました。%と_はワイルドカードとして扱われ、エスケープされたワイルドカード (\%、\_) はリテラルとして扱われ、エスケープされていないワイルドカードに隣接するトークンは破棄されます。#97872 (Amos Bird). - 指定した日付の属する月の日数を返す
toDaysInMonth()関数を実装しました。#99227 (Vitaly Baranov). unicodeWordトークナイザーをasciiCJKにリネームしました。#100956 (George Larionov).- SQL 標準の
OVERLAY関数構文に対する、パーサーレベルの糖衣構文を追加しました。overlay関数自体はすでに存在しており、今回の追加により、PLACING、FROM、FORを区切りとして使うキーワードベースの形式がサポートされます。#101681 (Desel72). ngrams関数は、無効な N-gram 長を受け付けないようになりました。たとえば、SELECT ngrams('abc', 0)はエラーを返すようになりました。#101922 (Robert Schulze).LIKE最適化でarrayトークナイザーがサポートされるようになりました。#102880 (Elmi Ahmadov).
テーブルエンジンとストレージ
- マージ負荷が高い場合のクリーンアップ遅延を防ぐため、MergeTree に専用のクリーンアップスレッドを追加しました。#91574 (Amos Bird).
DELETE TTLルールを持つテーブルで、Vertical merge アルゴリズムを使用できるようになりました。#97332 (murphy-4o).prewarm_mark_cache設定が有効な場合、セカンダリ索引のマークがプリウォームされるようになりました (データパーツのフェッチ時およびテーブル起動時に、マークキャッシュへ読み込まれます) 。#97772 (Anton Popov).Nullable([Fixed]String)およびArray(Nullable([Fixed]String))のカラム上にテキスト索引を構築できるようになりました。#98118 (Jimmy Aguilar Mena).- 通常の shared merge tree で、
DROP DATABASE実行時にバックグラウンドマージを早い段階でキャンセルするようにしました。#98161 (Shaohua Wang). - INSERT 中に projection parts を同期的に finalize できる
finalize_projection_parts_synchronously設定を追加しました。これにより、多数の projections を持つテーブルでピークメモリ使用量を削減しつつ、既存の非同期動作はデフォルトで維持されます。#98228 (Amos Bird). share_nested_offsetsMergeTree 設定 (デフォルトはtrue) を追加しました。falseに設定すると、ドット付きの名前 (例:n.a,n.b) を持つ Array カラムは、オフセットファイルを共有したり、従来の Nested セマンティクスの一部として配列サイズの一致を検証したりせず、独立したカラムとして扱われます。#98416 (Amos Bird).- マージを並列に事前キャンセルすることで、
TRUNCATE DATABASE TABLES LIKEを最適化しました。#98597 (Shaohua Wang). - ロックを取得せずにタスクリソースを解放することで、
MergeTreeBackgroundExecutorのロック競合を削減しました。#98604 (Dmitry Novik). TRUNCATE DATABASEがクエリのキャンセルに応答するようになりました。#98828 (Shaohua Wang).- MergeTree 設定の変更後に statistics cache を再起動するようにしました。#98520 (Han Fei).
- compact パーツ内で圧縮ブロックをどのように構成するかを制御する
compress_per_column_in_compact_partsMergeTree 設定を追加しました。trueの場合 (デフォルトで、現在の動作を維持) 、各カラムが新しい圧縮ブロックを開始するため、必要なカラムだけを展開できます。falseの場合は、granule 内のすべてのカラムが同じ圧縮ブロックにまとめられるため、常に全カラムを読み取る workload で compression ratio と読み取り性能が向上します。#101114 (Amos Bird). - テキスト索引は GA となり、
compatibility設定にかかわらず常に有効のままになりました。これにより、バックアップの復元時や互換性モードでの実行時に予期せず無効化されるのを防ぎます。#101518 (Nikita Fomichev). IN演算子でmapValues(map)上に構築されたテキスト索引をサポートしました。#99286 (Anton Popov).- 同じクエリ内で同時に使用される複数のテキスト索引の解析を改善しました。テキスト索引の direct read 最適化では、
use_skip_indexes_on_data_read設定が不要になりました。#102255 (Anton Popov). HINTモードを通じて、hasPhrase関数でのテキスト索引解析のサポートを追加しました。#102438 (Elmi Ahmadov).- MinMax カラム STATISTICS では、最小値と最大値を
Float64ではなくField(型付き) として保存するようになりました。シリアライズされたフォーマットには、値に加えてカラムの型名も含まれます。STATISTICS ファイルのバージョンは V2 に更新されており、旧バージョンで書き込まれたファイルは再マテリアライズが必要です (ALTER TABLE ... MATERIALIZE STATISTICS ALL) 。#100605 (Han Fei).
データレイク
DataLakeCatalogの正常性を確認するための新しいクエリを追加しました。#94690 (Smita Kulkarni).- Unity Catalog 向けの Iceberg への書き込みを改善しました。#98162 (Konstantin Vedernikov).
- コード保守時にエラーが発生しにくくなるよう、
IcebergManifestFile内のエンティティを再構築しました (あわせて、一部のマニフェストファイルのキャッシュに関する問題も修正しています) 。#98231 (Daniil Ivanik). - Iceberg
ALTER TABLE ... EXECUTE expire_snapshots(...)を強化し、より多くの引数をサポートするようにしました。#99130 (murphy-4o). - カタログと連携する Iceberg の insert 用インターフェイスを変更しました。
storage_catalog_type、storage_aws_access_key_idなどの設定は非推奨になりました。#100334 (Konstantin Vedernikov). - ストレージパスとメタデータパスの混在使用によって発生していた Iceberg の一貫性のないパス処理を修正しました。また、Iceberg テーブルが書き込むテーブルロケーションは URL または絶対パスのいずれかでなければならないようにし、Azure でファイルサイズを数える際のフォールバックを追加し、Spark と互換性のある方法で
version-hint.txtを処理し、パスタイプを混同しにくくする型レベルの抽象化を導入し、position deletes の使用を修正しました。#100420 (Daniil Ivanik). show_data_lake_catalogs_in_system_tablesが無効な場合、「Maybe you meant …」のテーブルヒントのためにリモートのデータレイクカタログ全体をスキャンしないようにしました。#100452 (Alsu Giliazova).- Iceberg の data files のパースに使用される object 情報に、マニフェストファイルからパースされたファイルの行数とバイト単位のファイルサイズが含まれるようになりました。#100645 (Daniil Ivanik).
- 仮想カラムを備えた Delta Lake pruner を追加しました。#101634 (Konstantin Vedernikov).
S3 とオブジェクトストレージ
- S3 テーブルエンジン 向けに、テーブルのカラム定義のハッシュを S3 パスに挿入する
{_schema_hash}プレースホルダーを追加しました。#98265 (Miсhael Stetsyuk). - S3 endpoint に対して virtual/path style を強制する新しいオプションを追加しました。#102378 (Konstantin Vedernikov).
設定と構成
users_xml設定で複数の認証方式を指定できるようになりました。 #91998 (Flip-Liquid).- Replicated database で作成されたクラスターに対して、
internal_replication設定を指定できるようになりました。 #97228 (Pervakov Grigorii). allow_nullable_tuple_in_extracted_subcolumns設定が追加されました。これは、Tuple、Variant、Dynamic、JSONから抽出されたTuple(...)サブカラムを、Nullable(Tuple(...))(欠損行ではNULL) として返すか、Tuple(...)(欠損行ではデフォルトのタプル値) として返すかを制御します。デフォルトでは無効で、変更するには server の再起動が必要です。 #97299 (Nihal Z. Miaji).type_json_allow_duplicated_key_with_literal_and_nested_objectがデフォルトで有効になり、ClickHouse が元データ{"a" : 42, "a.b" : 42}から生成する可能性のある{"a" : 42, "a" : {"b" : 42}}のような JSON をパースする際に、重複キーに関するエラーを回避できるようになりました。 #97423 (Pavel Kruglov).- 列統計が GA になりました。設定
allow_experimental_statistics(デフォルトfalse) はallow_statistics(デフォルトtrue) に置き換えられて廃止され、allow_statistics_optimizeは beta から GA に昇格しました。さらに、ClickHouse は新しいカラムに対してminmaxとuniqの統計を作成するようになり (MergeTree settingauto_statistics_types) 、INSERT の速度低下を避けるため、materialize_statistics_on_insertはデフォルトで無効になりました。 #97487 (Han Fei). enable_parallel_replicasとautomatic_parallel_replicas_modeの関係が明確化されました。クエリが並列レプリカを使用できるのは、enable_parallel_replicas > 0の場合のみです。automatic_parallel_replicas_mode=1では、収集された統計に基づいてプランニング時に判断されます。automatic_parallel_replicas_mode=0では、統計に関係なく、サポートされているすべてのクエリで並列レプリカが使用されます。並列レプリカを使用する Distributed insert-select は、常にautomatic_parallel_replicas_mode=0であるかのように動作します。 #97517 (Nikita Taranov).- impersonate 機能 (EXECUTE AS target_user) がデフォルトで有効になりました。 #97870 (Vitaly Baranov).
access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users設定が追加されました (デフォルトで許可) 。この設定により、SQL で定義されたユーザーでは、config で定義された settings profiles (defaultprofile を除く) を使用できなくなります。 #98662 (Alexander Tokmakov).VariantおよびDynamicの型不一致時の動作 (throw するか null を返すか) を制御する設定が追加されました。 #99085 (Bharat Nallan).- 実行可能 UDF のデフォルト
stderr_reactionがthrowからlog_lastに変更されました。stderr に警告を書き込む UDF は、終了コードが 0 であれば失敗しなくなり、終了コードによる例外には stderr の内容が含まれるようになりました。 #99232 (Xu Jia). input_format_column_name_matching_mode設定が追加され、入力フォーマットごとに異なる大文字・小文字の区別を使用できるようになりました。 #99346 (manerone).- システムテーブルでは自動統計が有効にならなくなりました。恩恵を受けることがほとんどないためです。 #102862 (Han Fei).
システムテーブルと監視
- クエリ実行時に使用されたデータスキッピングインデックスが、新しい
skip_indicesカラムとしてsystem.query_logに記録されるようになりました。 #99793 (Grant Holly). system.part_logにprojections_duration_msカラムが追加され、各プロジェクションのマージ/再構築にかかった時間がミリ秒単位で記録されるようになりました。 #98292 (Amos Bird).information_schema.tablesにカラムエイリアスINDEX_LENGTHが追加されました。 #101705 (Robert Schulze).information_schema.tablesでは非アクティブなテーブルパーツが無視されるようになり、表示されるテーブルサイズの値がより実態に近くなりました。 #101706 (Robert Schulze).
ClickHouse Keeper
find_super_nodesが最初の super node の子要素の走査で止まらなくなり、複数の super node を見つけられるようになりました。 #97819 (pufit).- ZooKeeper セッションは、送信スレッドの終了を待つのではなく、終了処理の開始時に直ちに期限切れとしてマークされるようになりました。これにより、ほかのスレッドは遅延なく新しいセッションを確立できます。 #99102 (Raúl Marín).
- すでに切断済みのセッションに対する古い Keeper リクエストをスキップし、不要な Raft の往復を回避するようになりました。追跡する完了済みセッション数の上限は、協調設定
max_finished_sessions_cache_sizeで制御されます。 #99246 (Antonio Andelic). - ロック競合によって Keeper の
mntrコマンドが停止することを防ぐようになりました。 #99472 (Antonio Andelic). - コールバックの呼び出しと read request のディスパッチを mutex のスコープ外で行うことで、Keeper dispatcher でのロック競合を低減し、あわせてオブザーバビリティのためのプロファイル付きロックガードを追加しました。 #99751 (Antonio Andelic).
メモリ管理
- cache アリーナの分離を制御する
use_separate_cache_arena設定パラメータを追加しました。#100664 (Seva Potapov) 。
データフォーマット
- テキスト出力フォーマットで
FixedString値の末尾にある null byte を取り除くためのoutput_format_trim_fixed_string設定を追加しました。 #97558 (NeedmeFordev). - 同じカラム内に異なる Geo 型を含む GeoParquet ファイルを解析できるようになりました。 #97851 (Mark Needham).
- バイナリ
AggregateFunctionstate のデシリアライゼーションでは、入力全体を完全に消費することが必要になりました。余分な末尾バイトがある場合、ClickHouse は不正な state データを受け入れるのではなく、例外をスローするようになりました。 #98786 (Nihal Z. Miaji). - ClickHouse の interval データ型を Arrow format に書き込めるようになりました。 #99519 (Peter Nguyen).
- Arrow および Parquet フォーマットで UUID データ型をインポートおよびエクスポートするネイティブサポートを追加しました。これには、トップレベル UUID の自動推論と、ネストされた UUID に対する明示的なスキーマヒントのサポートが含まれます。 #99521 (Ivan).
- Parquet files の最後の block の末尾でパディングが欠けていても許容するようになりました。 #99857 (Seva Potapov).
- Arrow encoder 経由で UUIDs を Parquet にエクスポートする際、正しい UUID 型アノテーションが含まれるようになり、ファイルを再度読み込むときに
FixedString(16)データを手動で cast する必要がなくなりました。 #100150 (Ivan). - Apache Arrow の
StringViewおよびBinaryViewデータ型を ClickHouse のStringカラムにインポートするネイティブサポートを追加し、Arrow ベースのインジェストとの互換性を向上させました。 #100762 (Ivan). Arrow、ArrowStream、ORC、および従来のParquetフォーマットでNullable(Tuple)をサポートしました。 #101272 (Nihal Z. Miaji).
名前付きコレクションとディクショナリ
- PostgreSQL の Dictionary ソースで許可されるキーに
sslmodeを追加し、PostgreSQL の Dictionary 接続で SSL モードを設定できるようにしました (AWS RDS など、デフォルトで SSL を必須としている環境に対応) 。 #98014 (mcalfin). - Dictionary ソースが依存している名前付きコレクションを削除しないようにしました。 #98127 (Pablo Marcos).
- Dictionary 属性として
MapおよびJSON/Object型をサポートしました。これにより、ディクショナリでMap(String, String)、Map(String, Array(String))、JSON、Nullable(JSON)などの複雑な型を、FLAT レイアウトと HASHED レイアウトの両方で保存および取得できるようになりました。 #98627 (yanglongwei). SYSTEM RELOAD DICTIONARIESがディクショナリをトポロジカル順で再読み込みするようになり、ほかのディクショナリをソースとするディクショナリでも、再読み込み後に最新データを参照できるようになりました。 #98356 (Alexey Milovidov).- cache ディクショナリは
hasKeysで排他ロックを取得しなくなり、cache 読み取りに共有ロックを使用することでロック競合を軽減しました。 #100796 (liuguangliang).
その他の改善
ACCESS_DENIEDのヒントで、ユーザーが必要なすべてのカラムを表示できない場合は、カラム名が表示されなくなりました。データベース名とテーブル名は引き続きヒント内に表示されます。 #91067 (filimonov).- 任意の host の IP ではなく、ローカル server の hostname に対応する IP が変更された場合にクラスター構成を再読み込みするようになりました。 #93726 (Zhigao Hong).
- クラッシュ時に非同期ロギングのバッファをフラッシュするようにしました。 #97836 (Azat Khuzhin).
- アクセス制御中のロックを削減しました。 #97894 (Nikita Taranov).
- ClickStack をバージョン 2.20.0 に更新しました。 #98252 (Aaron Knudtson).
- server の環境変数へのアクセスを防ぐため、埋め込みクライアント (SSH および WebSocket プロトコル) で AI SQL generation (
??コマンド) を無効にしました。 #100290 (Alexey Milovidov). - RabbitMQ storage 使用時に破損したメッセージを NACK するようにしました。 #102157 (Seva Potapov).
バグ修正
すべてのバグ修正(クリックして展開)
すべてのバグ修正(クリックして展開)