[关闭]
@Arslan6and6 2016-05-18T18:38:45.000000Z 字数 1693 阅读 672

【作业十四】殷杰

第七章、大数据仓库Hive深入

---Hive表的创建及测试

作业描述:

依据课程中讲解的 Hive 中各种表的创建方式以及应用场景进行练习回顾,以下几点必须体现:

1) Hive 中创建表的三种方式,应用场景说明及练习截图

2) 内部表和外部表的区别,练习截图

3) 分区表的功能、创建,如何向分区表中加载数据、如何检索分区表中的数据,练习截图

1) Hive 中创建表的三种方式,应用场景说明及练习截图

a) 创建管理表(内部表)

创建表
01.jpg-17.1kB
查看表属性,其中 Table Type: MANAGED_TABLE 表示管理表
02.jpg-62kB
此表用于单一业务环境

b) 创建外部表

创建表 语法: create external table 表名
10.jpg-22.8kB
查看表属性,其中 Table Type: EXTERNAL_TABLE
11.jpg-49.1kB
外部表用于多业务公用一个数据文件的场景

c) 创建分区表

创建表

分区表用于时间增量数据,以便于分时间查询数据

2) 内部表和外部表的区别,练习截图

a) 内部表用于单一业务场景,删除内部表后,存储于HDFS系统用于加载数据的数据文件及表文件夹随之删除

举例:
按上题创建内部 dept 表后,HDFS页面显示如下:
05.jpg-38.1kB
06.jpg-44.5kB
删除内部表dept
07.jpg-8kB
HDFS页面显示,内部表 dept 目录已不存在
08.jpg-36.2kB

b) 外部表用于多业务场景,多业务公用存储于HDFS系统中的同一数据文件,删除外部表仅表示删除该表元数据,存储于存储于HDFS系统用于加载数据的数据文件及表文件夹仍然存在。如多业务均加载HDFS系统中的同一数据文件用以生成不同分区表,删除某一业务使用的分区表并不会影响其他业务分区表的使用,因为其他业务使用的分区表所加载的数据文件依然存在。

举例:
依照上题,同样使用HDFS系统中/data/dept/dept.txt的数据创建分区表dept3。通常创建分区表会 location 在HDFS中另外设置数据文件存储位置,而不同于内部表使用HDFS默认路径/user/hive/warehouse
09.jpg-22.7kB

上传数据文件 dept.txt 至 HDFS系统 /data/dept。
12.jpg-14.9kB

此时,外部表dept2和dept3都已加载共同数据 /data/dept/dept.txt
13.jpg-55.3kB

14.jpg-54.9kB

15.jpg-50.3kB

现删除外部表 dept2, 外部表 dept3 正常,HDFS系统数据文件依然存在
16.jpg-46.7kB
17.jpg-33.8kB

3) 分区表的功能、创建,如何向分区表中加载数据、如何检索分区表中的数据,练习截图

####分区表的功能:
分区表用于时间增量数据,以便于分时查询提高查询速度。并可以创建一级分区二级分区,如一级按月分区二级按日分区。

创建分区表

   语法: 
        create table 表名 (字段 ,字段数据类型 ...) partitioned by (date string) row format delimited fields terminated by '分隔符';
   举例:

18.jpg-20.6kB

20.jpg-28kB

加载数据:

   语法: 
        load data [local] inpath "/opt/modules/apache-hive-0.13.1-bin/emp.txt" into [overwrite] table 表名 partition (date='日期');
        举例:    

19.jpg-59.1kB

检索数据:

   语法:
        select * from 表名 where date='日期';
   举例:
        ![21.jpg-34.3kB][19]

创建二级分区表

   语法:
        create table 表名 (字段 ,字段数据类型 ...) partitioned by (date string,time string) row format delimited fields terminated by '分隔符';
   举例:

22.jpg-24.6kB

23.jpg-31.6kB

####加载二级分区表数据
语法:
load data [local] inpath "/opt/modules/apache-hive-0.13.1-bin/emp.txt" into [overwrite] table 表名 partition (date='日期', time='时间');
举例:加载日期20150521,时间0759及日期20150521,时间1959两份数据
24.jpg-60.6kB

26.jpg-60.8kB

检索二级分区表

   语法:
         select * from 表名 where date='日期' and time='时间';
   举例:

单独检索 日期20150521及时间0759
25.jpg-38.4kB

合并检索 日期20150521中的时间0759和1959
26.jpg-58.9kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注