このトピックでは、ApsaraDB for ClickHouse Enterprise Edition V24.12 でリリースされた機能について説明します。
新機能
SYSTEM LOAD PRIMARY KEYコマンドを介して、すべてのパーティション (指定されたテーブルまたはすべてのテーブル) のプライマリインデックスを読み込むサポートを追加します。これは、ベンチマークに役立ち、クエリ実行中の余分な待機時間を防ぎます。現在のユーザーまたはロールが特定の権限を持っているか、および対応するテーブルまたは列がメモリに存在するかどうかを確認するための
CHECK GRANTクエリを追加します。ワークロードとリソース管理のための SQL 構文の説明を追加します。
スキーマ進化 (列の順序/名前の変更および単純な型の拡張) を伴う Iceberg テーブルの読み取りサポートを実装します。
各認証方式に独立した有効期限を設定するサポートを追加し、ユーザーエンティティから関連設定を削除します。
クエリ開始ノードからクラスター内の他のノードに外部ユーザーロールをプッシュするサポートを追加します。これは、LDAP などの外部認証サービスに開始ノードのみがアクセスできるシナリオに適用されます。
String から JSON へのデータ型の変更をサポートします。JSON および Dynamic 型のシリアル化を V2 にアップグレードしました。
merge_tree_use_v1_object_and_dynamic_serialization設定を使用して V1 に戻すことができます。DateTime64 値を Fixes-second 精度の Int64 値に変換する
toUnixTimestamp64Second関数を追加します。この関数は、1970 年 1 月 1 日より前の日付の負の値をサポートします。enforce_index_structure_match_on_partition_manipulation設定を追加します。この設定により、ソーステーブルのプロジェクションとセカンダリインデックスがターゲットテーブルのサブセットである場合に ATTACH 操作が可能になります。Spark テキスト出力フォーマットのサポートを追加します。この機能はデフォルトで無効になっています。
S3 エンドポイントに access_header 認証ヘッダータイプを追加します。このヘッダーは最も優先度が低く、他の構成によって上書きされる可能性があります。
階層化された設定機能を実装します。
ORDER BY WITH FILLでの staleness 句をサポートします。JSON 文字列のシリアル化と逆シリアル化を使用して、Map、Tuple、および Object から JSON への単純な CAST 変換を実装します。
anyおよびanyLast集計関数に、anyLastRespectNullsなどの camelCase エイリアスを追加します。date_time_utc構成パラメーターを追加します。このパラメーターにより、JSON ログで RFC 3339 または ISO 8601 フォーマットの UTC を使用できます。query_plan_join_swap_table設定を追加します。この設定は、結合の内部テーブル (ビルドテーブル) を指定します。auto モードでは、行数が少ないテーブルが自動的に選択されます。パーティションの粒度が一定の場合のインデックス粒度値のメモリ使用量を最適化します。このメモリ最適化を確実にするために、新しい
use_const_adaptive_granularity設定を追加します。すべての実験的またはベータ機能を無効にするためのグローバルスイッチ
allowed_feature_tierを追加します。Iceberg、Delta Lake、および Hudi のための Cluster テーブル関数を追加します。
ALTER USER、ALTER ROLE、および ALTER PROFILE 文で `SETTING` または `PROFILE` を変更するための構文を追加します。
適合率-再現率曲線の下の面積を計算するための
arrayPrAUC関数を追加します。use_primary_key_cache設定を使用して有効になる MergeTree テーブルのプライマリインデックスキャッシュを実装します。このキャッシュは、マークキャッシュと同様のオンデマンド読み込みと、prewarm_primary_key_cache設定を使用して有効になるプリフェッチをサポートします。非減少ソート済み配列での最適化された検索のための
indexOfAssumeSorted配列関数を追加します。groupConcat集計関数は、オプションの 2 番目の引数としてデリミタをサポートします。カスタム HTTP 応答ヘッダーをサポートするための
http_response_headers設定を追加します。Int64 UNIX タイムスタンプを DateTime64 値に変換するための
fromUnixTimestamp64Second関数を追加します。
パフォーマンスの最適化
short_circuit_function_evaluation_for_nulls設定を追加します。Nullable 列の NULL 値の割合がしきい値を超えると、関数は非 NULL 行でのみ実行されます。Object Storage Service ディスクでの
--recursive削除操作のメモリ使用量を最適化します。join_algorithm='parallel_hash'の場合、並列処理のために入力ブロック列をコピーすることを回避します。abs、bitCount、比較関数、論理関数など、より多くの式で JIT コンパイルを有効にします。
デフォルトの
join_algorithmの動作は、parallel_hash を優先するようになりました。非交和パーティションの Replacing マージアルゴリズムを最適化します。
クリティカルセクションを減らすことで
system.query_metric_logの収集パフォーマンスを向上させます。optimize_extract_common_expressions設定を追加します。この設定は、WHERE または ON 条件から共通の式を抽出し、結合中のハッシュテーブルの数を減らすことをサポートします。LowCardinality(String) 列でのインデックスの使用をサポートします。
並列レプリカクエリでは、ワーカーノードはインデックス分析をスキップし、クライアントノードが処理するようになりました。
Compact Parts での単一列サブカラムの読み取りを最適化します。
LowCardinality(String) 列のソートパフォーマンスを最適化します。
単純なデータ型の argMin および argMax 関数のパフォーマンスを最適化します。
メモリトラッカーの共有ロック競合を最適化します。
use_async_executor_for_materialized_views設定を追加します。この設定は、マテリアライズドビューの非同期およびマルチスレッド実行を有効にし、INSERT パフォーマンスを向上させますが、メモリ消費量が増加します。集約と結合のための事前割り当てメモリのデフォルトのしきい値を 10^12 に増加させます。
AggregateFunction 状態 (AggregateFunction データ型および分散クエリ内) の逆シリアル化パフォーマンスを最適化し、RowBinary フォーマットの解析をわずかに改善します。
互換性に影響する変更
greatestおよびleast関数は NULL 入力値を無視するようになりましたが、以前はいずれかのパラメーターが NULL の場合に NULL を返していました。たとえば、SELECT greatest(1, 2, NULL)は 2 を返すようになりました。この動作は PostgreSQL と一致しています。Variant および Dynamic 型は、予期しない結果を引き起こす可能性があるため、ORDER BY、GROUP BY、PARTITION BY、および PRIMARY KEY 句でデフォルトで許可されなくなりました。
誤って追加された
generate_seriesおよびgenerateSeriesシステムテーブルを削除します。エスケープされていない特殊文字によって引き起こされる JSON サブカラムファイルの「file does not exist」エラーを修正しました。
Kafka、NATS、および RabbitMQ テーブルエンジンは、SOURCES レベルの個別の権限項目に分類されるようになりました。これらのエンジンの CREATE 権限は、デフォルト以外のデータベースユーザーに付与する必要があります。
サブクエリを含むミューテーションクエリは、実行前に完全にチェックされるようになりました。これにより、無効なクエリやミューテーションの偶発的な実行が防止されます。
ファイルシステムキャッシュ設定
skip_download_if_exceeds_query_cacheをfilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limitに名前変更します。混乱を避けるため、min および max 関数での Dynamic および Variant 型の使用を許可しません。
deltaSumTimestamp 関数での Enum、UInt128、および UInt256 引数のサポートを削除します。また、2 番目の引数である timestamp の Int8、UInt8、Int16、および UInt16 のサポートも削除します。
ClickHouse が辞書データソースとして使用される場合に、辞書ソースクエリの検証機能を追加します。
改善点
定数配列を含む高階関数は、定数値を返すようになりました。
仮想行を生成することで順序付き読み取りを最適化します。これは、特にマルチパーティションシナリオで役立ちます。
クエリプランのステップ名とパイプラインプロセッサ名に一意の ID サフィックスが含まれるようになりました。これにより、パフォーマンス分析ツールとの関連付けが容易になります。
書き込みバッファーは明示的にキャンセルまたは終了されるようになりました。例外が発生した場合、HTTP プロトコルを介してクライアントに中断が通知されます。
allow_experimental_join_condition 設定を削除します。非等価結合条件はデフォルトで許可されるようになりました。
parallel_replicas_local_plan をデフォルトで有効にします。これにより、クエリ開始ノードに完全なローカルプランが構築され、パフォーマンスが向上します。
http_handlers 設定は、dynamic_query_handler と predefined_query_handler のユーザーとパスワードの設定をサポートするようになりました。
S3Queue ストレージは、特定の設定を変更するための ALTER TABLE MODIFY/RESET SETTING をサポートするようになりました。
フォルダをリストする際に Object Storage Service API は呼び出されなくなりました。代わりに、ファイル名のリストがメモリに保存されます。これにより、初期ロード時間と引き換えにメモリ使用量が増加します。
prewarm_mark_cache設定を追加して、パーティションの挿入、マージ、またはフェッチ時にマークキャッシュのプリフェッチをサポートします。ネイティブの Parquet リーダーは、ブール値をサポートするようになりました。
「Malformed message」など、再試行のための S3 エラータイプをさらに追加します。
一部の S3 関連ログのログレベルを下げます。
スペースを含むパスを持つ HDFS ファイルへの書き込みをサポートします。
並列レプリカクエリでの RIGHT および FULL 結合を修正しました。右側のテーブルは分散方式で読み取ることができるようになりました。
レプリケートされたテーブル、辞書、およびビューの数を制限する設定を追加します。
メモリ使用量に基づいて GROUP BY および ORDER BY の外部ソートを自動的に有効にします。これは max_bytes_ratio_before_external_group_by および max_bytes_ratio_before_external_sort によって制御されます。
translate 関数は、
from引数がto引数よりも長い場合に文字の削除をサポートするようになりました。DateTime64 型を返す parseDateTime64 シリーズの関数を追加します。
MergeTree ファミリーエンジンの index_granularity 配列のメモリフットプリントを削減します。
コマンドラインアプリケーションは、複数ステートメントクエリの構文ハイライトをサポートするようになりました。
コマンドラインアプリケーションは、エラー時にゼロ以外の終了コードを返すようになりました。
クエリが
\Gで終わるときにアクティブになる Vertical フォーマットに、数値の桁区切り記号など、Pretty フォーマットの機能が含まれるようになりました。filesystem_cache_prefer_bigger_buffer_size 設定を使用して、ファイルシステムキャッシュメモリバッファーの増加を無効にすることができます。
ファイルシステムキャッシュでのバックグラウンドダウンロードのファイルセグメントサイズを制御するための background_download_max_file_segment_size 設定を追加します。
HTTP 圧縮をデフォルトで有効にします (enable_http_compression=1)。
Object から JSON へのデータ型の変更をサポートします。
JSON 型の解析を改善しました。パスが複数の型の値に対応する場合、システムは最適な一致順で試行するようになりました。
system.asynchronous_metrics からの読み取りは、同時更新が完了するのを待たなくなりました。
polling_max_timeout_ms を 10 分に、polling_backoff_ms を 30 秒に設定します。
SELECT - FROM t LIMIT 1のような単純なクエリは、パーティションインデックスをロードしなくなりました。古い互換性設定の下で allow_reorder_prewhere_conditions をデフォルトで有効にします。
直接辞書クエリには SELECT または dictGet 権限のみが必要になりました。これにより、ACL バイパスの問題が修正されます。
高度なダッシュボードページに system.dashboards テーブルのセレクターを追加します。
prefer_localhost_replica 設定は、分散 INSERT...SELECT 操作中に尊重されるようになりました。
JSON、Dynamic、および Variant 型を実験的機能からベータ版にアップグレードします。
マテリアライズドビュークエリで UNION を使用できるようになりました。最初のテーブルのみが挿入をトリガーします。
単一のパーティションキー値を持つバッチ挿入の MergeTree 書き込みパフォーマンスを最適化します。
高いメモリ使用量の問題を検出するのに役立つように、MergeTreeIndexGranularityInternalArraysTotalSize メトリックを system.metrics に追加します。
Format Null クエリで Null のすべてのスペルバリエーションを認識します。
Enum 型のセットで不明な値を許可します。
total_bytes_with_inactive 列を system.tables に追加して、非アクティブなパーティションのサイズをカウントします。
MergeTreeSettings を system.settings_changes に追加します。
Enum 型で like などの文字列検索操作をサポートします。
JSON 型で notEmpty 関数をサポートします。
GCS S3 からの AuthenticationRequired エラーの解析をサポートします。
ifNull および coalesce 関数で Dynamic 型の使用をサポートします。
JoinBuildTableRowCount、JoinProbeTableRowCount、および JoinResultRowCount パフォーマンスイベントを追加します。
toFloat64 や toUInt32 などの関数で Dynamic 型の使用をサポートします。
バグ修正
ATTACH PART クエリで重複したパーティションが `attaching_` 状態のままになる問題を修正しました。
IN 関数で DateTime64 値の精度が失われる問題を修正しました。
ORDER BY ... WITH FILL 内の IGNORE NULLS および RESPECT NULLS 関数の論理エラーを修正しました。
Native フォーマットでの非同期挿入がメモリ制限に達したときに発生する論理エラーを修正しました。
EPHEMERAL 列の CREATE TABLE でのコメントに関する問題を修正しました。
JSONExtract と LowCardinality(Nullable) の間の型エラーを修正しました。
テーブル名が長すぎる場合に発生する動作の問題を修正しました。
URL エンジンは、カスタムユーザーヘッダーを使用して Content-Type ヘッダーを上書きすることをサポートします。
StorageS3Queue での「
Cannot create persistent node at /processed」エラーを修正しました。軽量削除のプロジェクションを再構築する際に _row_exists 列が考慮されない問題を修正しました。
競合状態が system.query_metric_log で不正な値を引き起こす問題を修正しました。
quantileExactWeightedInterpolated 関数の名前の不一致を修正しました。
Dynamic 型の比較関数での bad_weak_ptr 例外を修正しました。
ゼロコピーレプリケーション中にブロブがノードでまだ使用されている場合に削除されない問題を修正しました。
HTTP および非同期挿入で Native フォーマット設定が無視される問題を修正しました。
use_query_cache=1 のときにシステムテーブルリテラルを含むクエリが拒否される問題を修正しました。
キャッシュで構成されていないディスクストレージでのメモリ増加の問題を修正しました。
Dynamic 列内の LowCardinality 辞書を逆シリアル化する際の「
Cannot read all data」エラーを修正しました。クライアントでの並列出力フォーマットの不完全なクリーンアップに関する問題を修正しました。
名前付きコレクションでサービスが開始できなくなる可能性のあるエスケープ文字の欠落問題を修正しました。
ネイティブプロトコルでの空ブロックの非同期挿入に関する問題を修正しました。
不正なワイルドカード文字の権限付与で発生した AST フォーマットの不整合を修正しました。
Variant 列を含む Chunks の不正な行数を修正しました。
MongoDB テーブル関数が NULL などの無効な引数を受け取ったときに発生するクラッシュを修正しました。
optimize_rewrite_array_exists_to_has によって引き起こされるクラッシュを修正しました。
plain_rewritable ディスクでディレクトリの作成に失敗したときに発生するトランザクションのロールバックエラーを修正しました。
複数のパーティションに書き込む際の max_insert_delayed_streams_for_parallel_write によって引き起こされる高いメモリ使用量の問題を修正しました。
古いアナライザで arrayJoin が WHERE 条件に現れたときに発生する「
Function argument must be a constant」エラーを修正しました。古いアナライザを使用しているときにゼロ列の SortCursor でのクラッシュを修正しました。
初期化されていない ORC データによって引き起こされる date32 の範囲外の問題を修正しました。
ワイドパートでの Dynamic および JSON 型のサイズ計算を修正しました。
マテリアライズドビュー内のクエリで CTE を使用する IN 句に関するアナライザの問題を修正しました。
bitShift 関数が範囲外の場合に例外をスローする代わりに 0 またはデフォルト文字を返す問題を修正しました。
特定のエンジンでマテリアライズドビューを使用するときのサーバーのクラッシュを修正しました。
定数配列エイリアスを持つネストされた構造体での ARRAY JOIN でのヌルポインタ逆参照を修正しました。
空のタプルを変更するときに発生する LOGICAL_ERROR を修正しました。
NOT IN オペレーターの場合にパーティション列に対する述語で定数セットを変換する際の問題を修正しました。
LowCardinality(Nullable) から Dynamic への CAST エラーを修正しました。
DateTime64 型のプライマリキーを持つ WHERE 条件での toDayOfWeek の例外を修正しました。
スパース列を解析した後のデフォルト値のパディングに関する問題を修正しました。
分散テーブルで入力が ALIAS の場合の GROUPING 関数のエラーを修正しました。
WITH TIES 句が行数を十分に返さない可能性がある問題を修正しました。
arrayWithConstant が配列サイズの制限を誤って判断することによって引き起こされる TOO_LARGE_ARRAY_SIZE 例外を修正しました。
clickhouse-client のプログレスインジケーターとプログレステーブルの間のデータ競合を修正しました。この問題は FROM INFILE を使用するときに表示されます。
Pretty JSON フォーマットでの Dynamic 値のシリアル化の問題を修正しました。
s3 および s3Cluster 関数が、
pattern/*などの glob モードでpattern/などの空のオブジェクトに遭遇したときに、不完全な結果を返したり例外をスローしたりする問題を修正しました。clickhouse-client の構文ハイライトでのクラッシュを修正しました。
最初の引数が定数の場合に
ORDER BYのバイナリ単調関数に対する「Illegal type」エラーを修正しました。EXPLAIN AST は SELECT サブクエリのみをサポートします。他の種類のクエリは論理エラーにつながります。
format_alter_commands_with_parentheses が有効な場合の MOVE PARTITION のフォーマットの問題を修正しました。
File、S3、URL、HDFS、および Azure エンジンの CREATE クエリに推論されたフォーマット名を追加し、サービス再起動中のデータファイル削除によって引き起こされるエラーを防止します。
min_age_to_force_merge_on_partition_only が、すでに単一のパートにマージされたパーティションに対して繰り返し操作する問題を修正しました。
スパース列を処理するときの SimpleSquashingChunksTransform でのまれなクラッシュを修正しました。
GraceHashJoin でのデータ競合が結合出力で行が欠落する原因となる問題を修正しました。
enable_block_number_column が有効な場合の ALTER DELETE クエリの問題を修正しました。
ColumnDynamic::dumpStructure()が、ConcurrentHashJoin の構築中などに同時に呼び出された場合のデータ競合を修正しました。ORDER BY …… WITH FILLでの重複列に関する LOGICAL_ERROR の問題を修正しました。optimize_functions_to_subcolumns を適用した後の型不一致の問題を修正しました。
BACKUP DATABASE db EXCEPT TABLES db.table クエリの解析の失敗を修正しました。
空の Variant の作成を許可しません。
system.merges の result_part_path の無効なフォーマットの問題を修正しました。
単一要素の glob の解析の問題を修正しました。
ARRAY JOIN を含む分散クエリのセカンダリサーバーでのクエリ生成の問題を修正しました。
DateTime64 in DateTime64 が何も返さない場合のエラーを修正しました。
tracked_files_limit がファイルの出現率より小さい場合の S3Queue の順序なしモードでの「
No such key」エラーを修正しました。大きなマークキャッシュを削除するときに発生する高いコンテキストミューテックスロックの競合を修正しました。
プライマリキーキャッシュが LowCardinality 列の辞書サイズを過小評価する問題を修正しました。
ローカルユーザーが存在しない場合に RemoteQueryExecutor でスローされる例外を修正しました。
enable_block_number_column が有効な場合のミューテーション操作の問題を修正しました。
バックアップに空のファイルがある場合のプレーン書き込み可能ディスクのバックアップと復元の問題を修正しました。
DistributedAsyncInsertDirectoryQueue での挿入キャンセルの問題を修正しました。
不正なデータをスパース列に解析するときに発生するクラッシュを修正しました。これは、enable_parsing_to_custom_serialization が有効な場合に発生する可能性があります。
バックアップと復元中の潜在的なクラッシュを修正しました。
ON 句に複雑な不等式条件が含まれている場合の parallel_hash JOIN の潜在的な問題を修正しました。
逆シリアル化の中断を避けるために、JSON 解析中にデフォルトのフォーマット設定を使用します。
サポートされていないストレージエンジンとのトランザクションに関連するクラッシュを修正しました。
Tuple 解析中の重複した JSON キーのチェックの欠落を修正しました。これは以前、「Invalid number of rows in Chunk」という論理エラーにつながる可能性がありました。