zoukankan      html  css  js  c++  java
  • 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://localhost: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://localhost: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.
    

    添加列语句

    下面的查询增加了一个列名dept在employee表。

    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://localhost: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表中查询删除的所有列,并使用emp替换列:

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

    JDBC 程序

    下面给出的是JDBC程序使用empid代替eid列,name代替ename列。

    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://localhost: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.


    参考链接:http://www.yiibai.com/hive/hive_alter_table.html
     
  • 相关阅读:
    EasyRMS录播管理服务器项目实战:windows上开机自启动NodeJS服务
    EasyPlayer RTSP Windows(with ActiveX/OCX插件)播放器支持H.265播放与抓图功能
    EasyPlayer RTSP Windows(with ActiveX/OCX插件)播放器支持H.265播放与抓图功能
    将EasyRTMP_RTSP移植到Android平台实现的RTSP拉流转推RTMP直播流功能
    将EasyRTMP_RTSP移植到Android平台实现的RTSP拉流转推RTMP直播流功能
    EasyDarwin如何支持点播和RTMP/HLS直播?EasyDSS!
    EasyDarwin如何支持点播和RTMP/HLS直播?EasyDSS!
    EasyCMS在幼儿园视频直播项目实战中以redis操作池的方式应对高并发的redis操作问题
    EasyCMS在幼儿园视频直播项目实战中以redis操作池的方式应对高并发的redis操作问题
    EasyDarwin开源流媒体服务器中一种实现对作用域内new对象自动释放的方法(值得借鉴)
  • 原文地址:https://www.cnblogs.com/xiohao/p/6403539.html
Copyright © 2011-2022 走看看