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