説明
この機能はV4.3.5 BP2バージョンから導入されました。
PARTITIONID疑似列は、各行データが存在するパーティションIDを取得する機能を提供します。PARTITIONID疑似列の値は、tablescan演算子が生データを読み取る際に直接設定され、実際には格納されません。本記事では主にPARTITIONID疑似列の使用方法について説明します。
パーティションのレベルと機能によって異なりますが、主に以下の6つの疑似列について説明します:
列名 |
型 |
意味 |
|---|---|---|
| __ob_partition_id | int/number | partition_id、この行のデータが対応するpartitionのid。 |
| __ob_partition_index | int/number | partition_index、この行のデータが対応するpartitionのインデックスindex。 |
| __ob_partition_name | varchar | partition_name、この行のデータが対応するpartitionの名前name。 |
| __ob_sub_partition_id | int/number | sub_partition_id、この行のデータが対応するsub_partitionのid。 |
| __ob_sub_partition_index | int/number | sub_partition_index、この行のデータが対応するsub_partitionのインデックスindex。 |
| __ob_sub_partition_name | varchar | sub_partition_name、この行のデータが対応するsub_partitionの名前name。 |
基本構文
SELECT操作
Oracleモードでは__ob_プレフィックスが存在するため、クエリには__ob_partition_idを使用する必要があります。
例:
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;やOracleモードのcreate table tt1 as select c1,"__ob_partition_id" as "__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;