KDB:如何在 Java 中进行批量插入?

KDB: how do I do bulk insert in Java?

我有一个 table,其中包含字符串列 "key1"、"col1"、"col2"、"col3"。我在下面有一个片段来测试批量插入。当我 运行 它时,我没有收到任何错误,但我没有看到 "test" table.

有任何变化

我是不是漏掉了什么?

        Object[][] data = new Object[4][];

        ArrayList<String>[] rec = new ArrayList[4];

        rec[0] = new ArrayList<String>();  
        rec[1] = new ArrayList<String>();  
        rec[2] = new ArrayList<String>();  
        rec[3] = new ArrayList<String>(); 

        for (Integer i = 0; i < 10; i++) {

            rec[0].add(i.toString() + i.toString() + i.toString());
            rec[1].add(i.toString() + i.toString() + i.toString());
            rec[2].add(i.toString() + i.toString() + i.toString());
            rec[3].add(i.toString() + i.toString() + i.toString());

        }

        for (int i = 0; i < 4; i++) {
            data[i] = rec[i].toArray(new Object[rec[i].size()]);
        }

        c.Dict dict = new c.Dict(Arrays.asList("key1", "col1", "col2", "col3").toArray(new String[4]), data);
        c.Flip flip = new c.Flip(dict);

        Object[] updStatement = new Object[] { ".u.upd", "test", flip };

        conn.ks(updStatement);

加上你所说的,你想使用 ks() method with 2 arguments

来自 c.java class 中给出的 javadoc:

Use this to * invoke a function in kdb+ which takes 2 arguments and does not return a value. e.g. to invoke f[x;y] use ks("f",x,y); * to invoke a lambda, use ks("{x+y}",x,y);

函数 .u.upd 接受 2 个参数,默认情况下,与 insert:

具有相同的签名
  • 第一个参数是 table 名称的符号,其类型为 Java
  • 第二个参数是 Java
  • 中 Object[] 类型的记录

第二个参数中Object[]的长度应该等于列数。 Object[] 中的每个 Object 本身应该是一个长度等于记录数的数组。内部数组的顺序应与列的顺序相同,并且每个内部数组的值应具有 matching type 到 kdb 中的列类型并且与记录具有相同的顺序。

您的对象[] 应如下所示:

new Object[]{
    new Object[]{row1col1, row2col1, /*..., */ rowNcol1},
    new Object[]{row1col2, row2col2, /*..., */ rowNcol2},
    /* column 3 to column N-1 values */
    new Object[]{row1colN, row2colN, /*..., */ rowNcolN}
}

您的 ks() 方法调用应如下所示:

conn.ks(".u.upd", "test", new Object[]{ /*.... */});