分析エンジンはデフォルトでテーブルの主キーに基づいてデータを再編成し、列ストレージ形式に変換して列ストレージノードに保存します。このストレージ方式は、主キーに基づくクエリ効率とフィルタリングシナリオにおけるスキャン効率を著しく向上させます。ただし、業務クエリの大部分が他のフィールドによるフィルタリングやソートに依存する場合、主キーに基づくソート機構は性能上の利点を十分に発揮できない可能性があります。このような状況では、列ストレージテーブルのソートキーを調整することで、SQLクエリ効率をさらに最適化できます。典型的な例としてSaaS型業務シナリオでは、テナントIDに基づくフィルタリングクエリが頻繁に行われるため、テナントIDをソートキーとして設定することが有効です。
注意:
分析エンジンのカーネルバージョン2.2410.11.1と3.2503.4.0以降のみ、列ストレージのソートキーをカスタマイズできます。
列ストレージのソートキーをカスタマイズすると同期が一時停止するため、業務負荷の低い時間帯での操作を推奨します。
列ストアソートキーのカスタマイズ機能は「読み取り専用分析エンジン」のみで有効であり、分析クラスターではこの機能をサポートしていません。
列ストレージのソートキーをカスタマイズできないシナリオ
カスタム列ストレージソートキーには主キーフィールドを含める必要があります。分析エンジンは主キーが含まれているかどうかを判断し、含まれていない場合は、暗黙的にソートキーに主キーフィールドを追加します。
float、double、longtext、blob、boolean、json などの列をカスタムソートキーとして使用することはサポートしていません。
主キーなしテーブルにおける列ストレージソートキーのカスタマイズはサポートしていません。
テーブルのカスタム列ストレージソートキー設定後、ソートキー列に対してDDL操作(カラム削除、カラム変更、カラム名変更、カラム定義変更、主キー削除)を実行した場合、当該列ストレージテーブルの同期が中断されます。例えばソートキーが「id、c1、c2」に設定されている状態で、プライマリノードにおいてこれら3列に対して上記操作を実行すると、同期中断の問題が発生します。
カスタム列ストレージソートキーは最大で八つのフィールド列を含めることができます。
中国語の列名や特殊文字を含む列をソートキーとして使用することは現在サポートしていません。
操作手順
createステートメントによるカスタム列ストレージソートキーテーブルの作成
読み書きインスタンスでテーブルを作成する際、テーブル定義ステートメントのCOMMENT注釈情報に「order_key=column1,column2」を追加することで実現できます。他の注釈とはスペースで区切る必要があります。
CREATE TABLE テーブル名 (
...
) COMMENT 'order_key=column_name[,column_name]';
CREATE TABLE part (
p_partkey BIGINT NOT NULL PRIMARY KEY,
p_name VARCHAR(55) NOT NULL,
p_mfgr CHAR(25) NOT NULL,
p_brand CHAR(10) NOT NULL,
p_type VARCHAR(25) NOT NULL,
p_size BIGINT NOT NULL,
p_container CHAR(10) NOT NULL,
p_retailprice DECIMAL(15,2) NOT NULL,
p_comment VARCHAR(23) NOT NULL
) COMMENT '部品の情報テーブル order_key=p_brand,p_container,p_type';
alter文でテーブルのソートキーを変更する
データのインポートが完了したテーブルに対してカスタム列ストレージソートキーを設定する必要がある場合、読み書きインスタンスでALTERステートメントを実行してテーブルにカスタム列ストレージソートキーを追加できます。構文は以下の通りです:
ALTER TABLE table_name COMMENT 'order_key=column_name[,column_name]';
ALTER TABLE part COMMENT '部品情報テーブル order_key=p_brand,p_container,p_type';
ソートキーの変更が成功したことを確認する方法
現在、ソートキーの調整進捗状況を確認する機能はサポートされていませんが、ソートキー調整プロセス中もテーブルデータに対するクエリは可能です。ソートキー調整中はデータ同期が一時停止されます。同期遅延を監視することで、ソートキーの変更が完了したかどうかを確認できます。
不正なソートキー構文
ソートキーに重複する列名が含まれています:
ALTER TABLE part COMMENT '部品の情報テーブル order_key=p_partkey,p_type,p_partkey COLUMNAR=1';
存在しない列をソートキーとして指定します。
ALTER TABLE part COMMENT '部品の情報テーブル order_key=column';
キーワードエラー
ALTER TABLE part COMMENT '部品の情報テーブル ORDERKEY=column';
他のCOMMENT情報とスペースで区別しません:
ALTER TABLE part COMMENT '部品の情報テーブルorder_key=p_partkey';
複数のソートキーキーワードが連続して使用されています:
ALTER TABLE part COMMENT '部品の情報テーブル order_key=p_partkey order_key=p_partkey';
ソートキーキーワードが空です:
ALTER TABLE part COMMENT '部品の情報テーブル order_key= COLUMNAR=1';