Hive - 修改表



本章解釋如何更改表的屬性,例如更改表名、更改列名、新增列以及刪除或替換列。

Alter Table 語句

它用於在 Hive 中修改表。

語法

根據我們希望修改表中的哪些屬性,該語句採用以下任意語法。

ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])

Rename To… 語句

以下查詢將表名從employee重新命名為emp

hive> ALTER TABLE employee RENAME TO emp;

JDBC 程式

重命名錶的 JDBC 程式如下所示。

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet; 
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveAlterRenameTo {
   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
   
   public static void main(String[] args) throws SQLException {
   
      // Register driver and create driver instance
      Class.forName(driverName);
      
      // get connection
      Connection con = DriverManager.getConnection("jdbc:hive://:10000/userdb", "", "");
      
      // create statement
      Statement stmt = con.createStatement();
      
      // execute statement
      stmt.executeQuery("ALTER TABLE employee RENAME TO emp;");
      System.out.println("Table Renamed Successfully");
      con.close();
   }
}

將程式儲存在名為 HiveAlterRenameTo.java 的檔案中。使用以下命令編譯並執行此程式。

$ javac HiveAlterRenameTo.java
$ java HiveAlterRenameTo

輸出

Table renamed successfully.

Change 語句

下表包含employee表的欄位,並顯示要更改的欄位(以粗體顯示)。

欄位名 轉換自資料型別 更改欄位名 轉換到資料型別
eid int eid int
name String ename String
salary Float salary Double
designation String designation String

以下查詢使用上述資料重新命名列名和列資料型別

hive> ALTER TABLE employee CHANGE name ename String;
hive> ALTER TABLE employee CHANGE salary salary Double;

JDBC 程式

以下是更改列的 JDBC 程式。

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveAlterChangeColumn {
   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
   
   public static void main(String[] args) throws SQLException {
   
      // Register driver and create driver instance
      Class.forName(driverName);
      
      // get connection
      Connection con = DriverManager.getConnection("jdbc:hive://:10000/userdb", "", "");
      
      // create statement
      Statement stmt = con.createStatement();
      
      // execute statement
      stmt.executeQuery("ALTER TABLE employee CHANGE name ename String;");
      stmt.executeQuery("ALTER TABLE employee CHANGE salary salary Double;");
      
      System.out.println("Change column successful.");
      con.close();
   }
}

將程式儲存在名為 HiveAlterChangeColumn.java 的檔案中。使用以下命令編譯並執行此程式。

$ javac HiveAlterChangeColumn.java
$ java HiveAlterChangeColumn

輸出

Change column successful.

Add Columns 語句

以下查詢向 employee 表新增一個名為 dept 的列。

hive> ALTER TABLE employee ADD COLUMNS ( 
dept STRING COMMENT 'Department name');

JDBC 程式

以下是向表中新增列的 JDBC 程式。

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveAlterAddColumn {
   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
   
   public static void main(String[] args) throws SQLException {
   
      // Register driver and create driver instance
      Class.forName(driverName);

      // get connection
      Connection con = DriverManager.getConnection("jdbc:hive://:10000/userdb", "", "");

      // create statement
      Statement stmt = con.createStatement();
      
      // execute statement
      stmt.executeQuery("ALTER TABLE employee ADD COLUMNS " + " (dept STRING COMMENT 'Department name');");
      System.out.prinln("Add column successful.");
      
      con.close();
   }
}

將程式儲存在名為 HiveAlterAddColumn.java 的檔案中。使用以下命令編譯並執行此程式。

$ javac HiveAlterAddColumn.java
$ java HiveAlterAddColumn

輸出

Add column successful.

Replace 語句

以下查詢刪除employee表中的所有列,並將其替換為empname

hive> ALTER TABLE employee REPLACE COLUMNS ( 
eid INT empid Int, 
ename STRING name String);

JDBC 程式

以下是將eid列替換為empid,將ename列替換為name的JDBC程式。

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveAlterReplaceColumn {

   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
   
   public static void main(String[] args) throws SQLException {
   
      // Register driver and create driver instance
      Class.forName(driverName);
      
      // get connection
      Connection con = DriverManager.getConnection("jdbc:hive://:10000/userdb", "", "");
      
      // create statement
      Statement stmt = con.createStatement();
      
      // execute statement
      stmt.executeQuery("ALTER TABLE employee REPLACE COLUMNS "
         +" (eid INT empid Int,"
         +" ename STRING name String);");
         
      System.out.println(" Replace column successful");
      con.close();
   }
}

將程式儲存在名為 HiveAlterReplaceColumn.java 的檔案中。使用以下命令編譯並執行此程式。

$ javac HiveAlterReplaceColumn.java
$ java HiveAlterReplaceColumn

輸出

Replace column successful.
廣告
© . All rights reserved.