Hive之分区表(静态分区 / 动态分区)(4)

一  为什么表数据要分区管理

1   hive 中的数据是存储在对应的表的目录下的

2   查询数据的时候加载目录下的所有的文件 ,where 筛选过滤

3   日志数据可能每天都会有所增加,每天都有大量的文件 ,如每天的操作数据 ;

2018-09-02.log.....

2018-09-01.log..... 

2018-08-31.log.....

4 为了对数据进行更好的管理,也为了在查询的时候增加查询速度,增加查询效率 ,需要对日志数据进行分区处理 ,也就是让静态文件根据一定的规则分文件夹来管理 ,查询的时候,只要根据文件夹去检索,可以减少很大的查询/检索工作 ,所以可以增加检索/查询数据的速度.

5 如果文件没有分文件夹管理 ,而是将所有文件都放在一个大的文件夹里面的话 ,那检索的时候就需要在这个大的文件夹里面从头开始一个一个的检索,因为没有确定的位置 ,所有检索工作量非常大,导致查询速度慢,效率低 ,当时如果根据日期来进行分文件夹来管理 ,比如查询 select * from tb_log where dt = '2018-09-02'时,就可以根据表目录,直接找到 09月 02日的文件夹然后查询,大大减少了查询工作量,因为有确定的位置信息,所以检索速度快,效率也高 ,分区格式如下 :
  表目录如下 : 
   2018-09-01目录
        01号的日志
        01号的日志
        01号的日志
        
   2018-09-02目录
        02号的日志
       02号的日志
          02号的日志
        02号的日志

特点 : 有固定的数据存储 , 分文件存储

二  创建静态分区表

1   数据的处理

1.1   将不同日期不同后缀的文件分开存储插入到本地 /root/hive/datalog/ 目录下 ,生成静态文件

[root@linux03 datelog]# vi 2018-08-31_01.log
[root@linux03 datelog]# vi 2018-08-31_02.log

[root@linux03 datelog]# vi 2018-09-01_01.log
[root@linux03 datelog]# vi 2018-09-01_02.log

[root@linux03 datelog]# vi 2018-09-02_01.log
[root@linux03 datelog]# vi 2018-09-02_02.log

1.2  查看文件插入情况

[root@linux03 datelog]# ll
-rw-r--r--. 1 root root 75 Sep  2 23:12 2018-08-31_01.log ---> a
-rw-r--r--. 1 root root 75 Sep  2 23:12 2018-08-31_02.log----> b
-rw-r--r--. 1 root root 75 Sep  2 23:11 2018-09-01_01.log---> a
-rw-r--r--. 1 root root 75 Sep  2 23:11 2018-09-01_02.log----> b
-rw-r--r--. 1 root root 75 Sep  2 23:10 2018-09-02_01.log---> a
-rw-r--r--. 1 root root 75 Sep  2 23:10 2018-09-02_02.log----> b

2   创建一级静态分区表,按照日期进行分区管理

分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹 ,该文件夹下是该分区所有的数据文件 .Hive 中的分区就是分目录 ,

把一个大的数据集根据业务需要分割成小的数据集 .在查询时通过 where 子句中的表达式选择查询所需要的指定字段的分区 ,这样

查询效率会提高很多 .

2.1  创建表并加载数据

1 创建静态一级分区表
create table tb_static_partition1(
id int,
ctime string,
name string)
partitioned by (dayt string)  -------------------按照 "dayt"日期中的天来分区
row format delimited fields terminated by ",";

2 加载文件到刚刚创建的表里面 ---------指定分区内容
load data local inpath "/root/hive/datelog/2020-09-02_01.log" into table tb_static_partition1 partition(dayt="2018-09-02");
load data local inpath "/root/hive/datelog/2020-09-02_02.log" into table tb_static_partition1 partition(dayt="2018-09-02");
load data local inpath "/root/hive/datelog/2020-09-01_01.log" into table tb_static_partition1 partition(dayt="2018-09-01");
load data local inpath "/root/hive/datelog/2020-09-01_02.log" into table tb_static_partition1 partition(dayt="2018-09-01");
load data local inpath "/root/hive/datelog/2020-08-31_0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值