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;
-- 结束 查看表

hive的表的基本操作

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

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

hive的表的基本操作

  1. 修改表名

    为了简单起见,我们这里将testdb.student修改为testdb.student2。对应的代码如下:
use testdb;-- 这里最好先切换数据库为目标数据库
alter table student rename to student2; -- tablea rename to tableb
describe testdb.student2; -- 用新表名查看表信息

hive的表的基本操作

修改字段信息

下表包含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;

hive的表的基本操作

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;

hive的表的基本操作

相信大家可以看出,需要修改字段的信息我们使用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;

hive的表的基本操作

替换列

这里的替换和之前的修改有点类似,这里的替换应该更强调的是位置。

我们这里将employees中的eidename替换掉。

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

describe testdb.employees;

hive的表的基本操作

  1. 完成替换

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

    hive的表的基本操作

hive的表的基本操作

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

hive的表的基本操作

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

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

上一篇:bzoj 2308 小Z的袜子(莫队算法)


下一篇:Operating system error 32(failed to retrieve text for this error. Reason: 15105)