zoukankan      html  css  js  c++  java
  • 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是将原来的表中的字段删除,然后使用新的字段来填充该表。

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

  • 相关阅读:
    Swift 网络请求数据与解析
    第三方-Swift2.0后Alamofire的使用方法
    java异常处理机制throws
    eclipse导入不到嵌套的项目
    java异常处理机制Exception
    在eclipse中查找指定文件
    mysql查询count
    【待解决】An internal error occurred during: "Launching baiduTest1". java.lang.NullPointerException
    TestNG升级
    eclipse安装TestNG插件
  • 原文地址:https://www.cnblogs.com/shugen/p/6862987.html
Copyright © 2011-2022 走看看