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; #显示所有分区信息