使用Load data into将CSV文件加载到mysql表。如何将以下查询转换为JOOQ?

时间:2016-12-26 03:54:50

标签: java mysql csv jooq

LOAD DATA INFILE '/testing.csv'
IGNORE INTO TABLE Test_table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
IGNORE 1 ROWS (@col1)
SET test_ID="100",
    test_reg_ID ="26003",
    VALUE =@col1;

testing.csv:

enter image description here

TABLE Test_table

enter image description here

问题1:帮助我将其转换为JOOQ 3.6 问题2:我想避免落在第1行的空数据。

1 个答案:

答案 0 :(得分:0)

为此目的,jOOQ有一个CSV import API。以下是您将MySQL命令转换为jOOQ的方法:

DSL.using(configuration)
   .loadInto(TEST_TABLE)
   .loadCSV(new File("/testing.csv"))
   .fields(TEST_TABLE.VALUE)
   .separator(',')
// Available in jOOQ 3.10 only: https://github.com/jOOQ/jOOQ/issues/5737
// .lineSeparator("\n")
   .ignoreRows(1)
   .execute();

请注意,jOOQ的Loader API并不像MySQL那样支持这些默认表达式(参见#5740):

SET test_ID="100",
    test_reg_ID ="26003"

有一些解决方法:

  1. 您可以修补CSV数据并在加载前添加这些列。
  2. 您可以使用DSLContext.fetchFromCSV(),然后使用stream().map()添加缺失的数据,然后再使用替代Record import API而不是建议的CSV import API
  3. 您可以在导入此数据后立即运行简单的UPDATE语句。
  4. 关于表现的说明

    请注意,可以通过指定bulk, batch, and commit sizes来微调jOOQ的加载程序API。尽管如此,数据库的开箱即用导入实现仍然比任何必须通过JDBC的客户端导入快得多。