簡體   English   中英

來自JAVA的MySQL:LOAD DATA INFILE跳過輸入文件中的行

[英]MySQL from JAVA: LOAD DATA INFILE skips rows from input file

我正在嘗試使用Java將一千萬行的文本文件輸入到MySQL表中。 該文件有兩列,由空格字符分隔,我正在使用LOAD DATA INFILE將數據輸入到具有兩列的表中。 第一列包含一個整數,第二列包含一個varchar。 但是,數據庫中傳遞的數據不是1000萬,而是9981770。該表的結構為:

st.execute("create table if not exists test 
    (id bigint NOT NULL, word varchar(80)) 
    ENGINE=MYISAM PARTITION BY KEY(word) PARTITIONS 40;");

我對表進行分區以加快插入速度,並且還因為稍后要在單詞列上添加索引,因為我想檢索特定單詞的ID。 我不認為這會導致問題。 LOAD DATA INFILE命令是:

st.execute("LOAD DATA LOCAL INFILE '"+PATH+
    "' INTO TABLE test FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n';");

對於如何解決此問題的任何建議,我將不勝感激。

我有兩個建議給您:

  1. 您應該檢查錯誤日志中的錯誤。
  2. 將輸出記錄到文件中,並將其grep表示為'err'字符。

    cat load.log | grep -i錯誤

我敢打賭,您會發現一個錯誤,該錯誤解釋了為什么未插入某些行。

我認為這些可能是原因:

  • 文本文件上的某些行沒有用空格隔開
  • 可能是某些行上的文字太長
  • 可能是第一列中的某些不是真的整數

我遇到了同樣的問題,但就我而言,我在調用LOAD DATA之前用Java編寫了CSV文件。 但是,我忘記了關閉CSV文件,因此在LOAD DATA開始之前尚未將其完全寫入磁盤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM