Hive分区表

1、分区表

分区表可以使用partition BY子句创建。一个表可以有一个或多个分区列,并且为分区列中的每个不同值组合创建一个单独的数据目录。此外,表或分区可以使用按列聚集的方式进行分组,并且可以通过按列排序在该桶中对数据进行排序。这可以提高某些查询的性能。

2、创建分区表

静态分区

#将订单按月分进行分区
create table order_partition(
order_no string,
event_time string
)
PARTITIONED BY(event_month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';  #创建一张分区表1
 
load data local inpath '/home/hadoop/data/order.txt' overwrite into table order_partition
PARTITION  (event_month='2014-05');  #将数据加载到指定分区2014-05
 
#若此时我们再复制一份数据到新建hdfs文件event_month='2014-06'目录下,直接查询是无法查询到新新分区的值的,mysql无此元信息,需执行添加分区语句。
 
ALTER TABLE order_partition ADD IF NOT EXISTS PARTITION (event_month='2014-06') ; 

动态分区

CREATE TABLE `emp_dynamic_partition`(
  `empno` int,
  `ename` string,
  `job` string,
  `mgr` int,
  `hiredate` string,
  `sal` double,
  `comm` double)
partitioned by(deptno int)  
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; #语法和静态分区表一致
 
insert into table emp_dynamic_partition PARTITION (deptno)
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;  #注意此时查询列要有deptno字段
#此时会报错,告诉我们 要”To turn this off set hive.exec.dynamic.partition.mode=nonstrict” 去关闭严格模式。
 
set hive.exec.dynamic.partition.mode; #查询该配置的值
set hive.exec.dynamic.partition.mode=nonstrict; #设置为非严格模式
 
insert into table emp_dynamic_partition PARTITION (deptno)
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;  #重新插数据
 
show partitions emp_dynamic_partition;  #显示所有分区信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值