mySQL:mysqlimport导入逗号分隔文件 - 第一列= ID不在要导入的文件中

时间:2011-03-22 18:00:54

标签: mysql import mysqlimport

嗨伙计我正在尝试导入一个非常大的文件,该文件每分钟每天记录一次,用于美国20个城市。

我有1个名为“cityname”的表,此表有2列:

-city_ID <- INT and is the primary key which increments automatically
-city_name <- character

我创建了另一个名为“citymoisture”的表,该表有7列:

-city_ID <- INT and is the primary key but does NOT increment automatically
-date_holding VARCHAR(30)
-time_holding VARCHAR(30)
-open
-high
-low
-close

date_holding意味着存放日期数据,但因为格式不是mysql所期望的(即它是m / d / y)我想最初将它存储在这个列中,然后再转换它(除非有办法在导入数据时转换它???)。类似地,time_holding列保持显示为hh:mm:ss AM(或PM)的时间。我只想导入hh:mm:ss并忽略它是AM还是(PM)。

在任何情况下,我要导入的文件都有SIX列:

日期,时间,开放,高,低,关闭。

我想确保导入的数据设置正确的city_ID,以匹配“cityname”表中的city_ID。例如:

city_ID city_name
20      Boston 
19      Atlanta

因此,当波士顿的水分数据导入citymoisture表时,city_ID列设置为20.同样,当亚特兰大的数据导入citymoisture表时,city_ID列设置为19. citymoisture表将非常大,并将存储未来20个城市的1分钟水分数据。

所以我的问题是:

1)有没有办法将文件内容导入2-7列并手动指定第一列(city_ID)的值?

2)我在导入时动态转换日期的方法,或者我必须首先存储数据,然后转换并存储到最后的表格。

3)与#2相同的问题,但时间列。

非常感谢你的帮助。

水分数据文件的样本如下所示:

1/4/1999,9:31:00 AM,0.36,0.43,0.23,0.39  
1/4/1999,9:32:00 AM,0.39,0.49,0.39,0.43  
.  
.  
.  

我不确定citymoisture表中的city_ID是如何设置的。但如果有办法,那么我可以根据两个表运行连接查询,即每个城市每个日期/时间有一条记录。

1 个答案:

答案 0 :(得分:1)

STR_TO_DATE应该可以用来获取您的日期和时间

mysql> SELECT STR_TO_DATE('01/01/2001', '%m/%d/%Y');
+---------------------------------------+
| STR_TO_DATE('01/01/2001', '%m/%d/%Y') |
+---------------------------------------+
| 2001-01-01                            |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT STR_TO_DATE('10:53:11 AM','%h:%i:%s %p');                                                        
+------------------------------------------+
| STR_TO_DATE('10:53:11 AM','%h:%i:%s %p') |
+------------------------------------------+
| 10:53:11                                 |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> 

如何“手动”确定每行数据属于哪个城市?是否可以包含导入数据文件的示例行?假设你有某个city_ID,(在下面的代码中替换):

看起来你想要使用它:LOAD DATA INFILE

如果您要插入数据的城市是来自名为“Boston.dat”的文件的波士顿,并且您的城市名称表中存在条目:

SET @c_name = 'Boston';
SET @filename = CONCAT(@c_name,'.dat');

LOAD DATA INFILE     @filename
INTO TABLE           city_moisture
(@date, @time, open, high, low, close)
SET                  city_ID=(SELECT city_ID FROM TABLE cityname WHERE city_name=@c_name),
                     date=STR_TO_DATE(@date, '%m/%d/%Y'),
                     time=STR_TO_DATE(@time, '%H:%i:%s %p');

离开AM PM部分时间听起来不错。