ネストされた 移動 テーブル
Qlik Talend Data Integration は、ネストされたテーブルまたは定義された型の列を含む Oracle テーブルの 移動 をサポートします。この機能を有効にするには、コネクタ 設定で [ネストされたテーブルをサポート] オプションを選択します。
データ タスクは、Oracle のネストされたテーブルのターゲット テーブルを、一意性制約のない通常のテーブルとして作成します。意味のあるデータを取得するには、親テーブルと子テーブルを結合する必要性が高いため、ターゲットの子テーブルの NESTED_TABLE_ID 列に一意でないインデックスを手動で作成することが重要です。NESTED_TABLE_ID 列は、子テーブル名に対応する親列と共に JOIN ON 句で使用できます。また、このようなインデックスを作成すると、ターゲットの子テーブルのデータがデータ タスクによって更新/削除された場合のパフォーマンスが向上します。
フル ロードの完了後にタスクを停止するように構成することを推奨します。フル ロードが完了したら、ターゲット上のすべての 移動済み 子テーブルに対して一意でないインデックスを手動で作成し、タスクを再開します。
キャプチャされ、ネストされたテーブルが既存の親テーブル (キャプチャされたかどうかに関係なく) に追加された場合、データ タスクはそれを正しく処理しますが、対応するターゲット テーブルの一意でないインデックスは作成されません。この場合、ターゲットの子テーブルが極端に大きくなると、パフォーマンスに影響を及ぼす可能性があるので注意してください。このような場合は、タスクを停止し、インデックスを作成してからタスクを再開することを推奨します。ただし、タスクを再開する前に、移動済み テーブルをフラット化するビューを作成することをお勧めします。これらのビューには、以下の例で説明するように、特定のフラット化のニーズに対応する JOIN ステートメントが含まれている必要があります。
前提条件
移動済みされた、すべてのネストされたテーブルの親テーブルを移動していることを確認してください。親テーブル (ネストされたテーブル列を含むテーブル) と子 (つまり、ネストされた) テーブルの両方が Qlik Talend Data Integration で選択できるようになります。
サポート対象のネストされたテーブルの種類
次のネストされたテーブルの種類がサポートされています。
- データ型
- ユーザー定義オブジェクト
制限事項
- 1 レベルのネストのみがサポートされています。
- Qlik Talend Data Integration は、親テーブルと子テーブルの両方が 移動 用に選択されていることを確認しません。つまり、子テーブルを持たない親テーブルを選択することも、その逆も可能です。
ネストされたテーブルを移動済みする方法
親テーブルとネストされたテーブルは、次のようにターゲットに移動済みされます。
-
親テーブルはソースと同様にターゲット上に作成され、ネストされた各列は RAW(16) として定義されます。各親テーブル行では、この列には、NESTED_TABLE_ID 列内の対応する子テーブルのネストされた行と同じ値が含まれます。
- 子テーブルはソースと同じように作成されますが、前述されたように NESTED_TABLE_ID 列が追加されます。
JOIN ステートメントの例
Oracle ソースに次の定義が存在すると仮定します。
- CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
- CREATE TABLE my_parent_table (id NUMBER PRIMARY KEY, col1 my_tab_t) NESTED TABLE col1 STORE AS col1_tab;
この場合、データ タスクは通常、次のように 2 つのターゲット テーブルを作成します。
- CREATE TABLE my_parent_table (id NUMBER PRIMARY KEY, col1 RAW(16));
- CREATE TABLE col1_tab(nested_table_id RAW(16), column_value VARCHAR2(30));
2 つのターゲット テーブルをフラット化するための JOIN ステートメントは、次のように定義できます。
- Select id, column_value from my_parent_table LEFT OUTER JOIN col1_tab child ON child.nested_table_id = parent.col1;