2011-02-11 63 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需要的所有列。