环境简介
实验环境使用的是cloudera-quickstart-vm-5.0
环境。
内容摘要
- 创建表
- 修改表名
- 修改表中的列名
- 添加列
- 删除列
- 替换列
正文
Alter Table 语句
上面所述的6种针对hive的操作都是使用Alter Table
来完成的。 Alter Table
的语法如下:
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 ...])
重命名表名
- 首先创建目标数据库和目标表
对于的hive sql语句如下:
create database testdb;-- 创建实验需要的数据库
-- 开始 创建表
create table testdb.student(
id int comment 'student id',
name string comment 'student name',
gender string comment 'student gender'
);
-- 结束 创建表
- 查看创建后的表的信息
查看表的信息,使用describe table
来实现。对应的hive sql 语句如下:
-- 开始 查看表
describe testdb.student;
-- 结束 查看表
可以看到,该表已经成功创建,如果想要查看该表的详细信息,使用formatted
关键字。代码如下:
-- 开始 查看表
describe formatted testdb.student;
-- 结束 查看表
- 修改表名
为了简单起见,我们这里将testdb.student
修改为testdb.student2
。对应的代码如下:
use testdb;-- 这里最好先切换数据库为目标数据库
alter table student rename to student2; -- tablea rename to tableb
describe testdb.student2; -- 用新表名查看表信息
修改字段信息
下表包含testdb.employees
表的字段,它显示的字段要被更改(粗体)。
字段名 | 从数据类型转换 | 更改字段名称 | 转换为数据类型 |
---|---|---|---|
eid | int | eid | int |
name | String | ename | String |
salary | Float | salary | Double |
designation | String | designation | String |
1. 准备工作
为了上面的实验,我们需要先创建testdb.employees
表。对应的hive sql语句如下:
create table testdb.employees(
eid int comment 'this is employees id',
name string comment 'this is employee name',
salary float comment 'this is the salary of employee',
desination string );
-- 查看创建后的表
describe testdb.employees;
2. 修改表中的列信息 从1中的表我们知道我们需要将employees.name
修改成employees.ename
,还是就是将employees.salary
的类型由float
换成double
类型。实现本案例的hive sql语句如下:
use testdb; -- 切换到目标数据库
-- 本条语句是将name 字段更改为ename string
alter table employees CHANGE name ename string;
-- 本条语句是将salary更改为salary double
alter table employees CHANGE salary salary double;
describe employees;
相信大家可以看出,需要修改字段的信息我们使用change 命令。命令格式为: alter table chane old_column new_column new_clumn_type
添加字段
- 准备工作
我们仍然使用上例中的testdb.employees
表来进行操作。这里就不再重复贴出代码。 - 新加的列信息
我们希望给员工添加上一个入职时间:joinDate date
。为了实现该目标,我么需要输入的hive sql 如下所示:
use testdb;
alter table employees add COLUMNS (
joinDate date comment 'date type is supported by Hive0.12.0'
);
describe testdb.employees;
替换列
这里的替换和之前的修改有点类似,这里的替换应该更强调的是位置。
我们这里将employees
中的eid
和ename
替换掉。
1. 动手之前先看一下当前的testdb.employees
中有哪些字段吧
describe testdb.employees;
- 完成替换
为了完成替换的任务,我们编写如下的hive sql语句
use testdb;
alter table employees replace columns(
eid int epmid int,
ename string empname string
);
describe testdb.employees;
- 这里要说一声抱歉,如下两张图所示,我的语句并没有执行成功。
- 解决方法
use testdb;
alter table employees replace columns(
epmid int,
empname string
);
describe testdb.employees;
根据上面的语句和图片所示,我们可以看到REPLACE COLUMNS是将原来的表中的字段删除,然后使用新的字段来填充该表。
更多内容,请移步阅读:传送门
hive的表的基本操作的更多相关文章
-
MySQL学习笔记02_数据库和表的基本操作
02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...
-
【转】Hive内部表、外部表
hive内部表.外部表区别自不用说,可实际用的时候还是要小心. 1. 内部表: create table tt (name string , age string) location '/input/ ...
-
hive内部表、外部表
hive内部表.外部表区别自不用说,可实际用的时候还是要小心. Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据:而元数据是用来存储表的名字,表的列和分区及其属性,表的 ...
-
Hive内表和外表的区别
本文以例子的形式介绍一下Hive内表和外表的区别.例子共有4个:不带分区的内表.带分区的内表.不带分区的外表.带分区的外表. 1 不带分区的内表 #创建表 create table innerTabl ...
-
hive内部表与外部表区别
1.在Hive里面创建一个表: hive> create table wyp(id int, > name string, > age int, > tele ...
-
Hive学习之三 《Hive的表的详解和应用案例详解》
一.Hive的表 Hive的表分为内部表.外部表和分区表. 1.内部表,为托管表. 2.外部表,external. 3.分区表. 详解: 内部表,删除表的时候,数据会跟着删除. 外部表,在删除表的时候 ...
-
hive 创建表和导入数据实例
//创建数据库create datebase hive;//创建表create table t_emp(id int,name string,age int,dept_name string,like ...
-
S3c2440A WINCE平台HIVE注册表+binfs的实现
今天最大的收获莫过于把binfs和hive注册表同时在三星的平台上实现了,这可是前无古人啊(只是看到好多哥们说找不到三星的HIVE资料),哈哈哈.怕今天的成果日后成炮灰,还是写下来比较好,要养成这样的 ...
-
hive删除表和表中的数据
hive删除表和表中的数据,以及按分区删除数据 hive删除表: drop table table_name; hive删除表中数据: truncate table table_name; hive按 ...
随机推荐
-
《Linux内核设计与实现》CHAPTER1,2阅读梳理
<Linux内核设计与实现>CHAPTER1,2阅读梳理 [学习时间:2.5hours] [学习内容:Linux内核简介——历史与现今版本:Linux内核源代码以及编译] CHAPTER1 ...
-
hdu City Game
做这题之前建议做一下hdu1506题,两道题是极度相似的题,不同的是这个要处理的是m行,所以可以用一个dp[][]数组存储矩形的高度,之后就变成hdu1506了. 例如测试样例: 0 1 1 1 1 ...
-
第一个androidAPP项目总结—ListView的上拉和下拉
1.下拉刷新 需继承implements SwipeRefreshLayout.OnRefreshListener @Overridepublic void onRefresh() { new Wea ...
-
Unity5.0 RPG角色扮演历险类游戏之 森林历险记
http://v.youku.com/v_show/id_XMTI1MjEyNjc4MA==.html? from=y1.7-1.2
-
JAVA并发编程实战---第三章:对象的共享(2)
线程封闭 如果仅仅在单线程内访问数据,就不需要同步,这种技术被称为线程封闭,它是实现线程安全性的最简单的方式之一.当某个对象封闭在一个线程中时,这种方法将自动实现线程安全性,即使被封闭的对象本生不是线 ...
-
HDU 1002 A + B Problem II(高精度加法(C++/Java))
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
-
Jsonp 原理简述
浏览器因为安全问题而有一个同源策略,不允许跨域请求数据.但是 js 脚本资源和图片资源还是被允许跨域请求的.在 web 开发中,遇到要跨域请求 json 数据时,可以用 jsonp 的方式来绕过浏览器 ...
-
nginx80端口被占用,启动失败。
mac自带的apache占用了80端口,导致nginx服务器不能启动.这个问题是怎么解决的,目前还是不清楚. apache占用端口,使用命令进行关闭: apachectl -k stop,然后重启 ...
-
运行Spark-shell,解决Unable to load native-hadoop library for your platform
启动spark后,运行bin/spark-shell会出现一个警告 提君博客原创 WARN util.NativeCodeLoader: Unable to load native-hadoop li ...
-
电信版华为MATE7 EMUI4.0回退3.1和3.0教程与中转包
mate7升级6.0后遇到很多问题,想回退版本,找了很多教程,现在总结一下用中转包回退.EMUI4.0回退3.1,先下载B500中转包,将dload复制到2G以上内存卡根目录,不要三键强刷,会卡在开机 ...