一.Hive分区的概念
分区的目的:避免全表扫描,加快查询速度!
把大的文件切割划分成一个个的小的文件,这样每次操作一个个小的文件就会很容易了
创建单分区表:
CREATE TABLE IF NOT EXISTS t_student ( sno int, sname string ) partitioned by(grade int) row format delimited fields terminated by ','; -- 分区的字段不要和表的字段相同。相同会报错error10035 1,xiaohu01,1 2,xiaohu02,1 3,xiaohu03,1 4,xiaohu04,1 5,xiaohu05,1 6,xiaohu06,2 7,xiaohu07,2 8,xiaohu08,2 9,xiaohu09,3 10,xiaohu10,3 11,xiaohu11,3 12,xiaohu12,3 13,xiaohu13,3 14,xiaohu14,3 15,xiaohu15,3 16,xiaohu16,4 17,xiaohu17,4 18,xiaohu18,4 19,xiaohu19,4 20,xiaohu20,4 21,xiaohu21,4 -- 载入数据 -- 将相应年级一次导入 load data local inpath '/usr/local/soft/bigdata29/grade1.txt' into table t_student partition(grade=1); load data local inpath '/usr/local/soft/bigdata29/grade2.txt' into table t_student partition(grade=2); load data local inpath '/usr/local/soft/bigdata29/grade3.txt' into table t_student partition(grade=3); load data local inpath '/usr/local/soft/bigdata29/grade4.txt' into table t_student partition(grade=4); -- 演示多拷贝一行上传,分区的列的值是分区的值,不是原来的值
注:当表中分区关键字的数据不对时,仍会加载到分区文件当中,select出来的数据会是分区关键字的数值
但是HDFS中文件的数据不会改变,只是查询出来的数据会改变
静态多级分区:
CREATE TABLE IF NOT EXISTS t_teacher ( tno int, tname string ) partitioned by(grade int,clazz int) row format delimited fields terminated by ','; --注意:前后两个分区的关系为父子关系,也就是grade文件夹下面有多个clazz子文件夹。 1,xiaoge01,1,1 2,xiaoge02,1,1 3,xiaoge03,1,2 4,xiaoge04,1,2 5,xiaoge05,1,3 6,xiaoge06,1,3 7,xiaoge07,2,1 8,xiaoge08,2,1 9,xiaoge09,2,2 --载入数据 load data local inpath '/usr/local/soft/bigdata19/hivedata/teacher_1.txt' into table t_teacher partition(grade=1,clazz=1);