将 mysqlimport 与文件列的子集一起使用
Use mysqlimport with a subset of a file's columns
我有一个文件,比如说 data.csv
,它正在进入我的服务器,我想将其导入到 MySQL 数据库中的 data
table使用 mysqlimport
.
我的问题是,此文件中的数据比我实际想要导入的数据多得多。它被我之前的另一台服务器使用,它需要所有这些数据,但我只需要其中的几列。
有没有办法指定我希望 mysqlimport
使用哪些列?
我认为它看起来像
mysqlimport --columns="field_1","field_2","field_42","field_31","field_16","field_4" db data.csv
但 table 只包含文件的前 6 个字段。如果需要,我可以重新排列 table 以便我想要的字段按顺序排列(即 运行 --columns="field_1","field_2","field_4","field_16",...
)。
我隐约知道这可以使用 sed
来完成,但我很好奇 mysqlimport
是否原生支持它?
编辑: 接受的答案并不完全是我所希望的,但我认为答案是,“不,遗憾的是它不支持它”。无论如何,请查看已接受的答案和解决方法的评论!
--columns
选项不命名输入文件的列。它命名了您要导入到的目的地 table 的列。输入文件的所有字段都需要放在某个地方。 --columns
中的列数需要与输入文件的字段数一样多。
但并非输入文件的所有字段都需要进入您的 table 的列。
嗯?
这里有一个技巧(这在 LOAD DATA INFILE
中也有效):您可以将输入的字段“发送”到 table 的真实列或会话变量。这个变量只会被文件中输入的每一行覆盖,但这并不重要。将其视为代码项目中的虚拟变量。
示例:我创建了一个包含三列的 table。
mysql> create table mytable (one text, two text, four text);
我创建了一个包含四个字段的输入文本文件。
$ cat mytable.csv
one,two,three,four
在这里,我将字段导入到它们各自的列中,通过将其放入虚拟变量来跳过字段三。
$ mysqlimport --local --columns one,two,@dummy,four --fields-terminated-by=, test mytable.csv
成功!
mysql> select * from mytable;
+------+------+------+
| one | two | four |
+------+------+------+
| one | two | four |
+------+------+------+
我有一个文件,比如说 data.csv
,它正在进入我的服务器,我想将其导入到 MySQL 数据库中的 data
table使用 mysqlimport
.
我的问题是,此文件中的数据比我实际想要导入的数据多得多。它被我之前的另一台服务器使用,它需要所有这些数据,但我只需要其中的几列。
有没有办法指定我希望 mysqlimport
使用哪些列?
我认为它看起来像
mysqlimport --columns="field_1","field_2","field_42","field_31","field_16","field_4" db data.csv
但 table 只包含文件的前 6 个字段。如果需要,我可以重新排列 table 以便我想要的字段按顺序排列(即 运行 --columns="field_1","field_2","field_4","field_16",...
)。
我隐约知道这可以使用 sed
来完成,但我很好奇 mysqlimport
是否原生支持它?
编辑: 接受的答案并不完全是我所希望的,但我认为答案是,“不,遗憾的是它不支持它”。无论如何,请查看已接受的答案和解决方法的评论!
--columns
选项不命名输入文件的列。它命名了您要导入到的目的地 table 的列。输入文件的所有字段都需要放在某个地方。 --columns
中的列数需要与输入文件的字段数一样多。
但并非输入文件的所有字段都需要进入您的 table 的列。
嗯?
这里有一个技巧(这在 LOAD DATA INFILE
中也有效):您可以将输入的字段“发送”到 table 的真实列或会话变量。这个变量只会被文件中输入的每一行覆盖,但这并不重要。将其视为代码项目中的虚拟变量。
示例:我创建了一个包含三列的 table。
mysql> create table mytable (one text, two text, four text);
我创建了一个包含四个字段的输入文本文件。
$ cat mytable.csv
one,two,three,four
在这里,我将字段导入到它们各自的列中,通过将其放入虚拟变量来跳过字段三。
$ mysqlimport --local --columns one,two,@dummy,four --fields-terminated-by=, test mytable.csv
成功!
mysql> select * from mytable;
+------+------+------+
| one | two | four |
+------+------+------+
| one | two | four |
+------+------+------+