2016-12-08 19 views
0

データの各行が2つのテーブル(TAB1、TAB2)にロードされるCSVファイルをロードしようとしています。 CSVファイルの各行のデータに対して、1つの行がTAB1にロードされ、複数の行が第2のテーブルにロードされます。 CSVファイル内のデータ行のCSV入力ファイルから複数のテーブルをロードするSQLローダー

例:

Data_col1,Data_col2,Data_col3,Data_col4 , Key_name1, Key_value1 , Key_name2, Key_value2 ,Key_name3, Key_value3 ,................. 

私は以下のような表に、このデータを期待しています:

 Tab1 
    ==== 
    Data_col1 
    Data_col2 
    Data_col3 
    Data_col4 

    Tab2 (Load data in TAB2 until the end of the data row1)      
     record 1 ==> Key_name1, Key_value1 
     record 2 ==> Key_name2, Key_value2 
     record 3 ==> Key_name3, Key_value3 

私はいくつかの研究をしましたが、この問題を解決することができませんでした。 この問題について私を助けてください。

+0

例のように、常に4つのdata_colsと不明確なキー名と値のペアが連続していますか?投稿を編集し、実際のデータ行とサンプル表をいくつか末尾に追加すると、作業しているものを明確にするために行が処理された後に役立ちます。 –

答えて

0

最初に単一のインポートテーブルにロードしてから、スクリプトを使用してデータを処理して2つのテーブルにロードする方法はありますか?

0

通常、ロード前にレコードを分割するためにファイルを前処理するか、@MercyfulGPFが示唆するように、ステージングテーブルにロードしてそのテーブルに行を処理するプロシージャを実行します私の好みの方法にすることができます。これにより、プロセスをより詳細に制御できるようになり、さまざまなキー名/値のペアを扱うことができます)。

しかし、固定数の要素があり、メンテナンスの悪夢を気にしないでください。最初のフィールドが位置(1)から始まる複数の "INTO TABLE"セクションでコントロールファイルを構築します。これにより、sqlldrは各INTOテーブルセクションの行の先頭に内部ポインターを戻し、それぞれに新しい行を挿入します。各セクションでは、FILLERとしてスキップするためにFILLERとして既に挿入されているフィールドを定義します(名前がテーブルの列と同じでないことを確認してください)。あなたの例が示唆しているように、key_name/valueの組み合わせが可変であれば動作しません。だから、これは部分的な解決策に過ぎないかもしれませんが、可能なこと(あるいはそうでないこと)についてのいくつかの考えを与えるかもしれません。

LOAD DATA 
infile datafile.csv 
TRUNCATE 

INTO TABLE tab1 
fields terminated by ',' 
( 
data_col 
) 

INTO TABLE tab1 
fields terminated by ',' 
( 
filler1 FILLER position(1) 
,data_col 
) 

INTO TABLE tab1 
fields terminated by ',' 
( 
filler1 FILLER position(1) 
,filler2 FILLER 
,data_col 
) 

INTO TABLE tab1 
fields terminated by ',' 
( 
filler1 FILLER position(1) 
,filler2 FILLER 
,filler3 FILLER 
,data_col 
) 

INTO TABLE tab2 
fields terminated by ',' 
( 
filler1 FILLER position(1) 
,filler2 FILLER 
,filler3 FILLER 
,filler4 FILLER 
,key_name 
,key_value 
) 

INTO TABLE tab2 
fields terminated by ',' 
( 
filler1 FILLER position(1) 
,filler2 FILLER 
,filler3 FILLER 
,filler4 FILLER 
,filler5 FILLER 
,filler6 FILLER 
,key_name 
,key_value 
) 
... 
関連する問題