我刚刚从data.gov下载了一堆文本文件,文本文件中有一些我真的不需要的字段。
有没有办法导入列[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
答案 0 :(得分:2)
您可以使用以下内容导入特定列:
LOAD DATA LOCAL INFILE 'yourFile' INTO TABLE table_name
FIELDS TERMINATED BY '^' (column1, @dummy, column3, @dummy);
将所有不需要的列放在@dummy。
中答案 1 :(得分: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;
答案 2 :(得分:1)
假设有一个Unix平台,你可以过滤上游的字段。
cut -d^ -f2,4 mygovfile.dat > mytable.txt
要过滤第一列和第三列,请使用首选方法导入。 例如
mysqlimport --local -uxxx -pyyy mydb --fields-terminated-by="^" mytable.txt ....
答案 3 :(得分:0)
处理此问题的两种最常见方式:
我选择的文字实用程序是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 rock。