1.分区表
Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。
例如按日期分区
-- log_info
-- 201901
-- 201902
-- 201903
在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
示例:
1)创建表
-- 分区字段不能是表中存在的属性字段
create table stu_info(
id int,
name string,
age int
)
partitioned by ( data_part string)
row format delimited fields terminated by '\t';
2)准备下数据
data_01.txt
1001 zhangsan 18
1002 lisi 20
1003 wangwu 21
data_02.txt
1004 aaa 22
1005 bbb 33
1006 ccc 21
3)导入数据
-- 加载数据时,指定分区
load data local inpath 'data_01.txt' into table stu_info partition(data_part='201810');
load data local inpath 'data_02.txt' into table stu_info partition(data_part='201811');
4)查询分区表中的数据
select * from stu_info where data_part='201810';
使用起来没有什么难度,就是分多个目录存储保存数据,而用于分区属性字段可以当成表的一个属性来使用。
2.分桶表
与分区的区别,分区表针对是目录,也就是存储路径,分桶表,则针对的是文件,粒度更细。
示例
1)准备数据
data_demo.txt
1001 a1
1002 a2
1003 a3
1004 a4
1005 a5
1006 a6
1007 a7
1008 a8
1009 a9
1010 a10
1011 a11
1012 a12
1013 a13
1014 a14
1015 a15
1016 a16
2)创建分桶表
create table stu_info(
id int,
name string)
clustered by(id)
into 4 buckets
row format delimited fields terminated by '\t';
查看表的信息
0: jdbc:hive2://hadoop10:10000> desc formatted stu_info;
......
| Num Buckets: | 4 | NULL |
......
3)导入数据
load data local inpath '/home/v2admin/demo/data_demo.txt' into table stu_info2;
4)查看创建的分桶表中是否分成4个桶
000000_0
000001_0
000002_0
000003_0
Hive是怎么分桶的呢?
它的规则就是对分桶字段进行哈希,然后除以桶的个数求余数的方式来决定该条记录应该放到哪个桶中存储。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。