206 lines
8.3 KiB
Java
206 lines
8.3 KiB
Java
import java.sql.*;
|
|
|
|
public class TSDBSyncSample {
|
|
private static final String JDBC_PROTOCAL = "jdbc:TAOS://";
|
|
private static final String TSDB_DRIVER = "com.taosdata.jdbc.TSDBDriver";
|
|
|
|
private String host = "127.0.0.1";
|
|
private String user = "root";
|
|
private String password = "taosdata";
|
|
private int port = 0;
|
|
private String jdbcUrl = "";
|
|
|
|
private String databaseName = "db";
|
|
private String metricsName = "mt";
|
|
private String tablePrefix = "t";
|
|
|
|
private int tablesCount = 1;
|
|
private int loopCount = 2;
|
|
private int batchSize = 10;
|
|
private long beginTimestamp = 1519833600000L;
|
|
|
|
private long rowsInserted = 0;
|
|
|
|
static {
|
|
try {
|
|
Class.forName(TSDB_DRIVER);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param args
|
|
*/
|
|
public static void main(String[] args) {
|
|
TSDBSyncSample tester = new TSDBSyncSample();
|
|
tester.doReadArgument(args);
|
|
|
|
System.out.println("---------------------------------------------------------------");
|
|
System.out.println("Start testing...");
|
|
System.out.println("---------------------------------------------------------------");
|
|
|
|
tester.doMakeJdbcUrl();
|
|
tester.doCreateDbAndTable();
|
|
tester.doExecuteInsert();
|
|
tester.doExecuteQuery();
|
|
|
|
System.out.println("\n---------------------------------------------------------------");
|
|
System.out.println("Stop testing...");
|
|
System.out.println("---------------------------------------------------------------");
|
|
}
|
|
|
|
private void doReadArgument(String[] args) {
|
|
System.out.println("Arguments format: host tables loop batchs");
|
|
if (args.length >= 1) {
|
|
this.host = args[0];
|
|
}
|
|
|
|
if (args.length >= 2) {
|
|
this.tablesCount = Integer.parseInt(args[1]);
|
|
}
|
|
|
|
if (args.length >= 3) {
|
|
this.loopCount = Integer.parseInt(args[2]);
|
|
}
|
|
|
|
if (args.length >= 4) {
|
|
this.batchSize = Integer.parseInt(args[3]);
|
|
}
|
|
}
|
|
|
|
private void doMakeJdbcUrl() {
|
|
// jdbc:TSDB://127.0.0.1:0/dbname?user=root&password=taosdata
|
|
System.out.println("\nJDBC URL to use:");
|
|
this.jdbcUrl = String.format("%s%s:%d/%s?user=%s&password=%s", JDBC_PROTOCAL, this.host, this.port, "",
|
|
this.user, this.password);
|
|
System.out.println(this.jdbcUrl);
|
|
}
|
|
|
|
private void doCreateDbAndTable() {
|
|
System.out.println("\n---------------------------------------------------------------");
|
|
System.out.println("Start creating databases and tables...");
|
|
String sql = "";
|
|
try (Connection conn = DriverManager.getConnection(jdbcUrl);
|
|
Statement stmt = conn.createStatement()){
|
|
|
|
sql = "create database if not exists " + this.databaseName;
|
|
stmt.executeUpdate(sql);
|
|
System.out.printf("Successfully executed: %s\n", sql);
|
|
|
|
sql = "use " + this.databaseName;
|
|
stmt.executeUpdate(sql);
|
|
System.out.printf("Successfully executed: %s\n", sql);
|
|
|
|
sql = "create table if not exists " + this.metricsName + " (ts timestamp, v1 int) tags(t1 int)";
|
|
stmt.executeUpdate(sql);
|
|
System.out.printf("Successfully executed: %s\n", sql);
|
|
|
|
for (int i = 0; i < this.tablesCount; i++) {
|
|
sql = String.format("create table if not exists %s%d using %s tags(%d)", this.tablePrefix, i,
|
|
this.metricsName, i);
|
|
stmt.executeUpdate(sql);
|
|
System.out.printf("Successfully executed: %s\n", sql);
|
|
}
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
System.out.printf("Failed to execute SQL: %s\n", sql);
|
|
System.exit(4);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
System.exit(4);
|
|
}
|
|
System.out.println("Successfully created databases and tables");
|
|
}
|
|
|
|
public void doExecuteInsert() {
|
|
System.out.println("\n---------------------------------------------------------------");
|
|
System.out.println("Start inserting data...");
|
|
int start = (int) System.currentTimeMillis();
|
|
StringBuilder sql = new StringBuilder("");
|
|
try (Connection conn = DriverManager.getConnection(jdbcUrl);
|
|
Statement stmt = conn.createStatement()){
|
|
stmt.executeUpdate("use " + databaseName);
|
|
for (int loop = 0; loop < this.loopCount; loop++) {
|
|
for (int table = 0; table < this.tablesCount; ++table) {
|
|
sql = new StringBuilder("insert into ");
|
|
sql.append(this.tablePrefix).append(table).append(" values");
|
|
for (int batch = 0; batch < this.batchSize; ++batch) {
|
|
int rows = loop * this.batchSize + batch;
|
|
sql.append("(").append(this.beginTimestamp + rows).append(",").append(rows).append(")");
|
|
}
|
|
int affectRows = stmt.executeUpdate(sql.toString());
|
|
this.rowsInserted += affectRows;
|
|
}
|
|
}
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
System.out.printf("Failed to execute SQL: %s\n", sql.toString());
|
|
System.exit(4);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
System.exit(4);
|
|
}
|
|
int end = (int) System.currentTimeMillis();
|
|
System.out.println("Inserting completed!");
|
|
System.out.printf("Total %d rows inserted, %d rows failed, time spend %d seconds.\n", this.rowsInserted,
|
|
this.loopCount * this.batchSize - this.rowsInserted, (end - start) / 1000);
|
|
}
|
|
|
|
public void doExecuteQuery() {
|
|
System.out.println("\n---------------------------------------------------------------");
|
|
System.out.println("Starting querying data...");
|
|
ResultSet resSet = null;
|
|
StringBuilder sql = new StringBuilder("");
|
|
StringBuilder resRow = new StringBuilder("");
|
|
try (Connection conn = DriverManager.getConnection(jdbcUrl);
|
|
Statement stmt = conn.createStatement()){
|
|
stmt.executeUpdate("use " + databaseName);
|
|
for (int i = 0; i < this.tablesCount; ++i) {
|
|
sql = new StringBuilder("select * from ").append(this.tablePrefix).append(i);
|
|
|
|
resSet = stmt.executeQuery(sql.toString());
|
|
if (resSet == null) {
|
|
System.out.println(sql + " failed");
|
|
System.exit(4);
|
|
}
|
|
|
|
ResultSetMetaData metaData = resSet.getMetaData();
|
|
System.out.println("Retrieve metadata of " + tablePrefix + i);
|
|
for (int column = 1; column <= metaData.getColumnCount(); ++column) {
|
|
System.out.printf("Column%d: name = %s, type = %d, type name = %s, display size = %d\n", column, metaData.getColumnName(column), metaData.getColumnType(column),
|
|
metaData.getColumnTypeName(column), metaData.getColumnDisplaySize(column));
|
|
}
|
|
int rows = 0;
|
|
System.out.println("Retrieve data of " + tablePrefix + i);
|
|
while (resSet.next()) {
|
|
resRow = new StringBuilder();
|
|
for (int col = 1; col <= metaData.getColumnCount(); col++) {
|
|
resRow.append(metaData.getColumnName(col)).append("=").append(resSet.getObject(col))
|
|
.append(" ");
|
|
}
|
|
System.out.println(resRow.toString());
|
|
rows++;
|
|
}
|
|
|
|
try {
|
|
if (resSet != null)
|
|
resSet.close();
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
System.out.printf("Successfully executed query: %s;\nTotal rows returned: %d\n", sql.toString(), rows);
|
|
}
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
System.out.printf("Failed to execute query: %s\n", sql.toString());
|
|
System.exit(4);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
System.exit(4);
|
|
}
|
|
System.out.println("Query completed!");
|
|
}
|
|
|
|
}
|