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データ型が可読性の高い形式で出力されるようになりました。以前のバージョンでは、この設定はDESCRIBEクエリとtoTypeNameにのみ適用されていました。これにより #65753 が解決されます。 #68492 (Alexey Milovidov). - デフォルトで
[PRE]WHERE句内のフィルタ条件の並べ替えが許可されるようになりました。これはallow_reorder_prewhere_conditionsをfalseに設定することで無効にできます。 #70657 (Nikita Taranov). mapKeys/mapValuesでLowCardinality型を保持することで、optimize_functions_to_subcolumns最適化を修正しました(以前はInvalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)エラーを引き起こす可能性がありました)。 #70716 (Azat Khuzhin).
新機能
- リフレッシュ可能なマテリアライズドビューが本番利用向けに安定しました。 #70550 (Michael Kolupaev)。リフレッシュ可能なマテリアライズドビューが 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オプションに関連付けられており、Control+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設定を追加しました。有効化すると、空フィールドがデフォルト値として処理されます。#59339 をクローズしました。#66782(Alexis Arnaud)。 - 文字列の一部を別の文字列で置き換えるための関数
overlayとoverlayUTF8を追加しました。例:SELECT overlay('Hello New York', 'Jersey', 11)はHello New Jerseyを返します。 #66933 (李扬). - Add new Command, Lightweight Delete In Partition(パーティション内の軽量削除)を追加
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)。 - 文字列の RIPEMD-160 暗号学的ハッシュを計算する
ripeMD160関数を追加しました。例:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))は37F332F68DB77BD9D7EDD4969571AD671CF9DD3Bを返します。 #68639 (Dergousov Maxim). - URL テーブルエンジンに仮想カラム _headers を追加し、#65026 をクローズ。 #68867 (flynn)。
- 利用可能な projection を追跡するための
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 をサポートしました。配列インデックスが範囲外の場合、またはマップのキーが見つからない場合は 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).