Hive实践2之【分桶】

本文详细介绍了Hive中的分桶表概念,包括分桶原理、创建与加载数据的操作,以及分桶在数据抽样中的应用。通过实例展示了如何创建和使用分桶表进行数据管理和高效查询,强调了分桶在解决大数据处理中的作用,如数据倾斜和抽样查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要分桶?

  • 单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理。
  • 通俗点来说就是分区是分文件夹,分桶是将文件夹下的文件分成几个文件块去存储。比如表文件中本来是1000000条数据,由于在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便,所以我们可以分多个文件去存储。
  • 分桶更加细粒度的管理数据,更多的是使用来做抽样、join

1、分桶原理

  • 分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
  • 对于hive中每一个表、分区都可以进一步进行分桶。
  • 由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
  • 适用场景: 数据抽样( sampling ) 与解决数据倾斜

2、分桶操作

注意:分区使用的是表外字段,分桶使用的是表内字段

1、开启hive的桶表功能

set hive.enforce.bucketing = true;

意思:得到bucket的个数和reduce个数是一致的,mr运行时会根据bucket的个数自动分配reduce task个数

2、创建桶表

create table tableName(字段名称 字段类型,字段名称 字段类型, ....)
clustered by(c_id) into n buckets 
row format delimited fields terminated by ‘字段分割符’;

c_id:分桶依据字段
n:桶的个数

3、加载数据

  • 注意事项:
    桶表的数据加载,只能通过insert 插入。hdfs dfs -put文件或者通过load data无法加载。
    所以只能先创建普通表也称为临时表,并通过insert overwrite的方式将普通表的数据通过查询的方式加载到桶表当中去
insert into table 表名 select * from 基础表名;insert
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值