分区表(Partitioned Table)
分区表是将表的数据按照某个列的值进行逻辑上的划分,将数据分散存储在不同的分区中
在Hive中,要创建分区表,语法:
create [external] table 表名(
字段名 字段类型 [comment '注释'],
字段名 字段类型 [comment '注释'],
...
)
[partition by(分区列 数据类型, ...)]
[row format delimited
fields terminated by '指定分隔符'];
说明:
(1)partition表示给数据表分区处理,但后面字段有多个时,表示多分区表;
(2)分区列名不允许与表字段同名,要单独命名,一般以年、月、日分区;
(3)注意:partition的位置要放在设定分隔字符语句之前。
没有在HDFS中刷新出分区数据信息,导致无法识别。
修复分区:
msck repair table 表名;
分桶表(Bucketed Table)
分桶表是将表的数据按照哈希函数对某个列的值进行分桶,将数据均匀地分布到不同的桶中
创建分桶表语法:
create [external] table 表名(
字段名 字段类型 [comment '注释'],
字段名 字段类型 [comment '注释'],
...
)
[clustered by (字段名) into 分桶数 buckets]
[分桶数]代表分桶的数量。而如果没有额外修改reduce数量时,默认分桶数和reduce值一致
分桶表的一些优点:
1)提升过滤性能
基于分桶字段的where过滤查询时,可减少全表扫描
2)提升join多表查询\
JOIN时可以提高MapReduce程序效率,减少笛卡尔积数量
3)提升分组效率
以某列作为分组时,可减少全表扫描,进入到分桶表中处理,效率高一些
4)提升抽样处理
当数据量特别大时,对全体数据进行处理存在困难,抽样就显得尤其重要