Hive分桶概念


1.Hive分桶的概念

相较于分区,分桶的粒度更小,而且与分区不同的是,分区是人为设定分区字段建立一个用于管理的“伪列”,而分桶是按照某列的属性值的Hash计算结果进行区分。
eg.按照id属性分为3个桶,就是对id属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。


1.建立表并进行分桶

set hive.enforce.bucketing=true;
create table t_test (id int) clustered by (id) into 3 buckets row format delimited fields terminated by '\t';

set hive.enforce.bucketing = true 可以自动控制上一轮reduce的数量从而适配bucket的个数(hummmm嘛意思?)
要使用关键字clustered by 指定分桶依据的列名,并指定分为多少桶,这里指定分为3桶。

2.插入数据

insert into t_test values (1);

reduce数量与桶数量匹配
3.查看结果
1)文件系统中的效果
这里写图片描述

有三个文件,1mod3=1 所以000001_0的大小变成了2B(清晰明了)
2)查询结果的效果
这里写图片描述
通过关键词tablesample来选定桶,000001_0是第二个桶,所以2 out of 3.

### Hive 的概念Hive中,是一种数据区技术,用于提高查询性能。通过将大表划为更小、可管理的部,能够显著提升某些类型的查询效率。具体来说,Bucket number = hash_function(bucketing_column) mod num_buckets[^1]。 这意味着每条记录会根据指定列(bucketing_column)的哈希值被配到不同的内,而总共有num_buckets个。这种机制使得相同键值的数据会被放置在同一物理文件夹下,便于后续处理。 ### 创建表的方法 创建一个带有功能的表格时,需要定义两个重要参数: - `CLUSTERED BY` 子句指定了用来计算哈希函数并决定如何布数据的一个或多个字段; - `INTO ... BUCKETS` 指定要创建的具体的数量。 下面是一个简单的例子来说明这一点: ```sql CREATE TABLE sales ( id INT, name STRING, amount DOUBLE ) CLUSTERED BY (id) INTO 8 BUCKETS; ``` 此命令将会基于`id`字段对销售记录进行散列,并将其均匀布在八个独立的存储单元里。 ### 抽样操作中的应用 当涉及到大规模数据析场景下的随机抽样需求时,可以通过设置特定条件来进行高效采样。例如,在拥有大量历史订单信息的情况下,如果想要获取其中一部样本作为研究对象,则可以利用如下SQL语句实现这一目标: ```sql SELECT * FROM sales TABLESAMPLE(BUCKET x OUT OF y ON columnname); ``` 这里的关键在于理解x和y的关系以及它们各自代表的意义。x表示从哪一个具体的开始选取;y则决定了最终所选样本占总体比例大小——即总共多少份之一[y必须是总数目的因数][^2]。同时需要注意的是,columnname应当与建表时设定的一致。 ### 实际案例析 假设有一个名为customer_visits的大规模访问日志数据库,为了更好地理解和优化用户体验路径,析师希望从中提取具有代表性的小批量用户行为模式供进一步探索。此时就可以考虑采用上述提到的技术手段完成这项工作。 首先确保该表已经按照适当的标准进行了合理的设计,比如按用户的唯一标识符uid来做划。接着执行类似于这样的查询请求以获得所需的结果集: ```sql -- 假设原表已预先配置好为32个, 并且是以'uid'列为依据构建. SELECT * FROM customer_visits TABLESAMPLE(BUCKET 1 OUT OF 4 ON uid); -- 这意味着只读取全部四之一的数据量 ``` 这样不仅简化了实际运算过程中的资源消耗情况,同时也保证了所得结论的有效性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值