1. 程式人生 > >java jdbc 操作 hive 建表 load 資料

java jdbc 操作 hive 建表 load 資料

 // 需要引入 hadoop & hive  jar 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
*   演示了通過java jdbc 操作hive  ,一般企業環境不會這麼做 ,hive 目的是去java 程式設計能力
*   京東等企業是通過shell or python  封裝 hive -e sql 命令進行資料操作 
*   需要在hive 節點啟動 hive --service hiveserver2&
**/
 
public class HiveApp {
     
    private static String driver = "org.apache.hive.jdbc.HiveDriver";
    private static String url = "jdbc:hive2://Master:10000/default";
    private static String user = "root"; //一般情況下可以使用匿名的方式,在這裡使用了root是因為整個Hive的所有安裝等操作都是root
    private static String password = "";
 
    public static void main(String[] args) {
        ResultSet res = null;
         
        try {
            /**
             * 第一步:把JDBC驅動通過反射的方式載入進來
             */
            Class.forName(driver);
             
            /**
             * 第二步:通過JDBC建立和Hive的聯結器,預設埠是10000,預設使用者名稱和密碼都為空
             */
            Connection conn = DriverManager.getConnection(url, user, password); 
             
            /**
             * 第三步:建立Statement控制代碼,基於該控制代碼進行SQL的各種操作;
             */
            Statement stmt = conn.createStatement();
             
            /**
             * 接下來就是SQL的各種操作;
             * 第4.1步驟:建表Table,如果已經存在的話就要首先刪除;
             */
            String tableName = "testHiveDriverTable";
            stmt.execute("drop table if exists " + tableName );
            
             
            stmt.execute("create table " + tableName + " (id int, name string)" + "ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'");
            /**
             *  第4.2步驟:查詢建立的Table;
             */
            String sql = "show tables '" + tableName + "'";
            System.out.println("Running: " + sql);
            res = stmt.executeQuery(sql);
            if (res.next()) {
              System.out.println(res.getString(1));
            }
            /**
             *  第4.3步驟:查詢建立的Table的schema;
             */
            sql = "describe " + tableName;
            System.out.println("Running: " + sql);
            res = stmt.executeQuery(sql);
            while (res.next()) {
              System.out.println(res.getString(1) + "\t" + res.getString(2));
            }
          
            /**
             *  第4.4步驟:載入資料進入Hive中的Table;
             */
            String filepath = "/root/Documents/data/sql/testHiveDriver.txt";
            sql = "load data local inpath '" + filepath + "' into table " + tableName;
            System.out.println("Running: " + sql);
            stmt.execute(sql);
          
            /**
             *  第4.5步驟:查詢進入Hive中的Table的資料;
             */
            sql = "select * from " + tableName;
            System.out.println("Running: " + sql);
            res = stmt.executeQuery(sql);
            while (res.next()) {
              System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
            }
          
            /**
             *  第4.6步驟:Hive中的對Table進行統計操作;
             */
            sql = "select count(1) from " + tableName;   //在執行select count(*) 時候會生成mapreduce 操作  ,那麼需要啟動資源管理器 yarn  : start-yarn.sh 
            System.out.println("Running: " + sql);
            res = stmt.executeQuery(sql);
           
            while (res.next()) {
              System.out.println("Total lines :" + res.getString(1));
            }    
             
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
         
         
 
    }
 
}