0

LOAD DATA LOCAL INFILE を使用して元の行全体を取得し、db 列に入れるには、専門家の助けが必要です

サンプル

テーブル

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と同じではないことを意味します)
4

1 に答える 1

0

もう 1 つの方法は、テーブル構造を CSV ファイルとして作成し、データをそのまま保存し、ログ テーブルからデータを選択する場合にのみ CONCAT を使用することです。

于 2012-08-17T07:08:54.820 に答える