1

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是怎么分桶的呢?
它的规则就是对分桶字段进行哈希,然后除以桶的个数求余数的方式来决定该条记录应该放到哪个桶中存储。


leafgood
183 声望15 粉丝

踏入IT这个圈子,就成了一名玩家,想要走的更远,就要不断给自己技能加点才行。


引用和评论

1 篇内容引用
0 条评论