将mysqlimport与文件列的子集一起使用

问题描述

我有一个文件data.csv,该文件正在进入服务器,并且我想使用data导入MySQL数据库中的mysqlimport表。

我的问题是,此文件包含的数据比我实际想要导入的要多得多。它需要我之前的另一台服务器使用,它需要所有这些数据,但我只需要其中的几列。

是否可以指定我要mysqlimport使用的列?

我认为它看起来像

mysqlimport --columns="field_1","field_2","field_42","field_31","field_16","field_4" db data.csv

,但是表仅包含文件的前6个字段。如果需要,我可以重新排列表格,以便我想要的字段按顺序排列(即,我将运行--columns="field_1","field_4",...)。

我隐约意识到可以使用sed来完成此操作,但我很好奇mysqlimport是否本身就支持它?

编辑:接受的答案并非我所希望的,但我认为答案是,“不,可惜它不支持”。无论如何,请查看可接受的答案和评论以找到解决方法!

解决方法

--columns选项未命名输入文件的列。它命名要导入到的目标表的列。输入文件的所有字段都需要放在某个地方。您需要在--columns中具有与输入文件的字段一样多的列。

但并非输入文件的所有字段都需要进入表的列中。

嗯?

这是一个技巧(也可以在LOAD DATA INFILE中使用):您可以将输入的字段“发送”到表的实际列或会话变量中。该变量将被文件中的每一行输入覆盖,但这没关系。可以将其视为代码项目中的虚拟变量。

示例:我创建了一个包含三列的表。

mysql> create table mytable (one text,two text,four text);

我创建了一个包含四个字段的输入文本文件。

$ cat mytable.csv
one,two,three,four

在这里,我将字段导入到它们各自的列中,通过将字段3放入一个虚拟变量中来跳过它们。

$ mysqlimport --local --columns one,@dummy,four --fields-terminated-by=,test mytable.csv 

成功!

mysql> select * from mytable;
+------+------+------+
| one  | two  | four |
+------+------+------+
| one  | two  | four |
+------+------+------+

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...