2010-07-11 38 views
1

我正在將高中學生的大文本文件加載到MySQL中,但學校本身只在每個文本文件的第一行中標識。像這樣:加載學生的大表,但學校只在第一行標識

897781234Metropolitan High     
340098 1001X 678 AS  Reading    101KAS DOE  KEITH A1 340089 A 7782... 

使用SQL代碼,我怎麼能生成學號的列(例如,897781234)在接收表的第一列,以便學校將與各行確定了嗎?

要加載的文本文件,我使用的是:

LOAD DATA INFILE "f:/school_files/school897781234.txt" 
INTO TABLE my_table FIELDS TERMINATED BY '' 
IGNORE 1 LINES; 

謝謝!

+0

感謝您的編輯! – dave 2010-07-11 02:48:24

回答

0

嗯...看起來像你在Windows下這樣做。我更喜歡Unix/Linux進行大文本處理,但是您應該可以在Windows下使用類似的技術(嘗試安裝Cygwin)。如果你熟悉PowerShell,PowerShell也有一些有用的功能。考慮到這一點,這裏有一些想法給你:

  1. 編寫一個腳本,將Munge時間你的數據文件,以使他們的MySQL友好,通過創建擁有所有的內容,但於第一線的新文件學校信息預先列在每一行上。從通用文件中加載數據。

    (munge-schools.sh) 
    #!/bin/bash 
    ifile=$1 
    ofile=$2 
    school=$(head -1 ${ifile}) 
    tail --lines=+2 ${ifile} | sed "s/^/${school}/" > ${ofile} 
    
    ./munge-schools school897781234.txt school897781234.munged 
    
  2. 對於每個學校,做爲是負載(跳過的第一行),但它加載到一個臨時表,然後爲學校默認到學校信息添加一列。從臨時表複製到最終表中。

如果可以選擇,我會一直做與文本操作的數據庫之外去使輸入文件更友好的 - 有大量的文字處理工具那會快很多,在重新格式化你的數據比你的數據庫的批量加載工具。

+0

感謝您的回覆。我想我已經有了這個概念。至少,我現在知道沒有「隱藏的」MySQL腳本可以完成這種類型的事情。有趣的是(或不),MySQL LOAD DATA INFILE允許IGNORE但不是LIMIT(即,LIMIT 1 LINES)。再次感謝! – dave 2010-07-12 02:50:58