我正在尝试将不同文件中的不同数据加载到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。
我错过了什么? :)
答案 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导入,因为它非常高效,你可以使用上面的技巧。