为了账号安全,请及时绑定邮箱和手机立即绑定

在Hive中对表进行分区和存储有什么区别?

在Hive中对表进行分区和存储有什么区别?

Smart猫小萌 2019-11-22 13:13:36
我知道两者都是在表中的列上执行的,但是每个操作有何不同。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

分区数据通常用于水平分布负载,这具有性能优势,并有助于以逻辑方式组织数据。示例:如果我们处理的是一个大employee表,并且经常使用带有WHERE将结果限制到特定国家或地区的子句运行查询。为了获得更快的查询响应,Hive表可以是PARTITIONED BY (country STRING, DEPT STRING)。分区表更改了Hive构造数据存储的方式,Hive现在将创建反映分区结构的子目录,例如

... /员工/ 国家 / 地区= ABC / DEPT = XYZ

如果查询来自雇员的限制country=ABC,它将仅扫描一个目录的内容country=ABC。仅当分区方案反映通用筛选时,这才能大大提高查询性能。分区功能在Hive中非常有用,但是,创建过多分区的设计可能会优化某些查询,但会对其他重要查询不利。另一个缺点是,分区过多是不必要地创建了大量的Hadoop文件和目录,并给NameNode带来了开销,因为它必须将文件系统的所有元数据都保留在内存中。

存储桶是用于将数据集分解为更易于管理的部分的另一种技术。例如,假设一个表date用作顶级分区和employee_id第二级分区会导致太多的小分区。相反,如果我们对employee表进行存储并employee_id用作存储列,则该列的值将由用户定义的数字散列到存储桶中。具有相同记录的记录employee_id 将始终存储在同一存储桶中。假设的数量employee_id远大于存储桶的数量,则每个存储桶将具有许多employee_id。创建表时,您可以指定如下CLUSTERED BY (employee_id) INTO XX  BUCKETS;其中XX是存储桶数。桶装有几个优点。桶的数量是固定的,因此它不会随数据波动。如果两个表由进行存储employee_id,则Hive可以创建逻辑上正确的采样。桶也有助于进行有效的地图侧联接等。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 1223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信