Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли по-добър начин да обработите текстови файлове от 300 000 реда и да ги вмъкнете в MySQL?

От вашия код изглежда, че вашият "уникален идентификатор" (поне за целите на това вмъкване) е съставният (READING_DATE, READING_TIME, READING_ADDRESS) .

Ако дефинирате такъв UNIQUE въведете вашата база данни, след това LOAD DATA с IGNORE ключовата дума трябва да прави точно това, от което се нуждаете:

ALTER TABLE tbl_reading
  ADD UNIQUE KEY (READING_DATE, READING_TIME, READING_ADDRESS)
;

LOAD DATA INFILE '/path/to/csv'
    IGNORE
    INTO TABLE tbl_reading
    FIELDS
        TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'
        ESCAPED BY ''
    LINES
        TERMINATED BY '\r\n'
    (@rec_0, @rec_1, @rec_2, @rec_3, @rec_4, @rec_5, @rec_6, @rec_7, @rec_8)
    SET
        READING_DATE = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_0), '???'), '%Y/%m/%d'),
        READING_TIME = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_1), '???'), '%H:%i:%s'),
        READING_ADDRESS    = TRIM(@rec_2),
        CO2_SET_VALUE      = TRIM(@rec_3),
        CO2_PROCESS_VALUE  = TRIM(@rec_4),
        TEMP_SET_VALUE     = TRIM(@rec_5),
        TEMP_PROCESS_VALUE = TRIM(@rec_6),
        RH_SET_VALUE       = TRIM(@rec_7),
        RH_PROCESS_VALUE   = TRIM(@rec_8)
;

(Къде '???' се заменят с низове, които представляват форматите за дата и час във вашия CSV).

Имайте предвид, че наистина трябва да съхранявате READING_DATE и READING_TIME заедно в един DATETIME или TIMESTAMP колона:

ALTER TABLE tbl_reading
  ADD COLUMN READING_DATETIME DATETIME AFTER READING_TIME,
  ADD UNIQUE KEY (READING_DATETIME, READING_ADDRESS)
;

UPDATE tbl_reading SET READING_DATETIME = STR_TO_DATE(
  CONCAT(READING_DATE, ' ', READING_TIME),
  '%Y/%m/%d %H:%i:%s'
);

ALTER TABLE tbl_reading
  DROP COLUMN READING_DATE,
  DROP COLUMN READING_TIME
;

В този случай SET клауза на LOAD DATA вместо това командата ще включва:

READING_DATETIME = STR_TO_DATE(CONCAT(TRIM(@rec_0), ' ', TRIM(@rec_1)), '???')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Имам повече проблеми с mysqli. Числови данни в резултатите

  2. mysql намери най-малкия + уникален идентификатор

  3. Инструмент за импортиране на Excel CSV

  4. URL адреси на файлове или как да отворите папка от URL

  5. MySQL:Защо да използвате VARCHAR(20) вместо VARCHAR(255)?