sql >> Database >  >> RDS >> Mysql

Is er een betere manier om een ​​tekstbestand van 300.000 regels te verwerken en in MySQL in te voegen?

Uit uw code blijkt dat uw "unieke identificatie" (ten minste voor de doeleinden van deze invoeging) de samengestelde (READING_DATE, READING_TIME, READING_ADDRESS) is .

Als u zo'n UNIQUE . definieert sleutel in uw database, dan LOAD DATA met de IGNORE zoekwoord moet precies doen wat u nodig heeft:

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)
;

(Waar '???' worden vervangen door tekenreeksen die de datum- en tijdnotaties in uw CSV vertegenwoordigen).

Merk op dat je eigenlijk READING_DATE . zou moeten opslaan en READING_TIME samen in één DATETIME of TIMESTAMP kolom:

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
;

In dat geval wordt de SET clausule van de LOAD DATA commando zou in plaats daarvan bevatten:

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


  1. C# - Hoe een orakel lange onbewerkte typewaarde te krijgen

  2. Een gegevensbestand toevoegen aan een SQL Server-database (T-SQL)

  3. MySQL - Betekenis van PRIMARY KEY, UNIQUE KEY en KEY wanneer ze samen worden gebruikt tijdens het maken van een tabel

  4. GROUP_CONCAT in SQLite