1

こんにちは皆さん 米国の 20 都市の水分データが毎日 1 分ごとに記録されている非常に大きなファイルをインポートしようとしています。

「cityname」という名前のテーブルが 1 つあり、このテーブルには 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) かを除外したいと考えています。

いずれにせよ、インポートしたいファイルには 6 つの列があります。

日付、時刻、始値、高値、安値、終値。

インポートされるデータに、'cityname' テーブルの city_ID と一致する正しい 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 つのレコードがあります。

4

1 に答える 1

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」という名前のファイルのボストンであり、cityname テーブルにエントリが存在する場合:

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 の部分を省略することは、悪い考えのように思えます。

于 2011-03-22T18:37:40.087 に答える