文档章节

大数据学习笔记-------------------(23)

henni_719
 henni_719
发布于 2017/03/14 17:25
字数 1620
阅读 3
收藏 0

第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

 

本文转载自:http://blog.csdn.net/henni_719/article/details/52932702

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
如何确定A段文字是由B段文字修改而来?

我在印象笔记中有近万条笔记,因害怕印象笔记出bug或自己误操作,导致笔记丢失,所以想定期(一周一次)导出所有笔记 的标题,用印象笔记自带功能可以完成标题导出,导出到一个html文件中,然后...

李毅超
2018/03/21
152
6
20天,碎片化时间,266页西瓜书。大神笔记拿走,快速学起来

     五一小长假前,大数据文摘发起了打卡学习活动,收到了读者朋友的积极响应,也成了氛围良好的学习社区。目前,第三轮打卡学习活动即将接近尾声,文摘菌带大家一起来感受打卡学习社区...

大数据文摘
2018/05/13
0
0
AI角 | 把吴恩达深度学习系列课程画出来,这有份诚意满满的笔记求查收

在吴恩达机器学习系列课程完结后不久,一位名叫Tess Ferrandez的小姐姐在推特上分享了一套自己的课程笔记,瞬间收获了3k+赞和1k+转发。 不同于满屏公式代码的黑白笔记,这套信息图不仅知识点...

技术小能手
2018/03/19
0
0
Android实战经验之图像处理及特效处理的集锦(总结版)

1 Android学习笔记进阶之在图片上涂鸦(能清屏) 2 Android学习笔记之详细讲解画圆角图片 3 Android学习笔记进阶20之得到图片的缩略图 4 Android学习笔记进阶19之给图片加边框 5 Android学习笔...

xiaosi
2012/03/12
40.1K
25
把吴恩达深度学习系列课程画出来,这有份诚意满满的笔记求查收

     大数据文摘作品   在吴恩达机器学习系列课程完结后不久,一位名叫Tess Ferrandez的小姐姐在推特上分享了一套自己的课程笔记,瞬间收获了3k+赞和1k+转发。   不同于满屏公式代码...

大数据文摘
2018/03/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
6
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.9K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部