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