环境简介

实验环境使用的是cloudera-quickstart-vm-5.0环境。

内容摘要

  1. 创建表
  2. 修改表名
  3. 修改表中的列名
  4. 添加列
  5. 删除列
  6. 替换列

正文

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 ...])

重命名表名

  1. 首先创建目标数据库和目标表

    对于的hive sql语句如下:
create database testdb;-- 创建实验需要的数据库
-- 开始 创建表
create table testdb.student(
id int comment 'student id',
name string comment 'student name',
gender string comment 'student gender'
);
-- 结束 创建表
  1. 查看创建后的表的信息

    查看表的信息,使用describe table来实现。对应的hive sql 语句如下:
-- 开始   查看表
describe testdb.student;
-- 结束 查看表



可以看到,该表已经成功创建,如果想要查看该表的详细信息,使用formatted关键字。代码如下:

-- 开始   查看表
describe formatted testdb.student;
-- 结束 查看表

  1. 修改表名

    为了简单起见,我们这里将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

添加字段

  1. 准备工作

    我们仍然使用上例中的testdb.employees表来进行操作。这里就不再重复贴出代码。
  2. 新加的列信息

    我们希望给员工添加上一个入职时间: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中的eidename替换掉。

1. 动手之前先看一下当前的testdb.employees中有哪些字段吧

describe testdb.employees;

  1. 完成替换

    为了完成替换的任务,我们编写如下的hive sql语句
use testdb;
alter table employees replace columns(
eid int epmid int,
ename string empname string
); describe testdb.employees;
  1. 这里要说一声抱歉,如下两张图所示,我的语句并没有执行成功。

  1. 解决方法
use testdb;
alter table employees replace columns(
epmid int,
empname string
); describe testdb.employees;



根据上面的语句和图片所示,我们可以看到REPLACE COLUMNS是将原来的表中的字段删除,然后使用新的字段来填充该表。

更多内容,请移步阅读:传送门

hive的表的基本操作的更多相关文章

  1. MySQL学习笔记02_数据库和表的基本操作

    02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...

  2. 【转】Hive内部表、外部表

    hive内部表.外部表区别自不用说,可实际用的时候还是要小心. 1. 内部表: create table tt (name string , age string) location '/input/ ...

  3. hive内部表、外部表

    hive内部表.外部表区别自不用说,可实际用的时候还是要小心. Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据:而元数据是用来存储表的名字,表的列和分区及其属性,表的 ...

  4. Hive内表和外表的区别

    本文以例子的形式介绍一下Hive内表和外表的区别.例子共有4个:不带分区的内表.带分区的内表.不带分区的外表.带分区的外表. 1 不带分区的内表 #创建表 create table innerTabl ...

  5. hive内部表与外部表区别

    1.在Hive里面创建一个表: hive> create table wyp(id int,    > name string,    > age int,    > tele ...

  6. Hive学习之三 《Hive的表的详解和应用案例详解》

    一.Hive的表 Hive的表分为内部表.外部表和分区表. 1.内部表,为托管表. 2.外部表,external. 3.分区表. 详解: 内部表,删除表的时候,数据会跟着删除. 外部表,在删除表的时候 ...

  7. hive 创建表和导入数据实例

    //创建数据库create datebase hive;//创建表create table t_emp(id int,name string,age int,dept_name string,like ...

  8. S3c2440A WINCE平台HIVE注册表+binfs的实现

    今天最大的收获莫过于把binfs和hive注册表同时在三星的平台上实现了,这可是前无古人啊(只是看到好多哥们说找不到三星的HIVE资料),哈哈哈.怕今天的成果日后成炮灰,还是写下来比较好,要养成这样的 ...

  9. hive删除表和表中的数据

    hive删除表和表中的数据,以及按分区删除数据 hive删除表: drop table table_name; hive删除表中数据: truncate table table_name; hive按 ...

随机推荐

  1. RBAC打造通用WEB权限

    RBAC不用给用户单个分配权限,只用指向对应的角色就会有对应的权限,而且分配权限和收回权限都很方便 5个关系对应5张表 五张表设计 CREATE TABLE `user` ( `id` ) unsig ...

  2. 浩哥解析MyBatis源码(四)——DataSource数据源模块

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6634880.html 1.回顾 上一文中解读了MyBatis中的事务模块,其实事务操作无非 ...

  3. Java并发编程:同步锁、读写锁

    之前我们说过线程安全问题可以用锁机制来解决,即线程必要要先获得锁,之后才能进行其他操作.其实在 Java 的 API 中有这样一些锁类可以提供给我们使用,与其他对象作为锁相比,它们具有更强大的功能. ...

  4. ReactJS入门:展示数据

    由于公司开发需要,博主利用闲暇的时间对ReactJS的基础知识进行了一些粗浅的认识和了解.博主对ReactJS的学习主要来自官网(http://reactjs.cn/react/docs/thinki ...

  5. JS实现轻量级计算器

    想尝试做一个网页版计算器后,参考了很多博客大神的代码,综合归纳.总结修改,整理如下文. 附:   Demo    源码 一.HTML+CSS 具体结构样式如下图,基本参照手机计算器界面.按钮功能可以查 ...

  6. 国付宝ecshop,shopex,shopnc在线支付接口,php版本支付接口开发

    最近应一个客户的要求,给他的一个ecshop商城开发国付宝在线支付接口.国付宝估计大家比较陌生,但是他集成了很多银行的一些网银接口,所以比较方便.号称国家级的第三方支付平台.最近有增加了域名验证,就是 ...

  7. ios 视频/图片压缩

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  8. FreeBSD上构架Nginx服务器

    这篇文章主要记录作者如何在FreeBSD上构架Nginx服务器.作者采用下载该程序的一个源代码包手动编译的方法,而不是使用包管理工具.这样做有两个原因:首先包质量不能保证,或无效或版本旧:其次需要在编 ...

  9. pdo操纵mysql数据库

    PDO是mysql数据库操作的一个公用类了,我们不需要进行自定类就可以直接使用pdo来操作数据库了,但是在php默认配置中pdo是未开启所以我们必须先在php.ini中开启它才可以使用,下文我会讲到. ...

  10. 在spring boot环境中使用fastjson + redis的高速缓存技术

    因为项目需求,需要在spring boot环境中使用redis作数据缓存.之前的解决方案是参考的http://wiselyman.iteye.com/blog/2184884,具体使用的是Jackso ...