データ移動の例¶
以下の基本ビューがあるとします。
JDBC データソース
ds1から作成したview_ds1JDBC データソース
ds2から作成したview_ds2JDBC データソース
ds3から作成したview_ds3
さらに、以下の派生ビューがあるとします。
CREATE VIEW dataMoveView AS
SELECT view_ds1.id
FROM view_ds1
INNER JOIN view_ds2
INNER JOIN view_ds3
ON (view_ds1.id = view_ds2.id)
CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds1
view_ds3: JDBC ds1 );
CREATE VIEW p_dataMoveView AS
SELECT *
FROM dataMoveView
CONTEXT( DATAMOVEMENTPLAN = view_ds2 : JDBC ds3 );
CREATE VIEW p_dataMoveView_j_view_ds2 AS
SELECT *
FROM p_dataMoveView a
INNER JOIN view_ds2 b ON (a.id = b.id);
dataMoveViewには、実行時にview_ds2ビューとview_ds3ビューのデータを、ds1データソースに作成したテーブルに挿入する動作が設定されています。dataMoveViewビューに設定した、view_ds2ビューのデータ移動プランは、p_dataMoveViewによって無効にされます。view_ds2ビューのデータは、ds1ではなく、ds3データソースに移動します。
注釈
これらの例では、わかりやすくするために、VQL を使用してデータ移動を定義していますが、ビューの実際のデータ移動は、ビューの [Options] ダイアログにある [Execution plan] タブで定義することが推奨されます。
クエリ 1)
SELECT *
FROM dataMoveView
view_ds2 と view_ds3 が ds1 データソースに移動します。
クエリ 2)
SELECT *
FROM p_dataMoveView
view_ds2 が ds3 に、 view_ds3 が ds1 に、それぞれ移動します。
クエリ 3)
SELECT *
FROM p_dataMoveView
CONTEXT( DATAMOVEMENTPLAN = view_ds2: OFF )
view_ds3 が ds1 に移動します。このビューでは view_ds2 を ds3 に移動することを定義していますが、この移動はクエリの DATAMOVEMENTPLAN 句で OFF オプションによって無効になっています。
クエリ 4)
SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds1 view_ds2: JDBC ds2 )
1 番目の分岐の view_ds2 は ds1 に、2 番目の分岐の view_ds2 は ds2 に、それぞれ移動します。 view_ds3 は ds1 に移動します。これらのデータの移動先は、ビューの定義で設定したデータソースではなく、 DATAMOVEMENTPLAN 句で設定したデータソースである点に注意してください。
クエリ 5)
SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: OFF view_ds2: JDBC ds2 )
2 番目の分岐の view_ds2 は ds2 に、 view_ds3 は ds1 に、それぞれ移動します。1 番目の分岐の view_ds2 は移動しません。
クエリ 6)
SELECT *
FROM p_dataMoveView_j_view_ds2
CONTEXT( DATAMOVEMENTPLAN = view_ds2: JDBC ds2 )
データ移動の定義があいまいであることから、このクエリは失敗します。結合の両方の分岐に view_ds2 が存在しているので、 view_ds2 ビューのデータ移動を 2 回定義する必要があります。
