HIVE 表 DLL 基本操作(一)——第2关:Create/Drop/Truncate 表任务描述

简介: HIVE 表 DLL 基本操作(一)——第2关:Create/Drop/Truncate 表任务描述

第2关:Create/Drop/Truncate 表任务描述

本关任务:根据编程要求在数据库中对表进行相应的操作。


相关知识

为了完成本关任务,你需要掌握: 1.如何创建表; 2.如何复制表; 3.如何删除表; 4.如何截断表。


Create 创建表

创建表的语法为:

CREATE [TEMPOPARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type [COMMENT   col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
    [SKEWED BY (col_name,col_name,…) ON ([(col_value,col_value,…),…|col_value,col_value,…]) [STORED AS DIRECTORIES] ]
    [
        [ROW FORMAT DELIMITED [FIFLDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] [NULL DEFINED AS char]
        | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value,property_name=property_value,…)]
      ]
     [STORED AS file_format]
      | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (…)]
    ]
    [LOCATION hdfs_path]
    [TBLPROPERTIES (property_name=property_value,…)]
    [AS select_statement];


参数说明如下:

  • TEMPOPARY:创建临时表,若未指定,则默认创建的是普通表
  • EXTERNAL:创建外部表,若未指定,则默认创建的是内部表
  • IF NOT EXISTS:若表不存在才创建,若未指定,当目标表存在时,创建操作抛出异常
  • db_name.:前缀,指定表所属于的数据库。若未指定且当前数据库非db_name,则使用default数据库
  • COMMENT:添加注释说明,注释内容位于单引号内
  • PARTITIONED BY:针对存储有大量数据集的表,根据表内容所具有的某些共同特征定义一个标签,将这类数据存储在该标签所标识的位置,可以提高表内容的查询速度。PARTITIONED BY中的列名为伪列或标记列,不能与表中的实体列名相同,否则 hive 表创建操作报错
  • CLUSTERED BY:根据列之间的相关性指定列聚类在相同桶中(BUCKETS),可以对表内容按某一列进行升序(ASC)或降序(DESC)排序(SORTED BY关键字)
  • SKEWED BY:用于过滤掉特定列col_name中包含值col_value(ON(col_value,…)关键字指定的值)的记录,并单独存储在指定目录(STORED AS DIRECTORIES)下的单独文件中
  • ROW FORMAT:指定 hive 表行对象(ROW Object)数据与 HDFS 数据之间进行传输的转换方式(HDFS files -> Deserializer ->Row object以及Row object ->Serializer ->HDFS files),以及数据文件内容与表行记录各列的对应。在创建表时可以指定数据列分隔符(FIFLDS TERMINATED BY 子句)、对特殊字符进行转义的特殊字符(ESCAPED BY 子句)、符合数据类型值分隔符(COLLECTION ITEMS TERMINATED BY 子句)、MAP key-value 类型分隔符(MAP KEYS TERMINATED BY)、数据记录行分隔符(LINES TERMINATED BY)、定义NULL字符(NULL DEFINED AS),同时可以指定自定义的SerDE(Serializer和Deserializer,序列化和反序列化),也可以指定默认的SerDE。如果ROW FORMAT 未指定或指定为ROW FORMAT DELIMITED,将使用内部默认SerDe
  • STORED AS:指定 hive 表数据在 HDFS 上的存储方式。file_format值包括TEXTFILE(普通文本文件,默认方式)、SEQUENCEFILE(压缩模式)、ORCORC文件格式)和AVROAVRO文件格式)
  • STORED BY:创建一个非本地表,如创建一个 HBase 表
  • LOCATION:指定表数据在 HDFS 上的存储位置。若未指定,db_name数据库将会储存在${hive.metastore.warehouse.dir}定义位置的db_name目录下
  • TBLPROPERTIES:为所创建的表设置属性(如创建时间和创建者,默认为当前用户和当前系统时间)
  • AS select_statement:使用select子句创建一个复制表(包括select子句返回的表模式和表数据)


  1. 在之前创建的shopping数据库创建一张商品信息表(items_info):
CREATE TABLE IF NOT EXISTS shopping.items_info(
name STRING COMMENT 'item name',
price FLOAT COMMENT 'item price',
category STRING COMMENT 'item category',
brand STRING COMMENT 'item brand',
type STRING COMMENT 'item type',
stock INT COMMENT 'item stock',
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> COMMENT 'item sales address')
COMMENT 'goods information table'
TBLPROPERTIES ('creator'='Xiaoming','date'='2019-01-01');


  1. 查看items_info表结构:
use shopping;  #切换到数据库shopping中
desc items_info;


复制表

按照已存在的表或视图定义一个相同结构的表或视图(使用LIKE关键字,只复制表定义,不复制表数据)。

  1. 复制刚才创建的表items_info起名为items_info2
CREATE TABLE IF NOT EXISTS items_info2LIKE items_info;


Drop 删除表

删除表的语法为:

DROP TABLE [IF EXISTS] table_name;


  • [IF EXISTS]:关键字可选;
  • 若未指定且表table_name不存在时,Hive返回错误。


  1. 删除刚才复制的表items_info2:
DROP TABLE IF EXISTS items_info2;


Truncate 截断表

大家众所周知,当我们在自己的电脑上删除某一个文件,它并没有彻底删除而是进入了回收站,你要在回收站中再将其删除才算彻底清除。截断表就相当于直接将数据从电脑上删除,而不会放入回收站。


截断表(删除表中所有行)的语法为:

TRUNCATE TABLE table_name [PARTITION partition_spec];
partition_spec:
    (partition_column=partition_col_value,partition_column=partition_col_value,…)


编程要求

请根据右侧命令行内的提示,在Begin - End区域内进行sql语句代码补充,具体任务如下:

student表结构:

INFO TYPE COMMENT
Sno INT student sno
name STRING student name
age INT student age
sex STRING student sex
score STRUCT <Chinese:FLOAT,Math:FLOAT,English:FLOAT> student score


  • 创建数据库test2
  • test2中创建表student,表结构如上所示
  • 使用LIKE关键字创建一个与student表结构相同的表student_info
  • 删除表student

按照以上要求填写命令。每个要求对应一条命令,共4条命令,以;隔开。

由于hive启动时间较长,测评时请耐心等待,大概需要时间:1-3分钟。


测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

若操作成功,会显示如下信息:

表student的结构为:
sno                     int                     student sno         
name                    string                  student name        
age                     int                     student age         
sex                     string                  student sex         
score                   struct<Chinese:float,Math:float,English:float>    student score       
表student_info的结构为:
sno                     int                     student sno         
name                    string                  student name        
age                     int                     student age         
sex                     string                  student sex         
score                   struct<Chinese:float,Math:float,English:float>    student score    
数据库test2中有以下表:
student_info

开始你的任务吧,祝你成功!

#********* Begin *********#
echo "
create database if not exists test2
location 'hive/test2'
with dbproperties ('creator'='Floret', 'date'='2020-11-16');
create table if not exists student (
    Sno INT comment 'student sno',
    name STRING comment 'student name',
    age INT comment 'student age'.
    sex STRING comment 'student sex',
    score struct <Chinese:FLOAT, Math:FLOAT, English:FLOAT> comment 'student score'
) 
create table if not exists student_info like student;
drop table if exists student;
"
#********* End *********#


#********* Begin *********#
echo "
CREATE DATABASE IF NOT EXISTS test2
LOCATION '/hive/test2'
WITH DBPROPERTIES ('creator'='Floret','date'='2020-11-16');
CREATE TABLE IF NOT EXISTS test2.student(
Sno INT COMMENT 'student sno',
name STRING COMMENT 'student name',
age INT COMMENT 'student age',
sex STRING COMMENT 'student sex',
score STRUCT<Chinese:FLOAT,Math:FLOAT,English:FLOAT> COMMENT 'student score')
COMMENT 'students information table'
TBLPROPERTIES ('creator'='Floret','date'='2020-11-16');
CREATE TABLE IF NOT EXISTS student_info
LIKE student;
DROP TABLE IF EXISTS student;
"
#********* End *********#



目录
相关文章
|
7月前
|
SQL 存储 HIVE
Hive中的表是如何定义的?请解释表的结构和数据类型。
Hive中的表是如何定义的?请解释表的结构和数据类型。
109 0
|
7月前
|
SQL 大数据 HIVE
Hive 任务调优实践总结
Hive 任务调优实践总结
62 0
|
7月前
|
SQL 消息中间件 数据处理
DataX读取Hive Orc格式表丢失数据处理记录
DataX读取Hive Orc格式表丢失数据处理记录
275 0
|
SQL HIVE
49 Hive修改表
49 Hive修改表
35 0
49 Hive修改表
|
SQL HIVE
71 Azkaban HIVE脚本任务
71 Azkaban HIVE脚本任务
68 0
|
6月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
224 1
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在进行Hive分区truncate操作时遇到权限不足,怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
80 0
|
7月前
|
SQL 分布式计算 数据处理
【Hive】所有的Hive任务都会有MapReduce的执行吗?
【4月更文挑战第17天】【Hive】所有的Hive任务都会有MapReduce的执行吗?
|
7月前
|
SQL 关系型数据库 MySQL
Hive 表注释乱码解决
Hive元数据在MySQL默认使用`latin1`字符集导致注释乱码。可通过修改MySQL配置文件`/etc/my.cnf`,在`[mysqld]`和末尾添加`character-set-server=utf8`等设置,重启MySQL。然后在Hive数据库中调整表字段、分区字段、索引注释的字符集。注意,这仅对新表生效。测试创建带注释的Hive表,问题解决。
100 0
|
7月前
|
SQL 存储 分布式计算
【Hive】hive内部表和外部表的区别
【4月更文挑战第14天】【Hive】hive内部表和外部表的区别