需要专家帮助使用 LOAD DATA LOCAL INFILE 获取整个原始行并放入我的数据库列
样本
桌子
DROP TABLE IF EXISTS `syslog`;
CREATE TABLE `syslog` (
`the_time` VARCHAR(80) NOT NULL,
`the_key` VARCHAR(30) NOT NULL,
`the_log` VARCHAR(1024) NOT NULL
)
ENGINE = MyISAM;
文件:D:/rnd/syslog.csv
"device","date_time","src_ip","dst_ip","log_type","message"
"Fortigate","2012-05-02 12:02:03","192.168.1.1","192.168.1.11","vpn","Sample message1"
"Fortigate","2012-05-02 12:02:04","192.168.1.2","192.168.1.12","vpn","Sample message2"
"Fortigate","2012-05-02 12:02:05","192.168.1.3","192.168.1.13","traffic","Sample message3"
"Fortigate","2012-05-02 12:02:06","192.168.1.4","192.168.1.14","traffic","Sample message4"
"Fortigate","2012-05-02 12:02:07","192.168.1.5","192.168.1.15","vpn","Sample message5"
"Fortigate","2012-05-02 12:02:08","192.168.1.6","192.168.1.16","vpn","Sample message6"
mysql语句
SET @delimeter = ",";
LOAD DATA LOCAL INFILE
"D:/rnd/syslog.csv"
INTO TABLE syslog
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
( @device,
@date_time,
@src_ip,
@dst_ip,
@log_type,
@message)
SET the_time = @date_time,
the_key=CONCAT(@src_ip, "~" , @dst_ip),
the_log=CONCAT(@device,@delimeter,@date_time,@delimeter,@src_ip,@delimeter,@dst_ip,@delimeter,@log_type,@delimeter,@message);
目前只是使用手动设置,如
the_log=CONCAT(@device,@delimeter,@date_time,@delimeter,@src_ip,@delimeter,@dst_ip,@delimeter,@log_type,@delimeter,@message)
由于实际列是 60,因此有没有其他方法可以获得整行,并且在代码中手动执行它不是一个好主意 + 以后不容易维护。
- 目标:使用 csv 数据并将其操作到我自己的表中(意味着该列与 csv 不同)