2017-03-10 6 views
0

での作業:ODI - 私は、以下の構造を持つ複数のレコードで構成されてODIと手の込んだするfile.txtなどを持っている構造化file.txtは(レコード父と息子)

  • ヘザー・レコード(父)
    • レコードタイプ1(息子)
    • レコードタイプ2(息子)
    • レコードタイプ1 ... N(SON)
    • レコードタイプ2 ... N(SON)
  • フッターレコード1

  • ヘザー・レコード(father1)

    • レコードタイプ1(息子)
    • レコードタイプ2(息子)
    • レコードタイプ1 ... N (息子)
    • レコードタイプ2 ... n(息子)
  • フッターレコード2

各レコードには、それぞれが独自の構造を持つ一連の共通フィールドが含まれています。このような理由から、各レコードタイプごとにデータベースに複数のテーブルを作成する必要があります。そうすることで、私は記録的な父親と息子の間の関係をいかに保つか分かりません。 ODIでいくつかの機能を使用してそれを行うことは可能ですか? ODIでファイルをインポートして、階層的なシステムのようなものを作り出すことは可能ですか?

答えて

0

行の種類(ヘッダー、タイプ1の息子、タイプ2の息子またはフッター)に応じて、2つの新しい列RECORD_IDROW_TYPEが入力される一時的なテーブルで事前インポートを行うことを検討することができます。

  1. RECORD_IDは、行タイプは、他の場合には、ヘッダとlastVal()ときnextVal()を使用して、配列を介して取り込まれることになります。

  2. 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' 
+0

この解決策が有効です。しかし、テーブルt1(RECORD_ID、ROW_TYPE)を作成したら、ODIを使用してRECORD_ID列をどのように埋めることができますか?同時に両方の列にデータを取り込むことは可能ですか? RECORD_IDフィールドを埋めるために行型の列の値を最初に知る必要があるからです。 –

+0

申し訳ありませんが、私の答えはまったく明らかではありません...私はそれをさらに説明して編集しました。 –

関連する問題