Hive - Create Table&Drop Table & ALTER Table(中)
Posted iMhager的学习小站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive - Create Table&Drop Table & ALTER Table(中)相关的知识,希望对你有一定的参考价值。
译注:书接上篇,了解过创建表以及load data后,假如发现需要更改表字段类型或者添加表字段,怎么办?这篇文章将进一步了解具体细节。
This chapter explains how to alter the attributes of a table such as changing its table name, changing column names, adding columns, and deleting or replacing columns.
Alter Table Statement
It is used to alter a table in Hive.
Syntax
The statement takes any of the following syntaxes based on what attributes we wish to modify in a table.
ALTER TABLE name RENAME TO new_name ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...]) ALTER TABLE name DROP [COLUMN] column_name ------------ 译注:这个drop命令,我在工作中,并没有生效,而是利用表级别的REPLACE进行替换式删除字段的 ALTER TABLE name CHANGE column_name new_name new_type ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
Rename To… Statement
The following query renames the table from employee to emp.
hive> ALTER TABLE employee RENAME TO emp;
JDBC Program
The JDBC program to rename a table is as follows.
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(); } }
Save the program in a file named HiveAlterRenameTo.java. Use the following commands to compile and execute this program.
$ javac HiveAlterRenameTo.java
$ java HiveAlterRenameTo
Output:
Table renamed successfully.
Change Statement
The following table contains the fields of employee table and it shows the fields to be changed (in bold).
Field Name | Convert from Data Type | Change Field Name | Convert to Data Type |
---|---|---|---|
eid | int | eid | int |
name | String | ename | String |
salary | Float | salary | Double |
designation | String | designation | String |
The following queries rename the column name and column data type using the above data:
hive> ALTER TABLE employee CHANGE name ename String; hive> ALTER TABLE employee CHANGE salary salary Double;
JDBC Program
Given below is the JDBC program to change a column.
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(); } }
Save the program in a file named HiveAlterChangeColumn.java. Use the following commands to compile and execute this program.
$ javac HiveAlterChangeColumn.java
$ java HiveAlterChangeColumn
Output:
Change column successful.
Add Columns Statement
The following query adds a column named dept to the employee table.
hive> ALTER TABLE employee ADD COLUMNS (dept STRING COMMENT \'Department name\');
-- 有一些文章里说 add columns dept STRING COMMENT \'comment\' ;但是在一些高版本里,需要把你需要加的列放到括号里()
JDBC Program
The JDBC program to add a column to a table is given below.
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(); } }
Save the program in a file named HiveAlterAddColumn.java. Use the following commands to compile and execute this program.
$ javac HiveAlterAddColumn.java
$ java HiveAlterAddColumn
Output:
Add column successful.
Replace Statement
The following query deletes all the columns from the employee table and replaces it with emp and name columns:
hive> ALTER TABLE employee REPLACE COLUMNS ( eid INT empid Int, ename STRING name String);
JDBC Program
Given below is the JDBC program to replace eid column with empid and ename column with name.
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(); } }
Save the program in a file named HiveAlterReplaceColumn.java. Use the following commands to compile and execute this program.
$ javac HiveAlterReplaceColumn.java
$ java HiveAlterReplaceColumn
Output:
Replace column successful.
Drop Table主要就一个命令,就不单独再搞一篇了,在此一并搞了。
--------------------------------------------------
Drop Table Statement
The syntax is as follows:
DROP TABLE [IF EXISTS] table_name;
The following query drops a table named employee:
hive> DROP TABLE IF EXISTS employee;
On successful execution of the query, you get to see the following response:
OK
Time taken: 5.3 seconds
hive>
---------------------------------------------------
译注:本章中一些操作,我个人并没有一一验证。后续使用到并验证后,如果有问题,会备注进去。目前里面的内容基本都是英文文章里的内容。
------------
英文地址:https://www.tutorialspoint.com/hive/hive_alter_table.htm
以上是关于Hive - Create Table&Drop Table & ALTER Table(中)的主要内容,如果未能解决你的问题,请参考以下文章
使用 --create-hive-table 直接在 hive 中导入 mysql 表 (sqoop)
CREATE Hive TABLE (AS SELECT) 需要 Hive 支持
使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符
如何使用 sqoop import-mainframe --create-hive-table 命令定义 hive 表结构