0

次の構造を持つ複数のレコードで構成される ODI で詳しく説明する file.txt があります。

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

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

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

各レコードには一連の共通フィールドが含まれており、その後にそれぞれ独自の構造があります。このため、レコード タイプごとにいくつかのテーブルをデータベースに作成し、各レコード間の関係を格納するファクト テーブルを作成する必要があります。そうなると、記録的な父と息子の関係を維持する方法がわかりません。それを行うためにODIの関数を使用することは可能ですか? ODIでファイルをインポートして、一種の階層システムを構築することはできますか?

4

1 に答える 1

0

行の種類 (ヘッダー、タイプ 1 ソン、タイプ 2 ソン、またはフッター) に応じて、2 つの新しい列RECORD_IDROW_TYPE.

  1. RECORD_IDnextVal()行タイプがヘッダーの場合とそれ以外の場合を使用して、シーケンスを介して入力lastVal()されます。

  2. ROW_TYPE行タイプが取り込まれます。

このようにして、後で の値に基づいてテーブルを作成ROW_TYPEし、列の父と息子の関係を維持することができRECORD_IDます。

編集(詳細説明)

ファイルの行が次の構造を持っているとしましょう

Header: Field1;Field2;Field3
Type1: Field1;Field2
Type2: Field1;Field2;Field3;Field4
Footer: Field1;Field2

次に、ターゲット テーブルには、対応するファイル行の各フィールドの列と、ID の列が必要になります。彼らはこのように見えるでしょう

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

次に、一時テーブルには6つの列があり(より多くのテーブルから5つ、プラス1つType)、次のようになります

Temp
Type | ID | Temp col1 | Temp col2 | Temp col3 | Temp col4

この構造を使用すると、テーブル内のファイルのすべての行をロードし、Type分析している行に応じて異なる値を列に入れ、列内のシーケンス ( または ) を適切に呼び出す最初nextVal()lastVal()インターフェイスを持つことができます。 ID.

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

次に、この一時テーブルからそれぞれ 1 つのターゲット テーブルにデータを入力し、[タイプ] 列でフィルター処理する複数のインターフェイスを作成できます。

Header interface

ID <- ID
Header col1 <- Temp col1
Header col2 <- Temp col2
Header col3 <- Temp col3
where Type = 'Header'
于 2017-03-10T16:38:02.037 に答える