/** * 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); } }