2011-02-11 40 views
4

我剛剛從data.gov下載了一大堆文本文件,並且在文本文件中有一些我真的不需要的字段。將文本文件的特定列導入到mysql中..這可能嗎?

有沒有辦法導入列[1,3],剩下的呢?

我想我會導入使用'加載數據文件',但沒有看到任何關於如何只導入某些列的MySQL頁面。 http://dev.mysql.com/doc/refman/5.0/en/load-data.html

這些字段由^分隔。 我好清楚,如果txt文件一行是

 
00111^first column entry^second column entry^this would be the 3rd column 

我試圖讓我的MySQL表包含

 
first column entry | this would be the 3rd column 

回答

1

你總是可以創建一個表,虛擬列(假設你不需要經常加載文件),你可以在加載文件後刪除它們。

事情是這樣的:

LOAD DATA LOCAL INFILE '/path/to/file' INTO TABLE table_name 
FIELDS TERMINATED BY '^' (dummy_column1, column1, dummy_column2, column2); 
ALTER TABLE table_name DROP dummy_column1; 
ALTER TABLE table_name DROP dummy_column2; 
+0

感謝特雷弗,我知道這是一個選項,但希望他們是一種方法來做到這一點到MySQL。看起來像沒有 – pedalpete 2011-02-11 23:50:21

1

假設一個Unix平臺上,你可以過濾上游領域。

cut -d^ -f2,4 mygovfile.dat > mytable.txt 

要過濾的第一和第三列中,然後導入使用您的首選方法。 例如

mysqlimport --local -uxxx -pyyy mydb --fields-terminated-by="^" mytable.txt .... 
+0

我不是在UNIX的開發,我希望有一個選項是直接的MySQL而不是搞亂txt文件。 – pedalpete 2011-02-11 23:49:31

0

處理這個問題最常見的兩種方式:

  1. 導入數據,就像是進入一個 臨時表,將你所需要的 到您的「真正的」表,然後 截斷登臺表。
  2. 使用文本工具只需要剪切 你需要的東西。

我選擇的文本工具是awk。一個最小的awk腳本 - 如果不進行一些調整,它可能不適用於你 - 看起來像這樣。

$ awk 'BEGIN { FS="^";OFS=",";}{print $2, $4}' test.dat 
first column entry,this would be the 3rd column 

什麼樣的調整?它通常涉及嵌入逗號,單引號和雙引號。

這部分

BEGIN { FS="^";OFS=",";}{print $2, $4} 

是整個awk程序。

awk岩石。

2

您可以導入特定列:

LOAD DATA LOCAL INFILE 'yourFile' INTO TABLE table_name 
FIELDS TERMINATED BY '^' (column1, @dummy, column3, @dummy); 

把你不@dummy需要的所有列。

相關問題