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を使用しています。

私の質問は、これらすべての値をこれらのファイルからテーブルに一度にロードするにはどうすればよいかということです。一度に1つずつ挿入すると、他のレコードはNULLになります。IE、ホスト名列だけにデータをロードすると、他のすべての列はその行でNULLになります。

私は何が欠けていますか?:)

4

1 に答える 1

0

これはいくつかの方法で実行できますが、トリックは可変プレースホルダーを使用することです。データベースのLOADDATA関数を使用した場合の例を次に示します。

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 に答える