後方互換性を持たない変更
- サブクエリが括弧内にある
UNIONを含むクエリチェーンで、FORMATの前にSETTINGSを記述できるようになりました。これにより #39712 をクローズします。また、クエリチェーン内で SETTINGS 句が 2 回指定された場合の動作も変更されました。対応するサブクエリでは、最も近い SETTINGS 句が優先されます。以前のバージョンでは、最も外側の SETTINGS 句が内側の句より優先される場合がありました。 #60197#68614 (Alexey Milovidov). - Dynamic 型を再実装しました。動的な型の上限に達した場合、新しい型は String に CAST されず、バイナリエンコードされたデータ型を持つバイナリ形式の特別なデータ構造に格納されるようになりました。これにより、Dynamic カラムにこれまで挿入されたあらゆる型をサブカラムとして読み取れるようになりました。 #68132 (Pavel Kruglov).
a[b].cのような式が named tuple でサポートされるようになり、expr().nameのように任意の式に対する名前付き添字もサポートされます。これは JSON の処理に役立ちます。これにより #54965 をクローズします。以前のバージョンでは、expr().name形式の式はtupleElement(expr(), name)としてパースされ、クエリ アナライザは対応する tuple 要素ではなくnameというカラムを探していました。一方、新しいバージョンではtupleElement(expr(), 'name')に変更されています。ほとんどの場合、以前のバージョンは正しく動作していませんでしたが、この変更が非互換性につながる非常に特殊なケースは考えられます。たとえば、tuple 要素名を、その tuple 要素名とは異なる名前を持つカラムまたは alias に格納していた場合です: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).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 が各行を、メタデータ、データ、progress、totals、統計情報を含む改行区切りの JSON オブジェクトとして出力する JSONCompactWithProgress フォーマットが導入されました。 #66205 (Alexey Korepanov).
- 各クエリごとの、テーブル system.events にあるメモリおよびメトリクスの値の履歴を含み、定期的にディスクへフラッシュされる system.query_metric_log を追加しました。 #66532 (Pablo Marcos).
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 column type の内容をより詳しく把握するため、集約関数 distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes を追加しました。#68463 (Pavel Kruglov) 。
- クエリキャッシュのエントリをtagでdropできるようになりました。たとえば、
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'で作成されたクエリキャッシュのエントリは、SYSTEM DROP QUERY CACHE TAG 'abc'でdropできます (もちろん、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関数を追加しました。Example:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))は37F332F68DB77BD9D7EDD4969571AD671CF9DD3Bを返します。 #68639 (Dergousov Maxim). - URL table engine に仮想カラム _headers を追加しました。#65026 をクローズします。#68867 (flynn).
- 利用可能なプロジェクションを追跡するため、
system.projectionsテーブルを追加しました。#68901 (Jordi Villar) 。 arrayUnion関数のサポートが追加されました。#68989 (Peter Nguyen) 。- Spark との互換性(arrays_zip)のため、元の
arrayZipをベースに、長さのそろっていない配列も扱える新しい関数arrayZipUnalignedを追加しました。 ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬). - 集約関数
quantileExactWeightedInterpolatedのサポートを追加しました。これは quantileExactWeighted に基づく補間版です。すでにquantileExactInterpolatedWeightedがあるのに、なぜ新たにquantileExactWeightedInterpolatedが必要なのか疑問に思う人もいるかもしれません。その理由は、新しいほうが従来のものよりも高精度だからです。ちなみに、これは Apache Gluten での Spark 互換性のためのものです。#69619 (李扬). - 関数 arrayElementOrNull のサポートを追加しました。配列の添字が範囲外の場合、または map のキーが見つからない場合は null を返します。#69646 (李扬) 。
- Dynamic 内部の型に対して実行することで、ほとんどの関数で Dynamic type をサポートしました。#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 + file path のハッシュを cache キーとして使用し、オブジェクトストレージのテーブルエンジンおよびデータレイクで読み込んだファイルを cache できるようにしました。 #70135 (Kseniia Sumarokova) 。
- HDFS上のIcebergテーブルの読み取りをサポート。 #70268 (flynn).
- 設定
input_format_binary_read_json_as_string/output_format_binary_write_json_as_stringにより、RowBinary フォーマットで JSON type を binary string として読み書きできるようになりました。#70288 (Pavel Kruglov). - Native format で、JSONカラムを単一の String カラムとしてシリアライズ/デシリアライズできるようになりました。出力時は設定
output_format_native_write_json_as_stringを使用します。入力時は、カラムデータの前にシリアル化バージョン1を使用します。 #70312 (Pavel Kruglov). - 標準的な CTE と
with insertをサポートしました。これまではinsert ... with ...のみサポートしていました。 #70593 (Shichao Jin).