行の種類(ヘッダー、タイプ1の息子、タイプ2の息子またはフッター)に応じて、2つの新しい列RECORD_ID
とROW_TYPE
が入力される一時的なテーブルで事前インポートを行うことを検討することができます。
RECORD_ID
は、行タイプは、他の場合には、ヘッダとlastVal()
ときnextVal()
を使用して、配列を介して取り込まれることになります。
ROW_TYPE
は、行タイプが入力されます。このようにして
あなたは後でRECORD_ID
欄の父と息子の関係を維持し、ROW_TYPE
の値に基づいて、テーブルを取り込むことができます。
編集(さらに、について説明)
、のは、あなたのファイル行は
Header: Field1;Field2;Field3
Type1: Field1;Field2
Type2: Field1;Field2;Field3;Field4
Footer: Field1;Field2
は、その後、あなたのターゲット表は、対応するファイルの行の各フィールドの列を必要とする次のような構造を持っていると言うプラス1つはIDのためのものです。そして、彼らはあなたの一時テーブルが6列(複数を有するテーブルから5、プラスType
に1つ)を持っているだろうし、このような構成とすることにより、この
Temp
Type | ID | Temp col1 | Temp col2 | Temp col3 | Temp col4
ようになり、この
Header
ID | Header col1 | Header col2 | Header col3
Type1
ID | Type1 col1 | Type1 col2
Type2
ID | Type2 col1 | Type2 col2 | Type2 col3 | Type2 col4
Footer
ID | Footer col1 | Footer col2
ようになります。最初のインターフェイスでは、テーブル内のファイルのすべての行をロードし、解析する行に応じてType
列に異なる値を設定し、ID
のシーケンス(nextVal()
またはlastVal()
)を適切に呼び出すことができますカラム。
Temp interface
Type <- rowType
ID <- case when rowType = Header then sequence.nextVal() else sequence.lastVal() end
Temp col1 <- File field1
Temp col2 <- File field2
Temp col3 <- File field3
Temp col4 <- File field4
その後、この一時テーブルから[Type]列のフィルタリング、一つのターゲット表それぞれを移入う複数のインタフェースを持つことができます。
Header interface
ID <- ID
Header col1 <- Temp col1
Header col2 <- Temp col2
Header col3 <- Temp col3
where Type = 'Header'
この解決策が有効です。しかし、テーブルt1(RECORD_ID、ROW_TYPE)を作成したら、ODIを使用してRECORD_ID列をどのように埋めることができますか?同時に両方の列にデータを取り込むことは可能ですか? RECORD_IDフィールドを埋めるために行型の列の値を最初に知る必要があるからです。 –
申し訳ありませんが、私の答えはまったく明らかではありません...私はそれをさらに説明して編集しました。 –