1

我正在尝试使用 Java 将 1000 万行文本文件输入到 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;");

我正在对表进行分区以加快插入速度,还因为我想稍后在 word 列上添加一个索引,因为我想检索特定单词的 id。我不认为这会导致问题。LOAD DATA INFILE命令是:

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

对于如何解决此问题的任何建议,我将不胜感激。

4

3 回答 3

0

我有两个建议给你:

  1. 您应该检查错误日志以查找错误。
  2. 将输出记录到一个文件中,并将其用于 'err' 字符。

    猫负载.log | grep -i 错误

我敢打赌,您会发现一个错误,解释了为什么没有插入某些行。

于 2013-01-29T00:43:41.360 回答
0

我认为可能是这些原因:

  • 文本文件中的某些行没有用空格分隔
  • 可能是某些行上的文本太长了
  • 可能是第一列中的某些不是真正的整数
于 2013-01-29T01:01:41.387 回答
0

我遇到了同样的问题,但在我的情况下,我在调用 LOAD DATA 之前用 Java 编写了 CSV 文件。但是,我忘记关闭 CSV 文件,因此在 LOAD DATA 开始之前它还没有完全写入磁盘。

于 2015-08-11T17:07:21.517 回答