Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có cách nào tốt hơn để xử lý dữ liệu tệp văn bản 300.000 dòng và chèn nó vào MySQL không?

Từ mã của bạn, có vẻ như "số nhận dạng duy nhất" của bạn (ít nhất cho mục đích chèn này) là (READING_DATE, READING_TIME, READING_ADDRESS) .

Nếu bạn xác định một UNIQUE như vậy nhập vào cơ sở dữ liệu của bạn rồi đến LOAD DATA với IGNORE từ khóa phải làm chính xác những gì bạn yêu cầu:

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

(Ở đâu '???' được thay thế bằng các chuỗi đại diện cho các định dạng ngày và giờ trong CSV của bạn).

Lưu ý rằng bạn thực sự nên lưu trữ READING_DATEREADING_TIME cùng nhau trong một DATETIME duy nhất hoặc TIMESTAMP cột:

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
;

Trong trường hợp đó, SET mệnh đề của LOAD DATA thay vào đó lệnh sẽ bao gồm:

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. Lỗi cú pháp do sử dụng từ dành riêng làm tên bảng hoặc cột trong MySQL

  2. Làm thế nào để chạy các lệnh mysql từ thiết bị đầu cuối khi cài đặt MAMP?

  3. Mysqldump:Bạn có thể thay đổi tên của bảng mà bạn đang chèn vào không?

  4. Mysql - kết nối với máy chủ từ xa bằng địa chỉ IP

  5. MySQL - đếm người dùng đang hoạt động / không hoạt động / bị cấm và chọn người dùng dựa trên trạng thái trong một truy vấn