大数据学习笔记-------------------(23)
2017-04-22 00:00
120 查看
第23章数据表操作
23.1创建数据表
创建数据表和在表中插入数据。HIVE创建数据表的语法和SQL创建数据表非常类似。23.1.1 创建数据表
HIVE创建数据表的语句如下:CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [ROW FORMAT row_format] [STORED AS file_format]
Ø 例子
用create table语法创建一个名为employee的table。在employee的table中的列名与数据类型:
如下数据是一个注释,行格式化字段,如字段终止符、行终止符和存储文件类型:
COMMENT 'Employee details' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED IN TEXT FILE
创建一个包含如上表格数据的数据表,表名为employee:
CREATE TABLE IF NOT EXISTS employee ( eid int, name String, salary String, destination String) COMMENT 'Employee details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
如果添加选项"if not exists",Hive会在表已经存在的情况下忽略语句。一旦创建表成功,会获取到如下响应:
23.1.2 JDBC程序
保存代码到文件HiveCreateTable.java中。用如下命令进行编译和执行代码:import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveCreateTable { 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("CREATE TABLE IF NOT EXISTS " +" employee ( eid int, name String, " +" salary String, destignation String)" +" COMMENT ‘Employee details’" +" ROW FORMAT DELIMITED" +" FIELDS TERMINATED BY ‘\t’" +" LINES TERMINATED BY ‘\n’" +" STORED AS TEXTFILE;"); System.out.println(“ Table employee created.”); con.close(); } }
javac HiveCreateTable.java
java HiveCreateTable
输出:Table employeecreated.
23.2load数据(插入数据)
23.2.1 load data
通常,表创建成功后,用Insert语句插入数据。但是在Hive中,用load data语句插入数据。当把数据插入到Hive时,最好使用load data来存储快记录。load data的方法有两种:一是从本地文件系统、二是从Hadoop文件系统。load data的语法如下:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOCAL:指定本地路径。可选项
OVERWRITE: 覆盖表中的数据。可选项
PARTITION:可选项
Ø 例子
把如下数据插入表中,文本文件的名为sample.txt,该文件在/usr/local路径下。
1201 Gopal 45000 Technical manager 1202 Manisha 45000 Proof reader 1203 Masthanvali 40000 Technical writer 1204 Krian 40000 Hr Admin 1205 Kranthi 30000 Op Admin
执行如下语句,把文本信息插入表中:
LOAD DATA LOCAL INPATH '/home/hadoop/sample.txt' OVERWRITE INTO TABLE employee;
命令执行成功,可以看到响应信息。
23.2.2 JDBC程序
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveLoadData { 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:9000/hive", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("LOAD DATA LOCAL INPATH '/home/hadoop/sample.txt'" +"OVERWRITE INTO TABLE employee;"); System.out.println("Load Data into employee successful"); con.close(); } }
保存代码到文件
HiveLoadData.java中。用如下命令进行编译和执行代码:
javac HiveLoadData.java
ava HiveLoadData
输出:LoadData into employee successful
23.3 修改数据表(Altertable)
怎么修改表的属性值,例如修改表明、修改列名、添加列、删除或替换列。23.3.1 修改数据表语法
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 ...])
重命名的语法,执行下面语法,把表名从employee改为emp:
ALTER TABLE employee RENAME TO emp;
23.3.2 重命名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:9000/hive", "", ""); // 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
23.3.3 Change语法
下表加黑的字体,表明employee表要进行改变的部分:执行下面的命令,来修改上表中列名和列的数据类型:
ALTER TABLE employee CHANGE name ename String; ALTER TABLE employee CHANGE salary salary Double;
23.3.4 Change的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:9000/hive", "", ""); // 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.
23.3.5 AddColumns语句
在employee表中添加列dept,执行的语句如下:ALTER TABLE employee ADD COLUMNS (dept STRING COMMENT 'Department name');
23.3.6 AddColumns的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:9000/hive", "", ""); // 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
23.3.7 Replace语句
执行下面的语句,将employee表中所有列都删除,并用emp和name替换掉相应的列:ALTER TABLE employee REPLACE COLUMNS ( eid INT empid Int, ename STRING name String);
23.3.8 Replace的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://localhost:9000/hive", "", ""); // 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
23.4 删除表(Droptable)
当从HiveMetastore删除一个表时,同时删除了表中列的数据和元数据。它可以是一个正常的表(存储在Metastore)或者一个外部表(存储在本地文件系统中);Hive以相同的方式对待,无论它们的类型如何。23.4.1删除表(DropTable)
删除表的语法:DROP TABLE [IF EXISTS] table_name;创建一个名为emp带有列:eid、ename的表,然后删除表emp:
23.4.2删除表的JDBC程序
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveDropTable { 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:9000/hive", "", ""); // create statement Statement stmt = con.createStatement(); //create emp table stmt.executeQuery("CREATE TABLE emp" +" (eid INT," +" ename String);"); // execute statement stmt.executeQuery("DROP TABLE IF EXISTS emp;"); System.out.println("Drop table successful."); con.close(); } }
保存代码到文件
HiveDropTable.java
中。用如下命令进行编译和执行代码:
javac HiveDropTable.java
java HiveDropTable
输出:Drop table successful
相关文章推荐
- ASP.NET 3.5核心编程学习笔记(23):Linq-to-SQL 数据的更新、事务、存储过程、函数
- 大数据学习笔记-------------------(23)
- 我的OpenCV学习笔记(23):Mat中实际数据是如何保存的
- ExtJs学习笔记(23)-ScriptTagProxy+XTemplate+WCF跨域取数据
- 机器学习&数据挖掘笔记_23(PGM练习七:CRF中参数的学习)
- PHP学习笔记(23)PHP的数据类型与常量使用(24)PHP的运算符与表达式
- 大数据学习笔记-------------------(23)
- [Android新手学习笔记23]-如何使用ListView展示列表数据
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]
- [学习笔记]ASP.NET需注意数据对象的释放
- C# 学习笔记 -- 第三天 申明和使用数据
- DirectSound学习笔记(5):使用WAV数据
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]
- MyGeneration学习笔记(8) :dOOdad提供的数据绑定、特殊函数和事务处理
- Asp.Net自学笔记...(数据类型和数据转换)---学习的开始
- MyGeneration学习笔记(8) :dOOdad提供的数据绑定、特殊函数和事务处理
- Java开发学习笔记之三:HTTP客户请求数据格式
- .net学习笔记数据绑定20060524
- [BizTalk][Adapter][部署]BTS学习笔记1:建立一个简单的Biztalk数据交换项目(一)
- ASP.net(1.1)原理学习笔记--第七章 数据绑定Data Binding