v24.10 Cloud 向け変更履歴
v24.10 リリースに基づく ClickHouse Cloud サービス向けの主な変更点をまとめています。
後方互換性のない変更
- サブクエリが丸括弧で囲まれている
UNIONを含むクエリチェーンで、FORMATより前にSETTINGSを記述できるようにしました。これにより #39712 がクローズされます。クエリ内で SETTINGS 句が連続して 2 回指定されている場合の動作も変更しました。最も近い SETTINGS 句が、対応するサブクエリに対して優先されます。以前のバージョンでは、最も外側の SETTINGS 句が内側より優先される場合がありました。#60197#68614(Alexey Milovidov)。 - Dynamic 型を再実装しました。Dynamic データ型の上限に達したときに、新しい型は String にキャストされるのではなく、データ型も含めてバイナリ形式でエンコードされた特別なデータ構造に格納されるようになりました。これにより、これまでに Dynamic カラムに挿入されたあらゆる型を、サブカラムとして読み出すことができます。 #68132(Pavel Kruglov)。
a[b].cのような式が名前付きタプルでサポートされるようになり、同様に任意の式からの名前付き添字(例:expr().name)もサポートされるようになりました。これは JSON の処理に有用です。これにより #54965 がクローズされます。以前のバージョンでは、expr().name形式の式はtupleElement(expr(), name)としてパースされ、クエリアナライザは対応するタプル要素ではなくカラムnameを検索していました。一方、新しいバージョンではtupleElement(expr(), 'name')に変更されています。ほとんどの場合、以前のバージョンは正しく動作していませんでしたが、この変更が非互換性を引き起こしうる非常に稀なシナリオを想定することもできます。例えば、タプル要素の名前を、そのタプル要素の名前とは異なる名前のカラムまたはエイリアスに格納している場合です:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a。そのようなクエリを使用している可能性は非常に低いと考えられますが、それでもこの変更は後方互換性に影響を及ぼす可能性があるものとしてマークする必要があります。 #68435(Alexey Milovidov)。print_pretty_type_names設定が有効な場合、SHOW CREATE TABLE文、formatQuery関数、およびclickhouse-clientとclickhouse-localの対話モードで、Tupleデータ型を Pretty 形式で出力するようになりました。以前のバージョンでは、この設定はDESCRIBEクエリとtoTypeNameにのみ適用されていました。これにより #65753 がクローズされます。 #68492(Alexey Milovidov)。[PRE]WHERE句内のフィルター条件の並べ替えがデフォルトで許可されるようになりました。この動作はallow_reorder_prewhere_conditionsをfalseに設定することで無効化できます。 #70657(Nikita Taranov)。optimize_functions_to_subcolumns最適化を修正しました(以前はInvalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)エラーにつながることがありました)。mapKeys/mapValuesでLowCardinality型を保持することで修正しています。 #70716(Azat Khuzhin)。
新機能
- リフレッシャブルmaterialized view は本番利用が可能になりました。#70550(Michael Kolupaev)。リフレッシャブルmaterialized view は Replicated データベースでもサポートされるようになりました。#60669(Michael Kolupaev)。
- 関数
toStartOfInterval()に、新しいオーバーロードが追加されました。これは TimescaleDB のtime_bucket()関数および PostgreSQL のdate_bin()関数と同等の動作をします(#55619)。これにより、日付またはタイムスタンプの値を、固定 の起点 0000-01-01 00:00:00.000 ではなく、任意 の起点からの指定された間隔の倍数に揃えることができます。例えば、SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));は2023-01-01 14:44:30を返します。これは、起点2023-01-01 14:35:30からの 1 分間隔の倍数に揃えられた値です。#56738 (Yarik Briukhovetskyi)。 - MongoDB 統合のリファクタリング: 非推奨となった Poco::MongoDB から新しいドライバ mongocxx への移行、非推奨の旧プロトコルのサポート削除、URI での接続のサポート、すべての MongoDB 型のサポート、MongoDB 側での WHERE および ORDER BY 文のサポート、MongoDB でサポートされない式に対する制限を追加。 #63279 (Kirill Nikiforov).
- clickhouse-client に新しい
--progress-tableオプションが追加され、クエリ実行中に変化するメトリクスを表形式で表示できるようになりました。また、新しい--enable-progress-table-toggleオプションが--progress-tableオプションに関連付けられており、Ctrl+Space を押すことで進捗テーブルの表示を切り替えられます。 #63689 (Maria Khristenko). - これにより、ワイルドカード付きプレフィックスへのアクセス権を付与できるようになります。
GRANT SELECT ON db.table_pefix_* TO user。#65311(pufit)。 - ClickHouse が各行を、メタデータ、データ、進捗、合計、および統計情報を含む改行区切りの JSON オブジェクトとして出力する JSONCompactWithProgress フォーマットを導入しました。 #66205 (Alexey Korepanov).
system.eventsテーブルから取得した個々のクエリのメモリおよびメトリクス値の履歴を保持し、定期的にディスクにフラッシュするsystem.query_metric_logを追加しました。 #66532 (Pablo Marcos)。- JSON 入力の空フィールドをデフォルト値として扱う
input_format_json_empty_as_default設定を追加しました。この設定を有効にすると、JSON 入力内の空フィールドをデフォルト値として扱います。#59339 をクローズしました。#66782(Alexis Arnaud)。 overlayおよびoverlayUTF8関数を追加しました。これらは文字列の一部を別の文字列で置き換えます。例:SELECT overlay('Hello New York', 'Jersey', 11)を実行するとHello New Jerseyを返します。 #66933 (李扬).- パーティション内で論理削除を行う新しいコマンドを追加しました
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny). Intervalデータ型の値の比較を実装し、現在は最小上位型へ変換されるようになりました。 #68057 (Yarik Briukhovetskyi)。- CREATE 文で IF NOT EXISTS の動作をデフォルトにするための create_if_not_exists 設定を追加しました。 #68164 (Peter Nguyen).
- Azure およびローカル環境にある Iceberg テーブルを読み取れるようにしました。 #68210 (Daniil Ivanik).
- JSON カラムの内容をより詳細に把握できるようにするため、集約関数
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypesを追加しました。 #68463 (Pavel Kruglov). - クエリキャッシュエントリをタグ単位で削除できるようになりました。たとえば、
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'によって作成されたクエリキャッシュエントリは、SYSTEM DROP QUERY CACHE TAG 'abc'で削除できます(あるいは、SYSTEM DROP QUERY CACHEとするだけでクエリキャッシュ全体をクリアできます)。 #68477(Michał Tabaszewski)。 - 暗黙の SELECT によって電卓のような式を有効にするシンプルな SELECT クエリを書けるようになりました(例:
ch "1 + 2")。これは新しい設定implicit_selectによって制御されます。 #68502(Alexey Milovidov)。 - フォーマット変換用のショートカットとして、clickhouse local での --copy モードをサポートしました #68503。#68583(Denis Hananein)。
ripeMD160関数を追加しました。この関数は、文字列の RIPEMD-160 暗号学的ハッシュを計算します。例:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))は37F332F68DB77BD9D7EDD4969571AD671CF9DD3Bを返します。 #68639 (Dergousov Maxim).- url テーブルエンジン向けに仮想カラム _headers を追加。#65026 をクローズ。#68867(flynn)。
- 利用可能なプロジェクションを把握するための
system.projectionsテーブルを追加。 #68901 (Jordi Villar). arrayUnion関数のサポートを追加。#68989(Peter Nguyen)。- Spark の互換性(arrays_zip)を確保するために、新しい関数
arrayZipUnalignedを追加しました。これは元のarrayZipに基づき、要素数が揃っていない配列も許可します。 ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬). - 集約関数
quantileExactWeightedInterpolatedをサポートしました。これはquantileExactWeightedに基づく補間版です。すでにquantileExactInterpolatedWeightedがあるのに、なぜ新しいquantileExactWeightedInterpolatedが必要なのか疑問に思う人もいるかもしれません。その理由は、新しいほうが従来のものより高精度であるためです。なお、これは Apache Gluten における Spark との互換性のための機能です。 #69619 (李扬). - 関数 arrayElementOrNull に対応しました。配列のインデックスが範囲外の場合、または map のキーが見つからない場合は null を返します。 #69646 (李扬).
- Dynamic の内部型上で関数を実行することで、ほとんどの関数で Dynamic 型をサポートするようにしました。 #69691 (Pavel Kruglov)。
- 関数
arrayAUCに引数scale(デフォルト:true)を追加し、正規化ステップをスキップできるようにしました(issue #69609)。#69717(gabrielmcg44)。 - 文字列の RIPEMD-160 暗号学的ハッシュ値を計算する
RIPEMD160関数を再度追加しました。例:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))は37F332F68DB77BD9D7EDD4969571AD671CF9DD3Bを返します。 #70087 (Dergousov Maxim)。 - ETag とファイルパスから生成したハッシュをキャッシュキーとして使用し、オブジェクトストレージのテーブルエンジンおよびデータレイク向けに読み取り対象のファイルをキャッシュできるようになりました。 #70135 (Kseniia Sumarokova)。
- HDFS 上の Iceberg テーブルの読み込みをサポートしました。 #70268 (flynn)。
input_format_binary_read_json_as_string/output_format_binary_write_json_as_stringの設定により、RowBinary 形式で JSON 型をバイナリ文字列として読み書きできるようになりました。 #70288 (Pavel Kruglov).- Native フォーマットで JSON カラムを単一の String カラムとしてシリアライズ/デシリアライズできるようにしました。出力時には
output_format_native_write_json_as_string設定を使用します。入力時には、カラムデータの前にシリアライゼーションバージョン1を指定します。 #70312 (Pavel Kruglov). - 標準的なCTEである
with insertをサポートしました。これまではinsert ... with ...のみをサポートしていました。 #70593 (Shichao Jin).