分桶指的是分桶表的某一列,让该列按照hash取模的方式随机均匀的分布在各个桶中,因为分桶需要根据某一列具体数据来进行hash取模,因此指定的分桶列必须位于表中的一列,分桶改变了数据的存储方式,他会把hash模相同或者在某一区间的数据放一个桶中,来提高查询效率,比如我们要对2张在同一列的表进行分桶操作的表进行join时候,只需要对保存相同列值的桶进行join操作即可,分桶可以使取样更高效
hive分区指单值分区、范围分区,单值分为静态和动态分区2种,
单值分区
单值分区根据插入时是否需要手动指定分区可以分为:单值静态分区=====>(导入数据时需要手动指定分区)以及单值动态分区=====>(导入数据时,系统可以判断目标分区)
单值分区表的创建直接定义或者create table like 单值分区表不能用 CREATE
TABLE AS SELECT 建表。而范围分区表只能通过直接定义列来建表
1静态分区创建
直接在partitioned by后面跟上分区键、类型即可(分区键不能和任何列重名)
create [external] table <table_name>
(<col_name><data_type>[,<col_name><data_type>...])
--指定分区键和数据类型
partitioned by(<partitioned_key><data_type>,...)
[clustered by ...]
[row format <row_format>]
[stored as TEXTFILE|ORC|CSVFILE]
[location '<file_path>']
[tblproperties ('<property_name>'='<proper_value>',...)];
2静态分区写入
a======覆盖写入
insert overwrite table <table_name>
partitioned (<partitioned_key>=<partityoned_value>[,<partitioned_key>=<partityoned_value>,...])