hive的表的基本操作

环境简介

实验环境使用的是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是将原来的表中的字段删除,然后使用新的字段来填充该表。

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

posted @ 2016-10-08 14:34  shugen  阅读(668)  评论(0编辑  收藏  举报