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