blob: cd6cce70c7f5f28a91d17b96263add5949b20064 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hive.testutils.jdbc;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveBurnInClient {
private static final String driverName = "org.apache.hive.jdbc.HiveDriver";
//default 80k (runs slightly over 1 day long)
private static final int NUM_QUERY_ITERATIONS = 80000;
/**
* Creates 2 tables to query from
*
* @param num
*/
public static void createTables(Connection con) throws SQLException {
Statement stmt = con.createStatement();
String tableName = "table1";
String sql = "drop table if exists " + tableName;
executeQuery(stmt, sql, false);
sql = "create table " + tableName + " (key int, value string)";
executeQuery(stmt, sql, false);
// load data into table
// NOTE: filepath has to be local to the hive server
String filepath = "./examples/files/kv1.txt";
sql = "load data local inpath '" + filepath + "' into table " + tableName;
executeQuery(stmt, sql, false);
tableName = "table2";
sql = "drop table if exists " + tableName;
executeQuery(stmt, sql, false);
sql = "create table " + tableName + " (key int, value string)";
executeQuery(stmt, sql, false);
filepath = "./examples/files/kv2.txt";
sql = "load data local inpath '" + filepath + "' into table " + tableName;
executeQuery(stmt, sql, false);
}
private static void executeQuery(Statement stmt, String sql, boolean resultSet) throws SQLException{
System.out.println("Running: " + sql);
long startTime = System.currentTimeMillis();
if (resultSet){
ResultSet res = stmt.executeQuery(sql);
while (res.next()){
res.getString(1);
}
}
else {
stmt.execute(sql);
}
long endTime = System.currentTimeMillis();
long msElapsedTime = endTime - startTime;
System.out.printf("Time taken for query = %d ms \n", msElapsedTime);
}
/**
* @param con
* @param numberOfQueryIterations
* @throws SQLException
*/
public static void runQueries(Connection con, int numberOfQueryIterations) throws SQLException {
Statement stmt = con.createStatement();
for (int i = 0; i < numberOfQueryIterations; i++) {
System.out.println("Iteration #" + i);
// select query
String sql = "from table1 SELECT * group by table1.key order by table1.key desc";
executeQuery(stmt, sql, true);
// count query
sql = "select count(*) from table1";
executeQuery(stmt, sql, true);
// join with group-by, having, order-by
sql = "select t1.key,count(t1.key) as cnt from table1 t1"
+ " join table2 t2 on (t1.key = t2.key) group by t1.key having cnt > 5 order by cnt desc";
executeQuery(stmt, sql, true);
// full outer join
sql = "select table1.value, table2.value from table1 full outer join table2 "
+ "on (table1.key = table2.key)";
executeQuery(stmt, sql, true);
}
}
/**
* @param args
* @throws SQLException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName(driverName);
int numberOfQueryIterations = NUM_QUERY_ITERATIONS;
if (args.length > 0) {
numberOfQueryIterations = Integer.parseInt(args[0]);
}
if (numberOfQueryIterations < 0) {
numberOfQueryIterations = NUM_QUERY_ITERATIONS;
}
Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
createTables(con);
runQueries(con, numberOfQueryIterations);
}
}