2016-08-16 3 views
-1

私は解決しようとしている次の問題があります。私は異なる行が異なるテーブルに属している大規模なデータセットをインポートしたい(完全に異なる属性セットを持つ)。"mixed"データセットからMySQLにデータをインポートする

データセットは、すべてのバッチが「見出し」と「テーブル」を持つ「バッチ」で構成されています。見出し自体は、定義済みの属性セットを含む1つの行で構成されます。見出しにはいくつかの種類があります。新しい見出しが出現するまで、すべての行の蛇行見出しはこの見出しに関連しています。特定の見出しに関連するこれらの行は、異なる種類であってもよく、そのため、異なる表に属してもよい(異なる属性の組によって表される異なる情報を含む)。 例:

以下の例を参照してください。私は8行を持っています。最初の文字「A」または「F」は新しいバッチの開始点を定義し、たとえば見出し「A」は属性「XXX」「TTT」「ZZZ」および「YYY」(これらの特定の位置にある) 。また、「V」または「L」で始まる行には、それらが属するバッチに関する情報が含まれていることもわかります。しかし、 "V"が見出し "A"をたどる場合、見出し "F"をたどるときとは異なる属性で構成されます。

これで、結果としていくつかのテーブルが必要になりました。私はすべての種類の見出し(すなわち、見出し "A"からのすべての情報を含む表)のための別個の表が必要です。次に、バッチ「A」から「V」で始まる行のすべての値の表と、バッチ「F」などから「V」で始まる行のすべての値の別の表を選択します。たとえば、「A」で始まるバッチから「V」を開始するすべての行をグループ化すると、後で作業するためにのみヘッダーに含まれる情報を知る必要があるためです。

id。値

1 AXXXTTTZZZYYY

2 VZZZTTTGGGFFF

3 VZZZTTTGGGFFF

4 LHHHBBBVVV

5 FXXXTTTSSSFFF

6 VDDDFFFGGTT

7 VDDDFFFGGTT

8 axxxttzzzyyy

誰もこの問題を解決する方法を知っていますか? ありがとうございました!

+0

はあなたのための重要なIDですか? –

答えて

0

このような出力をしたいですか? 最初の列はあなたのファイルのIDです。次に、メインテーブルとサブテーブルの関係を示します。最後はあなたのデータです。

INSERT into main VALUES(1,1,"AXXXTTTZZZYYY"); 
INSERT into sub VALUES(2,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(3,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(4,1,"LHHHBBBVVV"); 
INSERT into main VALUES(5,2,"FXXXTTTSSSFFF"); 
INSERT into sub VALUES(6,2,"VDDDFFFGGTT"); 
INSERT into sub VALUES(7,2,"VDDDFFFGGTT"); 
INSERT into main VALUES(8,3,"AXXXTTTZZZYYY"); 

あなたは少しawkスクリプトでそれを行うことができます。

$ cat split.awk 
#!/usr/bin/awk -f 

BEGIN { 
c=0; 
} 
{ 
     if(substr($2,1,1) >= "A" && substr($2,1,1) <= "F") { 
       c++; 
       print "INSERT into main VALUES(" $1 "," c ",\"" $2 "\");"; 
     } else { 
       print "INSERT into sub VALUES(" $1 "," c ",\"" $2 "\");"; 
     } 


} 

サンプル

$ cat list.txt | ./split.awk 
INSERT into main VALUES(1,1,"AXXXTTTZZZYYY"); 
INSERT into sub VALUES(2,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(3,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(4,1,"LHHHBBBVVV"); 
INSERT into main VALUES(5,2,"FXXXTTTSSSFFF"); 
INSERT into sub VALUES(6,2,"VDDDFFFGGTT"); 
INSERT into sub VALUES(7,2,"VDDDFFFGGTT"); 
INSERT into main VALUES(8,3,"AXXXTTTZZZYYY"); 

$ 
関連する問題