説明
この機能はV4.3.5 BP2バージョンから導入されました。
PARTITIONID疑似列は、各行データが存在するパーティションIDを取得する機能を提供します。PARTITIONID疑似列の値は、tablescan演算子が生データを読み取る際に直接設定され、実際には格納されません。本記事では主にPARTITIONID疑似列の使用方法について説明します。
パーティションのレベルと機能によって異なりますが、主に以下の6つの疑似列を紹介します:
列名 |
型 |
意味 |
|---|---|---|
| __ob_partition_id | int | partition_id、この行のデータが対応するpartitionのid。 |
| __ob_partition_index | int | partition_index、この行のデータが対応するpartitionのインデックスindex。 |
| __ob_partition_name | varchar | partition_name、この行のデータが対応するpartitionの名前name。 |
| __ob_sub_partition_id | int | sub_partition_id、この行のデータが対応するsub_partitionのid。 |
| __ob_sub_partition_index | int | sub_partition_index、この行のデータが対応するsub_partitionのインデックスindex。 |
| __ob_sub_partition_name | varchar | sub_partition_name、この行のデータが対応するsub_partitionの名前name。 |
基本構文
SELECT操作
例:
select c1,__ob_partition_id from t1;
UPDATE操作
partitionid 仮列の変更は許可されませんが、where 句には含めることができます。
例:
UPDATE t1 SET c1=c1 WHERE __ob_partition_index=2;
INSERT操作
INSERT のcolumn listには含めることができません。
総計の制限
列名と仮列フィールドの競合制限
- クエリステートメント:
partitionidをサポートするバージョンにアップグレードする前に、既存のテーブルに上記の仮列名が存在する場合、クエリステートメントではその列に対して実際のデータが返されます。存在しない場合にのみ、対応する仮列値が返されます。 - テーブル作成ステートメント:テーブル作成時に、上記の仮列名と競合する列名を含むテーブルの作成は許可されません。そうした場合、
OB_ERR_COLUMN_DUPLICATEエラーメッセージが返されます。- MySQLモードの
create table tt1 as select c1,__ob_partition_id from t1;も含まれます。
- MySQLモードの
- Drop column:テーブルから列を削除する際、テーブルに既に上記の仮列名が存在する場合は正常に削除できます。存在しない場合は
OB_ERR_BAD_FIELD_ERRORエラーが発生します。 - Add column:競合する
partitionid仮列を直接addすることは許可されません。そうした場合、OB_ERR_COLUMN_DUPLICATEエラーメッセージが返されます。 - Rename column:既存の、上記の仮列名と競合する列名は、他の名前に変更することのみが許可されます。そうでない場合は
OB_ERR_COLUMN_DUPLICATEエラーが発生します。
テーブルタイプの制限
ユーザーテーブルと、定義時にテーブルの仮列名を含むユーザービューのみが、これらの仮列のクエリをサポートします。
機能のオン/オフ
PARTITIONID 仮列は、6つの列名 __ob_partition_id,__ob_partition_index、__ob_partition_name、__ob_sub_partition_id、__ob_sub_partition_index、__ob_sub_partition_name を占有します。これにより、ユーザーはこれらの列名を含むテーブルを作成できなくなります。
この問題に対処するには、パラメータ _enable_pseudo_partition_id を設定することで PARTITIONID 仮列機能を無効にできます。業務上、上記の列名を使用してテーブルを作成する必要がある場合は、この機能を無効にすることを選択できます。
例:
注意
システムテナントで以下のコマンドを実行して partitionid 仮列機能を無効にした後、現在のテナントで ALTER SYSTEM flush plan cache; を実行して、手動でプランキャッシュをクリアする必要があります。
ALTER SYSTEM SET _enable_pseudo_partition_id = false;