Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah ada cara yang lebih baik untuk memproses 300.000 baris data file teks dan memasukkannya ke MySQL?

Dari kode Anda, tampaknya "pengidentifikasi unik" Anda (setidaknya untuk tujuan penyisipan ini) adalah gabungan (READING_DATE, READING_TIME, READING_ADDRESS) .

Jika Anda mendefinisikan UNIQUE . seperti itu masukkan database Anda, lalu LOAD DATA dengan IGNORE kata kunci harus melakukan apa yang Anda butuhkan:

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

(Di mana '???' diganti dengan string yang mewakili format tanggal dan waktu di CSV Anda).

Perhatikan bahwa Anda harus benar-benar menyimpan READING_DATE dan READING_TIME bersama-sama dalam satu DATETIME atau 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
;

Dalam hal ini, SET klausa dari LOAD DATA perintah akan menyertakan sebagai gantinya:

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. Mysql menghitung jumlah kecocokan regex per bidang

  2. Mengurutkan bidang varchar secara numerik di MySQL

  3. Kesalahan ActiveRecord:SAVEPOINT active_record_1 tidak ada

  4. Driver QMYSQL tersedia tetapi tidak dimuat

  5. mysql bergabung dengan beberapa nilai dalam satu kolom