1

我正在尝试将不同文件中的不同数据加载到 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。IE,我只将数据加载到主机名列中,而该行的所有其他列都变为 NULL。

我错过了什么?:)

4

1 回答 1

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 构建自己的加载器,我不确定最好的方法。我建议您检索文件并使用 LOAD DATA 让 MySQL 导入,因为它的性能非常好,您可以使用上面的技巧。

于 2012-07-24T23:14:03.467 回答