环境简介

实验环境使用的是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. 将ROS中的/sensor_msgs/NavSatFix数据导入google earth显示轨迹

    将ros中的gps_msg数据导入google earth显示轨迹 [TOC] 1. 获取GPS数据 将ros中发布的gps topic输出到文本中 rostopic echo -p /gpsData ...

  2. nlog学习使用

    最近有不少朋友推荐我用NLog.我以前都是自己写txt的文本输出log,以前别人用log4net的时候看那个配置文件,看得我一阵烦,我比较喜欢约定胜于配置的组件.这次玩了一波NLog,,相当不错.一下 ...

  3. java 基础知识四 流程控制

    java   基础知识四 流程控制 Java流程控制包括顺序控制.条件控制和循环控制 顺序控制就是逐条执行 有if和switch两个分支 循环控制就是 又称为回路控制,根据循环初始条件和终结要求,执行 ...

  4. stm32串口通讯问题

    stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ...

  5. Java转型(向上转型和向下转型)

    在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...

  6. CGLIB和JDK代理

    需要的架包:在spring中提供对CGLIB的支持 一.JDK的动态代理 1.接口IUserDao package cn.itcast.spring3.jdk.proxy; public interf ...

  7. 记一次 Newtonsoft.Json 巧妙的用法(C#)

    数据添加的功能 有一个表格提交数据如下: 是否选择和文本值.分开保存到数据库太麻烦.取得时候也麻烦 想到了存成json数据.一个字段就可以了. html代码: <table class=&quo ...

  8. jquery控制图片切换

    这种js现在用的很多.同时网上的js代码页很多.我直接从网上当了一个来用:代码如下: html <div class="bannerbox">              ...

  9. TCP/IP笔记(七)TCP详解

    TCP的特点及其目的 为了通过数据包实现可靠性传输,需要考虑很多事情,例如数据的破坏.丢包.重复记忆分片顺序混乱等问题.如不能解决这些问题,也就无从谈起可靠传输. TCP通过检验和.序列号.确认应答. ...

  10. Web 网站服务

    Apache 简介 Apache HTTP Server(简称Apache)是开放源码的网页服务器,基于标准的HTTP网站协议提供网页浏览服务,在Web服务器领域中长期保持着超过半数的份额.Apach ...