2016-03-31 14 views
1

Bearbeitet: Ich kann die Datensätze einer Datei mit nur einer Zeile mit diesem Format speichern.Mysql - Laden von Daten Infile Formatierung eines Datums

Aber wenn ich versuche, eine Datei mit 2 oder mehr Zeilen zu speichern, erhalte ich einen Fehler.

0,2016-03-31-13:48:16.435,0.705486,1,F2221-222 
1,2016-03-31-13:48:16.435,0.56606096,2,F2221-222 

Ich verwende:

load data infile 'flight3021' 
into table signal_times 
fields terminated BY ',' 
(signaltime_id,@var1,value,signal_id,flight_number) 
SET time = STR_TO_DATE(@var1,'%Y-%m-%d-%H:%i:%S.%f') 

Fehler:

Cannot add or update a child row: a foreign key constraint fails (`cmsdbdev`.`signal_times`, CONSTRAINT `FK_r2e4qo5suuwrlkr08ryebv14i` FOREIGN KEY (`flight_number`) REFERENCES `flight_data` (`flight_number`)) 

Das Merkwürdige ist, dass, wenn ich normale Einfügung dieser 2 Zeilen es funktioniert, so die damit verbundenen mit einem FK Constraint-Verletzungsfehler. Ich denke, es muss ein Problem mit der Ladedaten-Infile sein.

Danke.

+0

Können Sie die Struktur Ihrer Tabellen veröffentlichen? Haben Sie Auslöser an Ihren Tischen? – wchiquito

Antwort

1

'2016-03-31-13:16:24.861' wird als "'2016-03-31-13:16:24.861'" geladen, weshalb es keine gültige datetime ist.

Ich benutze eine TRIM Funktion, um zu versuchen, um das zu umgehen.

Für mehrere Zeilen wird lines terminated by benötigt.

load data infile '/home/jinggang.sjg/data1' 
into table signal_times 
fields terminated BY ',' ESCAPED BY "" 
lines terminated by '\r\n' 
(signaltime_id,@var1,value,signal_id,flight_number) 
SET time = STR_TO_DATE(@var1,'%Y-%m-%d-%H:%i:%S.%f'); 
+0

Danke, es funktioniert perfekt! Die Zeit ist richtig geladen, wenn ich es gut sehe. Was meinst du mit TRIM? Die Zeit sollte zwischen Anführungszeichen in der Datei liegen? "2016-03-31-13: 16: 24.861". Ich lasse keinen Raum. –

+0

Das normale Datum ist '2016-03-31-13: 16: 24.861', aber hier wird es geladen als '2016-03-31-13: 16: 24.861' ". –

1

Versuchen:

Datei: '/path/to/file/flight3021'

0,2016-03-31-13:48:16.435,0.705486,1,F2221-222 
1,2016-03-31-13:48:16.435,0.56606096,2,F2221-222 

MySQL-Befehlszeile:

mysql> SELECT VERSION(); 
+-----------+ 
| VERSION() | 
+-----------+ 
| 5.7.11 | 
+-----------+ 
1 row in set (0.00 sec) 

mysql> DROP TABLE IF EXISTS `signal_times`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `signal_times` (
    -> `signaltime_id` INT UNSIGNED, 
    -> `time` TIMESTAMP(3), 
    -> `value` DECIMAL(10,8), 
    -> `signal_id` INT UNSIGNED, 
    -> `flight_number` VARCHAR(10) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> LOAD DATA INFILE '/path/to/file/flight3021' 
    -> INTO TABLE `signal_times` 
    -> FIELDS TERMINATED BY ',' 
    -> LINES TERMINATED BY '\r\n' 
    -> (`signaltime_id`, 
    -> @`var1`, 
    -> `value`, 
    -> `signal_id`, 
    -> `flight_number` 
    -> ) 
    -> SET `time` = STR_TO_DATE(@`var1`,'%Y-%m-%d-%H:%i:%S.%f'); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> SELECT 
    -> `signaltime_id`, 
    -> `time`, 
    -> `value`, 
    -> `signal_id`, 
    -> `flight_number` 
    -> FROM 
    -> `signal_times`; 
+---------------+-------------------------+------------+-----------+---------------+ 
| signaltime_id | time     | value  | signal_id | flight_number | 
+---------------+-------------------------+------------+-----------+---------------+ 
|    0 | 2016-03-31 13:48:16.435 | 0.70548600 |   1 | F2221-222  | 
|    1 | 2016-03-31 13:48:16.435 | 0.56606096 |   2 | F2221-222  | 
+---------------+-------------------------+------------+-----------+---------------+ 
2 rows in set (0.00 sec)