Hive-分区表

目录

为什么要有分区表?

静态分区

简介

条件

一级静态分区

hsql演示

创建多级分区表

动态分区

简介

步骤

hsql操作

1.  建普通表

2.导入数据

3. 分区表

4.  开启动态分区支持

5.  通过select insert的方式导入数据


为什么要有分区表?

将表的数据以查询维度为依据分文件夹管理 , 当根据这个维度查询的时候减少数据的检索范围
   比如有一个log表 所有的日志数据在log表目录下 ,假如想查20201130日的数据 , 只能遍历所有的数据
   有了分区表以后  数据就可以以日期为维度 为文件夹存储对应日期的数据 假如想查20201130日的数据直接从对应的文件夹下读取数据

静态分区

简介

文件中存储的是指定规则的数据  比如  a.log中存储的就是20201130的数据
  直接创建一个分区叫20201130   将数据直接load到目录下

条件

  1)前提有静态数据
  2)创建分区表 
  3)将静态数据导入到指定的分区中

一级静态分区

hsql演示

1.  有静态数据

      

2.  创建分区表

create table tb_log (
log_id string ,
url string ,
ct string
)
partitioned by(dt string) -- 指定分区字段
row format delimited fields terminated by ',';

3.  将静态数据导入到指定的分区中

load  data  local  inpath  "/data/20201128.log"  into  table tb_partition_log partition(dt='20201128') ;
load  data  local  inpath  "/data/20201129.log"  into  table tb_partition_log partition(dt='20201129') ;
load  data  local  inpath  "/data/20201130.log"  into  table tb_partition_log partition(dt='20201130') ;

创建多级分区表

 

1.  

年月日三级分区  -----
create table tb_partition_log3(
log_id string ,
url string ,
ct string
)
partitioned  by(y string,m string , d string) -- 指定分区字段  2个
row format delimited fields terminated by ',' ;

2.  

load data local inpath '/log/log/20190911.log' into table tb_partition_log3 partition(y='2019' , m='09' , d='11');
load data local inpath '/log/log/20191011.log' into table tb_partition_log3 partition(y='2019' , m='10' , d='11');
load data local inpath '/log/log/20201010.log' into table tb_partition_log3 partition(y='2020' , m='10' , d='10');
load data local inpath '/log/log/20201011.log' into table tb_partition_log3 partition(y='2020' , m='10' , d='11');
load data local inpath '/log/log/20201128.log' into table tb_partition_log3 partition(y='2020' , m='11' , d='28');
load data local inpath '/log/log/20201129.log' into table tb_partition_log3 partition(y='2020' , m='11' , d='29');
load data local inpath '/log/log/20201130.log' into table tb_partition_log3 partition(y='2020' , m='11' , d='30');

动态分区

简介

比如a.log中既有20201130数据 又有20201129数据 还有20191111的数据
只能根据日期字段的值创建分区  将对应的数据分配指定的分区

步骤

1) 建普通表
2) 导入数据
3) 分区表
4) 开启动态分区支持
5) 通过select insert的方式导入数据

hsql操作

1.  建普通表

  • 数据

user.log
1,lisi,Shanghai
2,ycy,Shanghai
3,ym,Beijing
4,Yangzi,Beijing
5,Yangguo,shenzhen
6,mayun,shenzhen
7,mbg,Shanghai
8,marong,shenzhen

create  table  tb_user_log(
uid int ,
name string ,
city string 
)
row format delimited fields terminated by ',' ;

2.导入数据

load data local inpath "/log/user/user_log/" into  table tb_user_log ;

select *  from tb_user_log ;
+------------------+-------------------+-------------------+
| tb_user_log.uid  | tb_user_log.name  | tb_user_log.city  |
+------------------+-------------------+-------------------+
| 1                | lisi              | Shanghai          |
| 2                | ycy               | Shanghai          |
| 3                | ym                | Beijing           |
| 4                | Yangzi            | Beijing           |
| 5                | Yangguo           | shenzhen          |
| 6                | mayun             | shenzhen          |
| 7                | mbg               | Shanghai          |
| 8                | marong            | shenzhen          |
+------------------+-------------------+-------------------+
8 rows selected (0.165 seconds)

3. 分区表

CREATE  TABLE tb_dynamic_partition_user_log(
id int ,
name string ,
city string 
)
partitioned by(p_city string) ;

4.  开启动态分区支持

set hive.exec.dynamic.partition=true ;
set hive.exec.dynamic.partition.mode=nonstrick;

5.  通过select insert的方式导入数据

insert into  tb_dynamic_partition_user_log  partition(p_city)
select uid , name  , city , city as p_city   from tb_user_log ;
  • 创建成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值