2012-01-10 10 views
0

異なる数の列を持つ複数の出力テーブルのデータがあるファイルを取得しています。1つの入力ファイルに複数の出力dbテーブルのレコードがあります

最初の列では、レコードを保存するテーブルを決定します。

head1|abc|123|sklj|sad 
head2|klj|lkj|323|323 
tab1|one|two|three|four|five 
tab2|one|two|three 
tab2|one|two|three 
tab3|one|two|three|four 

上記のように、headはヘッダーを指定します。最初の2行はヘッダーレコードです。

tab1は、5つの列を持つ表1を指定します。したがって、tab1で始まるすべてのレコードをtable1にロードする必要があります。

tab2は、3つの列を持つ表2を指定します。したがって、tab2で始まるすべてのレコードをtable2にロードする必要があります。

tab3は、4つの列を持つ表3を指定します。したがって、tab3で始まるすべてのレコードをtable3にロードする必要があります。

このシナリオを達成するにはどうすればよいですか?

同じシナリオで使用できる例がありますか?

読んでいただきありがとうございます!

+0

用のテーブルと明確なバッチをターゲットに応じて3(またはそれ以上)のファイルにファイルを分割前のバッチ/スクリプトを紹介かもしれませんか?分割して必要なテーブルにマップします。 –

答えて

0

シンプルな春のバッチソリューションは次のようになります。

  • ドメイン抽象親クラスを持つモデル「targetTab」と、各ターゲット表の特定のクラス、例えばTargetTab1は、例えば、リスト/マップの最初のエントリにターゲット表を決定し、特定targetTabオブジェクトを作成し実装FieldSetMapperリスト/マップ
  • (マッピングオプション1)カスタムとして行を読み取りTargetTab
  • リーダーを拡張しますtargetTab1
  • (マッピングオプション2)プロセッサは
  • FieldSetMapper
  • 上記と同じライタータイプのすべてのオブジェクトTargetTab
  • 同じライタチェックが入力を受け付け、
  • を使用しなければならない実際のライター(単純なDAO実装)のかを決定するん

より拡張可能なソリューションは、この春に行うようになったものを各タイプ

+0

マイケルの入力をありがとう!このシナリオでは、PatternMatchingCompositeLineTokenizerは役に立ちませんか?そうでなければ、プリバッチスクリプトのアプローチでファイルを分割することになります。それはより簡単に見えます! – Nik

+0

PatternMatchingCompositeLineTokenizerはあなたのサンプルライン形式では、単純なDelimitedLineTokenizer(区切り文字:|)とPassThroughFieldSetMapperで充分です。もし私が特定のFieldSetMapperを提案したいのであれば、ラインコンテンツに基づいてターゲットをマッピングします)、パターンマッチングの必要はもうありません –

+0

マイケルに感謝します!あなたはファイルの先頭に列名を追加することについて私の質問を見てください!私は出力として7つの列をファイルに送ります。列名も含めたい! – Nik

関連する問題