一、分区

简介

为了对表进行合理的管理以及提高查询效率,Hive可以将表组织成“分区”。

分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,这对于提高查找效率很有帮助。

分区是一种根据“分区列”(partition column)的值对表进行粗略划分的机制。Hive中每个分区对应着表很多的子目录,将所有的数据按照分区列放入到不同的子目录中去。

为什么要分区?

庞大的数据集可能需要耗费大量的时间去处理。在许多场景下,可以通过分区的方法减少每一次扫描总数据量,这种做法可以显著地改善性能。

数据会依照单个或多个列进行分区,通常按照时间、地域或者是商业维度进行分区。比如vido表,分区的依据可以是电影的种类和评级,另外,按照拍摄时间划分可能会得到更一致的结果。为了达到性能表现的一致性,对不同列的划分应该让数据尽可能均匀分布。最好的情况下,分区的划分条件总是能够对应where语句的部分查询条件。

Hive的分区使用HDFS的子目录功能实现。每一个子目录包含了分区对应的列名和每一列的值。但是由于HDFS并不支持大量的子目录,这也给分区的使用带来了限制。我们有必要对表中的分区数量进行预估,从而避免因为分区数量过大带来一系列问题。

Hive查询通常使用分区的列作为查询条件。这样的做法可以指定MapReduce任务在HDFS中指定的子目录下完成扫描的工作。HDFS的文件目录结构可以像索引一样高效利用。

二、分桶(桶表)

简介

桶是通过对指定列进行哈希计算来实现的,通过哈希值将一个列名下的数据切分为一组桶,并使每个桶对应于该列名下的一个存储文件。

为什么要分桶?

在分区数量过于庞大以至于可能导致文件系统崩溃时,我们就需要使用分桶来解决问题了。

分区中的数据可以被进一步拆分成桶,不同于分区对列直接进行拆分,桶往往使用列的哈希值对数据打散,并分发到各个不同的桶中从而完成数据的分桶过程。

注意,hive使用对分桶所用的值进行hash,并用hash结果除以桶的个数做取余运算的方式来分桶,保证了每个桶中都有数据,但每个桶中的数据条数不一定相等。

哈希函数的选择依赖于桶操作所针对的列的数据类型。除了数据采样,桶操作也可以用来实现高效的Map端连接操作。

记住,在数据量足够大的情况下,分桶比分区,更高的查询效率。

三、总结

分区和分桶最大的区别就是分桶随机分割数据库,分区是非随机分割数据库。

因为分桶是按照列的哈希函数进行分割的,相对比较平均;而分区是按照列的值来进行分割的,容易造成数据倾斜。

其次两者的另一个区别就是分桶是对应不同的文件(细粒度),分区是对应不同的文件夹(粗粒度)。

注意:普通表(外部表、内部表)、分区表这三个都是对应HDFS上的目录,桶表对应是目录里的文件

Hive-分区分桶概述相关推荐

  1. Hive 实战(2)--hive分区分桶实战

    前言: 互联网应用, 当Mysql单机遇到性能瓶颈时, 往往采用的优化策略是分库分表. 由于互联网应用普遍的弱事务性, 这种优化效果非常的显著.而Hive作为数据仓库, 当数据量达到一定数量时, 查询 ...

  2. hive详解(分区分桶)

    分区&分桶 分区 为什么有分区? 随着系统运行时间增长,表的数据量越来越大,而hive查询时通常是是全表扫描,这样将导致大量的不必要的数据扫描,从而大大减低查询效率. 从而引进分区技术,使用分 ...

  3. hive 建表,分桶表(clustered by)、分桶且桶内排序(clustered by+sorted by)、分区表(partitioned by)、分区分桶一起用

    一.分桶表 1.建表语句 create table test_bucket_sorted ( id int comment 'ID', name string comment '名字' ) comme ...

  4. Hive:命令行界面、数据类型、DDL数据定义(数据库及表操作/分区分桶)、DML数据操作(数据导入导出)

    目录 1.Hive命令行界面 1.1.选项列表 1.2.变量和属性 1.2.1.Hive中变量和属性命名空间 1.2.2.用户自定义变量 1.2.3..hiverc文件 1.3.一次使用的命令 1.4 ...

  5. 大数据之hive:hive分桶表

    目录 一.回顾分区表 二.为什么分桶? 三.分桶表的使用 1.创建一个带分桶定义的表(分桶表) 2.加载数据: 3.对分桶表的查询 分桶总结: 实例 一.回顾分区表 为什么有分区? 随着系统运行时间增 ...

  6. 大数据学习笔记42:Hive - 分桶表

    文章目录 一.Hive分桶表 1.分桶操作 2.分桶原理 3.注意事项 二.分桶表案例演示 1.创建数据文件courses.txt 2.将数据文件上传到HDFS的/bucket目录 3.基于/buck ...

  7. CIR,CBS,EBS,PIR,PBS令牌桶概述

    CIR,CBS,EBS,PIR,PBS令牌桶概述 网络发生拥塞的时候,也是一件非常痛苦的事情,如图1和图2所示. 图1 网络拥塞场景1 图2 网络拥塞场景2 如果不限制用户发送的业务流量大小,大量不断 ...

  8. Hive分区和桶的概念

    Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 S ...

  9. mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点

    MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...

最新文章

  1. 操作系统的八股文自述(持续更新)
  2. 《编程小白的第一本python入门书》笔记 二
  3. sqlyog怎么设置默认值_详细讲解如何用SQLyog来分析MySQL数据库
  4. Python 面向对象与 C++、Java 的异同
  5. Node — 第三天
  6. netty实现客户端服务端心跳重连
  7. android studio ignore 模板,android studio git ignore
  8. leetcode 122. 买卖股票的最佳时机 II(贪心算法)
  9. Plist文件和字典转模型
  10. java 批量入库oracle_java操作Oracle数据库——ARRAY、TABLE类型批量入库
  11. 服务器重启后发现docker-compose的nginx重启失败: Error starting userland proxy: listen tcp 0.0.0.0:80: bind: addres
  12. windows中安装64位MySQL及连接MySQL和重置MySQL密码
  13. “龙书”作者斩获图灵奖!谷歌 AI 大神、Swift 之父都受它启蒙
  14. 写在2017年的总结
  15. PHP--变量部分知识点
  16. 新手从零学电脑组装与维修视频教程
  17. 人脸聚类Learning to Cluster Faces(翻译)
  18. 打包jar包时文件读取和第三方jar包的问题
  19. 服务器ftp文件不能共享文件夹权限,ftp服务器共享文件夹权限设置
  20. 关于事件驱动架构在工作中的一些想法及实践

热门文章

  1. 索非亚机器人的采访_还记得曾经扬言要“毁灭人类”的机器人索菲亚吗?如今过成这样...
  2. C语言 __LINE__ - C语言零基础入门教程
  3. BugkuCTF-MISC题蜘蛛侠
  4. 中国大学慕课python答案第七章_中国大学慕课用Python玩转数据章节测试答案
  5. java字节流转字符串_字节流与字符流的区别及相互转换
  6. python随机数据随概率分布_概率分布及其Python实现
  7. java的serversocket_Java ServerSocket 实现聊天室功能(简易版)
  8. java是值传递还是引用传递_Java 到底是值传递还是引用传递?
  9. 父子组建传值_浅谈Vue父子组件和非父子组件传值问题
  10. memlock mysql_mysql配置详解(不断更新)