説明
この機能は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;