2023.11.12 hive中分区表,分桶表与区别概念

1.分区表

** 分区表的本质就是在分目录**

当Hive表对应的数据量大、文件多时,为了避免查询时全表扫描数据。比如把一整年的数据根据月份划分12个月(12个分区),后续就可以查询指定月份分区的数据,尽可能避免了全表扫描查询。

2.分桶表

分桶表的本质是在分文件

分桶表特点: 需要产生分桶文件, 查询的时候特定操作上提升效率(过滤,join,分组 以及 抽样)

  1. 分桶表也叫做桶表,叫法源自建表语法中bucket单词,是一种用于优化查询而设计的表类型。
  2. 分桶表对应的数据文件在底层会被分解为若干个部分,通俗来说就是被拆分成若干个独立的小文件。
  3. 在分桶时,要指定根据哪个字段将数据分为几桶(几个部分)。
  4. 分桶原理:
    如果是数值类型分桶字段: 直接使用数值对桶数量取模
    如果是字符串类型分桶字段: 底层会使用hash算法计算出一个数字然后再对桶数量取模

分桶表的使用好处有以下几点:

1、 基于分桶字段查询时,减少全表扫描

2、 JOIN时可以提高MR程序效率,减少笛卡尔积数量

  对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了分桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

3、 分桶表数据进行抽样

  当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。

3.分区表和分桶表的区别

分区表:

创建表的时候使用关键字: partition by (分区字段名 分区字段类型)

分区字段名注意事项: 是一个新的字段,需要指定类型,且不能和其他字段重名

分区表好处: 使用分区字段作为条件的时候,底层直接找到对应的分区目录,能够避免全表扫描,提升查询效率

分区表最直接的效果: 在hfds表目录下,分成多个分区目录(year=xxxx,month=xx,day=xx)

不建议直接上传文件在hdfs表根路径下: 分区表直接不能识别对应文件中数据,因为分区表会找分区目录下的数据文件

使用load方式加载hdfs中文件: 本质是移动文件到对应分区目录下
分桶表:

创建表的时候使用关键字: clustered by (分桶字段名) into 桶数量 buckets

分桶字段名注意事项: 是指定一个已存在的字段,不需要指定类型

分桶表好处: 使用分桶字段做抽样等特定操作的时候,也能提升性能效率

分桶表最直接的效果: 在hdfs表目录或者分区目录下,分成多个分桶文件(000000_0,000001_0,000002_0...)

不建议直接上传文件在hdfs表根路径下: 分桶表可以识别对应文件中数据,但是并没有分桶效果,也是不建议的

使用load方式加载hdfs中文件: 本质是复制数据到各个分桶文件中

分区:用load方式从hdfs文件加载到表中,会移动原文件到表的目录下

分桶:用load方式从hdfs文件加载到表中,不是移动原文件,先生成分桶文件,在扫描源文件数据,把符合要求的数据放到对应的桶文件中

相关推荐
Tim_Van32 分钟前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
2023自学中1 小时前
C++ 内存追踪器
linux·c++
imbackneverdie1 小时前
AI4S不止于分子药物:以MedPeer为代表的科研基建打开产业新增量
大数据·人工智能·算法·aigc·科研·学术·ai 4s
啵啵鱼爱吃小猫咪2 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu
MartinYeung53 小时前
[论文学习]大语言模型安全综述:攻击、防御、对齐、度量与护栏的深度解析
学习·安全·语言模型
ApacheSeaTunnel3 小时前
为什么 Data Ingestion 还没有被 Fivetran/Airbyte 完全解决?
大数据·开源·数据集成·seatunnel·技术分享·数据同步·airbyte·fivetran
ljs6482739513 小时前
Linux运维实操:vi编辑器永久配置静态IP(CentOS系列)
linux·运维·编辑器
dddwjzx3 小时前
嵌入式Linux C应用编程入门——高级I/O
linux·嵌入式
启雀AI3 小时前
科技企业如何沉淀研发知识,减少重复开发和经验流失?
大数据·科技·软件需求·知识库·知识管理
AOwhisky4 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环