将多个文件中的多个记录加载到mysql表中

时间:2012-07-24 22:59:50

标签: mysql ruby

我正在尝试将不同文件中的不同数据加载到MySQL中的多个列中。我不是一个大数据库人,所以也许我的数据结构错误。 :)

以下是我设置的方法:

DATABASE: mydb
TABLE:    aixserver1
COLUMNS:  os, hostname, num_users, num_groups, pkg_epoch

shown from mysql:

+---------------+-----------+------+-----+-------------------+----------------+
| Field         | Type      | Null | Key | Default           | Extra          |
+---------------+-----------+------+-----+-------------------+----------------+
| id            | int(11)   | NO   | PRI | NULL              | auto_increment |
| cur_timestamp | timestamp | NO   |     | CURRENT_TIMESTAMP |                |
| pkg_epoch     | int(11)   | NO   |     | NULL              |                |
| os            | char(5)   | YES  |     | NULL              |                |
| hostname      | char(40)  | YES  |     | NULL              |                |
| num_users     | int(10)   | YES  |     | NULL              |                |
| num_groups    | int(10)   | YES  |     | NULL              |                |
+---------------+-----------+------+-----+-------------------+----------------+

所以基本上我想将pkg_epoch,os,hostname,num_users和num_groups填充到数据库中。我想要加载的数据是服务器上的5个平面文件。我正在使用ruby来加载数据。

我的问题是如何将这些文件中的所有这些值一次性加载到我的表中。如果我一次插入一个,那么其他记录将变为NULL。 I.E,我将数据加载到hostname列中,并且该行的所有其他列都变为NULL。

我错过了什么? :)

1 个答案:

答案 0 :(得分:0)

您可以通过几种方式执行此操作,但诀窍是使用可变占位符。以下是使用数据库的LOAD DATA函数的示例:

LOAD DATA INFILE '/PATH/TO/FILE' IGNORE INTO TABLE tableName FIELDS TERMINATED BY '\t' LINES  
TERMINATED BY '\r' (@skip, @skip, @skip, login_name, pwd, @skip, @skip, @skip, @skip, @skip, first_name, last_name);

你看我只是为我不希望包含在数据库中的字段设置变量@skip或@anything,并命名我想要的列。


如果您使用Ruby构建自己的加载器,我可以在这方面让您到达中途,但这是不确定的最佳方法。我建议你检索文件,让MySQL使用LOAD DATA导入,因为它非常高效,你可以使用上面的技巧。