通过JDBC方式实现查询HetuEngine SQL任务
功能简介
import io.XXX.jdbc.XXXResultSet; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.Properties; import java.util.Timer; import java.util.TimerTask; public class JDBCExampleStatementProgressPercentage{ private static Properties properties = new Properties(); public static Connection connection = null; public static ResultSet result = null; public static PreparedStatement statement = null; private static void init() throws ClassNotFoundException { properties.setProperty("user", "YourUserName"); properties.setProperty("SSL", "false"); Class.forName("io.XXX.jdbc.XXXDriver"); } /** * Program entry * * @param args no need program parameter */ public static void main(String[] args) { String url = "jdbc:XXX://192.168.1.130:29861,192.168.1.131:29861/hive/default?serviceDiscoveryMode=hsbroker"; try { init(); String sql = "show tables"; connection = DriverManager.getConnection(url, properties); statement = connection.prepareStatement(sql.trim()); result = statement.executeQuery(); XXXResultSet rs = (XXXResultSet) result; new Thread() { public void run() { Timer timer = new Timer(); //表示在3秒之后开始执行,并且每2秒执行一次 timer.schedule(new TimerTask() { @Override public void run() { double statementProgressPercentage = rs.getProgressPercentage().orElse(0.0); System.out.println("The Current Query Progress Percentage is " + statementProgressPercentage*100 + "%"); if("FINISHED".equals(rs.getStatementStatus().orElse(""))) { System.out.println("The Current Query Progress Percentage is 100%"); timer.cancel(); Thread.currentThread().interrupt(); } } }, 3000, 2000); } }.start(); ResultSetMetaData resultMetaData = result.getMetaData(); int colNum = resultMetaData.getColumnCount(); for (int j = 1; j <= colNum; j++) { try { System.out.print(resultMetaData.getColumnLabel(j) + "\t"); } catch (SQLException throwables) { throwables.printStackTrace(); } } while (result.next()) { for (int j = 1; j <= colNum; j++) { System.out.print(result.getString(j) + "\t"); } System.out.println(); } } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } finally { if (result != null) { try { result.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
上述代码中各参数说明如表1所示:
参数名称 |
参数说明 |
---|---|
url |
jdbc:XXX://HSBroker1_IP:HSBroker1_Port,HSBroker2_IP:HSBroker2_Port,HSBroker3_IP:HSBroker3_Port/catalog/schema?serviceDiscoveryMode=hsbroker |
user |
访问HetuServer的用户名,即在集群中创建的“人机”用户的用户名。 |
SSL |
是否使用HTTPS连接,默认为“false”。 |
getStatementStatus() |
返回当前SQL执行语句的执行状态,一共十一种状态:‘RUNNING’, ‘FAILED’, ‘FINISHED’, ‘QUEUED’, ‘WAITING_FOR_RESOURCES’, ‘DISPATCHING’, ‘PLANNING’, ‘STARTING’, ‘RESCHEDULING’, ‘RESUMING’, ‘FINISHING’。 |
getProgressPercentage() |
返回当前SQL执行语句的执行进度,取值范围为【0-1】。 |