亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive的基本操作有哪些

發布時間:2021-12-10 10:35:58 來源:億速云 閱讀:128 作者:小新 欄目:云計算

小編給大家分享一下Hive的基本操作有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一:首先,配置好連接Hive的Properties,創建hivedb.properties 如下:

driver=org.apache.hive.jdbc.HiveDriver
url=jdbc:hive2://master:10000/default
user=hive
password=xujun

二:創建HiveProperties,繼承自Properties,讀取hivedb.properties(單例)

public class HiveProperties extends Properties {
	/**
	 * @author Berg
	 * 讀取hivedb.properties
	 */
	private static final long serialVersionUID = 1L;
	
	private static HiveProperties hiveProperties; 

	private HiveProperties(){
		InputStream iis = HiveProperties.class.getClassLoader().getResourceAsStream("hivedb.properties");
		try{
			super.load(  iis );
		}catch(IOException e ){
			e.printStackTrace();
		}
	}

	public static HiveProperties getInstance(){
		if( hiveProperties == null){
			hiveProperties = new HiveProperties();
		}
		return hiveProperties;
	}
}

三:創建HiveUtil,對Hive中的基本操作進行簡單封裝:

        注意:導入數據的時候,可以從本地文件導入數據,也可以從HDFS上導入數據,

                     區別是:如果導入的是HDFS數據,則不需要local關鍵字

public class HiveUtil {

	//讀取一次驅動  靜態塊
	static{
		try {
			Class.forName(HiveProperties.getInstance().getProperty("driver"));
		}catch(ClassNotFoundException e){
			e.printStackTrace(); //輸出至標準錯誤流。
		}
	}

	//獲取HiveConnection
	public Connection getConn() throws SQLException{
		HiveProperties hp = HiveProperties.getInstance();
		Connection conn = DriverManager.getConnection(hp.getProperty("url"), 
				hp.getProperty("user"),  hp.getProperty("password") );
		return conn;

	}

	//創建表:
	public boolean createTable(Statement statement,String sql) throws SQLException{
		/**
		 * 如果第一個結果為 ResultSet 對象,則返回 true
		 * 	如果其為更新計數或者不存在任何結果,則返回 false
		 * 		因為 create 語法不屬于DML, 所以執行create sql語句后將返回false。	
		 * 			看起來還是有點缺陷。 
		 */
		boolean result = statement.execute(sql);
		if( !result ){
			return true;
		}else{
			return false;
		}
	}

	//判斷表是否存在
	public boolean tableIsExists(Statement statement, String tableName) throws SQLException{
		String sql = "show tables '" + tableName + "'";
		ResultSet rs = statement.executeQuery(sql);  
		if (rs.next()) {  
			return true;  
		}else{
			return false;
		}
	}

	//刪除某張表:
	public boolean dropTable(Statement statement,String tableName) throws SQLException {
		String sql = "drop table " + tableName;
		boolean result = statement.execute(sql);
		if( !result ){
			return true;
		}else{
			return false;
		}
	}

	//顯示某張表或顯示所有的表
	public ResultSet showTables(Statement statement, String tableName) throws SQLException{
		String sql = "";
		if(tableName==null||tableName.equals(null)){
			sql = "show tables";
		}else{
			sql = "show tables '" + tableName + "'";
		}
		ResultSet rs = statement.executeQuery(sql);
		return rs;
	}

	//對表的描述:
	public ResultSet describeTable(Statement statement, String tableName) throws SQLException   {
		String sql = "describe " + tableName;
		ResultSet rs = statement.executeQuery(sql);
		return rs;
	}

	/**
	 *通過文件方式,將文件中數據插入到表中:加載本地本劍數據。
	 * @throws SQLException 
	 * @filePath: 文件路徑,  比如: /home/hadoop/mytestdata/hive.txt
	 * 		注意此路徑在虛擬機下。。。
	 * */
	//通過文件方式,將文件中數據插入到表中:加載本地本劍數據。
	public boolean loadDataFromLocal(Statement statement, String tableName,String filePath) throws SQLException {
		String sql = "load data local inpath '" + filePath + "' into table " + tableName;
		boolean result = statement.execute(sql);
		if( !result ){
			return true;
		}else{
			return false;
		}
	}

	//通過文件方式,將文件中數據插入到表中:加載本地本劍數據。
	public boolean loadDataFromHDFS(Statement statement, String tableName,String filePath) throws SQLException {
		String sql = "load data inpath '" + filePath + "' into table " + tableName;
		boolean result = statement.execute(sql);
		if( !result ){
			return true;
		}else{
			return false;
		}
	}

	//查詢表中的數據:
	public ResultSet selectData(Statement statement, String tableName) throws SQLException  {
		String sql = "select * from " + tableName;
		ResultSet rs =  statement.executeQuery(sql);
		return rs;
	}

	//統計表中數據:
	public ResultSet countData(Statement statement, String sql) throws SQLException{
		ResultSet rs = statement.executeQuery(sql);
		return rs;
	}

	//關閉連接:
	public void  close(Connection conn,Statement statement) throws SQLException{
		if (conn != null) {  
			conn.close();  
			conn = null;  
		}  
		if (statement != null) {  
			statement.close();  
			statement = null;  
		}
	}
}

四:對基本操作的測試,如下創建TestMain:

public class TestMain {

	private HiveUtil hu = new HiveUtil();
	private Connection conn = null;
	private Statement statement;
	//1.測試連接
	@Test
	public void testConn() throws SQLException{
		conn = hu.getConn();  
		System.out.println( "獲取連接為: "+ conn );
	}

	//2.創建表:
	@Test
	public void testCreateTable() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		String sql =  "create table " + tableName + " (key int, value string)  row format delimited fields terminated by '\t'";
		boolean result = hu.createTable(statement, sql);
		if( result ){
			System.out.println( "創建表成功。" + result  );
		}else{
			System.out.println( "創建表失敗。" + result );
		}
	}

	//3.判斷表是否存在
	@Test
	public void testTableIsExists() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		boolean result = hu.tableIsExists(statement, tableName);
		if(result){
			System.out.println( "表已經存在。" );
		}else{
			System.out.println( "表不存在,請新建表。");
		}
	}

	//4.刪除表:刪除表之前先判斷表是否存在。
	@Test
	public void testDropTable() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		boolean result = hu.tableIsExists(statement, tableName);
		if(result){
			System.out.println( "表已經存在,開始刪除這張表: " );
			result = hu.dropTable(statement, tableName);
			if( result ){
				System.out.println( "刪除表成功。");
			}else{
				System.out.println( "刪除表失敗。");
			}
		}else{
			System.out.println( "表不存在,請新建表。");
		}
	}

	//5.顯示所有的表
	@Test
	public void testShowTables() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		ResultSet rs = hu.showTables(statement, tableName);
		while( rs.next() ){
			System.out.println( "表名為: "+ rs.getString(1));
		}
	}
	
	//6.對表的描述
	@Test
	public void testDescribeTable() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		//首先判斷張表是否存在:
		boolean result = hu.tableIsExists(statement, tableName);
		if( result ){
			//表示表已經存在:
			ResultSet rs = hu.describeTable(statement, tableName);
			while( rs.next() ){
				System.out.println( rs.getString(1) );
			}
		}else{
			System.out.println( "Error: 表不存在,不能對表描述。");
		}
	}

	//7.導入數據:  local 和 hdfs 
	@Test
	public void testLoadData() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		//String localFilePath = "/home/hadoop/mytestdata/hive.txt";  
		String hdfsFilePath = "hdfs://master:9000/user/hive/hive.txt";  
		//首先判斷張表是否存在:
		boolean result = hu.tableIsExists(statement, tableName);
		if( result ){
			//表示表已經存在:
			//加載導入本地數據
			//result = hu.loadDataFromLocal(statement, tableName, localFilePath);
			//加載導入HDFS上文件數據
			result = hu.loadDataFromHDFS(statement, tableName, hdfsFilePath);
			if( result ){
				System.out.println( "成功將本地文件數據導入到表" + tableName + "中" );
			}else{
				System.out.println(  " 導入失敗 。");
			}
		}else{
			System.out.println( "Error: 表不存在,不能對表導入文件數據。");
		}
	}


	//8.查詢表中的數據:
	@Test
	public void testSelectData() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		//首先判斷張表是否存在:
		boolean result = hu.tableIsExists(statement, tableName);
		if( result ){
			//表示表已經存在:
			ResultSet rs = hu.selectData(statement, tableName);
			while( rs.next() ){
				System.out.println( rs.getString(1) +"\t"+ rs.getString(2) );
			}
		}else{
			System.out.println( "Error: 表不存在,不能對表導入文件數據。");
		}
	}


	//9.統計表中的數據:
	@Test
	public void testCountData() throws SQLException{
		conn = hu.getConn();
		statement = conn.createStatement();
		String tableName = "testhive";
		//首先判斷張表是否存在:
		boolean result = hu.tableIsExists(statement, tableName);
		if( result ){
			//表示表已經存在:
			String sql = "select count(1) from " + tableName; 
			ResultSet rs = hu.countData(statement, sql);
			System.out.println(  rs );
			while( rs.next() ){
				System.out.println( "當前記錄數據量為: " + rs.getString(1)  );
			}
		}else{
			System.out.println( "Error: 表不存在,不能統計數據。");
		}
	}
	
}

5.測試數據:(以Tab隔開。)

1	Berg
1	Berg
2	Cccc
3	Xxxx
4	Jjjj

當然 ,也可創建Maven 的依賴,我的如下:

<dependencies>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.6.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>
                        pentaho-aggdesigner-algorithm
                    </artifactId>
                    <groupId>org.pentaho</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.5</version>
        </dependency>

    </dependencies>

以上是“Hive的基本操作有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遂平县| 永善县| 华蓥市| 尉犁县| 寿阳县| 介休市| 新余市| 常熟市| 白银市| 策勒县| 三门峡市| 武冈市| 大余县| 尼勒克县| 泰宁县| 隆回县| 木里| 漳州市| 哈巴河县| 湖南省| 湟中县| 桦南县| 隆安县| 三亚市| 大洼县| 浙江省| 兰溪市| 邻水| 阳山县| 普兰县| 万山特区| 资源县| 焦作市| 江西省| 枣强县| 盐池县| 宾川县| 东阿县| 格尔木市| 古丈县| 宁阳县|