AutoFitTableAppender

AutoFitTableAppender 用于向目标表中写入数据。

构造方法

AutoFitTableAppender(String dbUrl, String tableName, DBConnection conn)

参数介绍

dbUrl String 类型,表示分布式数据库地址。若填为空字符串,则表示内存表。

tableName String 类型,表示分布式表名。

conn 表示声明的连接。

action 指定 append 表时的行为。目前仅支持 fitColumnType,表示对列类型进行转换。

示例代码

构造 AutoFitTableAppender:

AutoFitTableAppender appender=new AutoFitTableAppender("dfs://tableAppenderTest", "testAppend", conn, com.xxdb.route.AutoFitTableAppender.APPEND_ACTION.fitColumnType);

方法说明 append

AutoFitTableAppender 可以调用 append 方法写入一张表:

public Entity append(BasicTable table)

参数介绍

table 表示要写入的表。

方法说明

将一个 BasicTable 对象写入到目标表中。

  • 自 3.00.1.1 版本起,将返回插入的行数。
  • 3.00.1.1 之前版本,则返回一个 table:
    • 若为内存表,则返回全表数据。
    • 若为 DFS 表,则返回一个空表。

示例代码

调用 append 方法写入一张表:

ArrayList<String> colName=new ArrayList<>();
colName.add("id");
colName.add("time");
colName.add("data");
BasicTable insertTable = new BasicTable(colName, cols);
AutoFitTableAppender appender=new AutoFitTableAppender("dfs://tableAppenderTest","testAppend",conn);
appender.append(insertTable);

使用示例

下例为使用 AutoFitTableAppender 向一张表中添加数据(重点为 40-42 行)。

// 连接
DBConnection conn = new DBConnection();
conn.connect("192.168.0.68", 8848, "admin", "123456");

// 准备要写入的表
int size=100000;
int[] id=new int[size];
double[] data=new double[size];
BasicTimestampVector timeVector=new BasicTimestampVector(size);
Random rand=new Random();
for(int i=0;i<size;++i){
    LocalDateTime dt=LocalDateTime.now();
    timeVector.setTimestamp(i,dt);
    id[i]= rand.nextInt();
    data[i]=rand.nextDouble();
}
BasicIntVector idVector=new BasicIntVector(id);
BasicDoubleVector dataVector=new BasicDoubleVector(data);
ArrayList<Vector> cols=new ArrayList<>();
cols.add(idVector);
cols.add(timeVector);
cols.add(dataVector);
ArrayList<String> colName=new ArrayList<>();
colName.add("id");
colName.add("time");
colName.add("data");
BasicTable insertTable = new BasicTable(colName, cols);

// 先创建一张表
conn.run("\n" +
        "login(`admin,`123456)\n" +
        "dbPath = \"dfs://autoFitTableAppenderTest\"\n" +
        "if(existsDatabase(dbPath))\n" +
        "dropDatabase(dbPath)\n" +
        "t = table(100:0,`id`time`data,[INT,TIME,DOUBLE])\n" +
        "db=database(dbPath,HASH, [INT,10])\n" +
        "pt = db.createPartitionedTable(t,`testAppend,`id)");
        
// 创建 AutoFitTableAppender 并写入表
AutoFitTableAppender appender=new AutoFitTableAppender("dfs://autoFitTableAppenderTest","testAppend",conn);
appender.append(insertTable);
Entity assertRet= conn.run("exec count(*) from loadTable(\"dfs://autoFitTableAppenderTest\", \"testAppend\")");

// 获取写入的行数
String ret=assertRet.getString();
System.out.println(ret);

代码运行结果:

100000